C言語を例にして、大まかな流れを考えてみましょう。
if (a > b) c = a; else c = b;
このような文字の並びを、トークン(単語)に区切っていきます。これが字句解析の段階です。この段階で綴り間違いや、キーワードや定数などの単語とみなせない語句があればエラーとなります。
if ( a > b ) c = a ; else c = b ;
単語に分割した後は、構文解析を行います。C言語のif文は、
if (式) 文
if (式) 文 else 文
のいずれかの形式ですから、これにのっとっているかどうか、すなわち《形》として正しいかどうかが調べられます。この場合はOKですね。
それが終了すると、次は意味解析です。たとえば、C言語では、構造体のオブジェクト(変数)の大小関係を比較することができませんので、通常の算術型であれば正しいa > bという式もエラーとなります。《意味》が正しいかどうかが調べられるわけです。
さらに、必要に応じて、プログラム高速化のための最適化が行われます。
最後にコード生成が行われます。すなわち、アセンブリ言語や機械語レベルへの変換が行われます。