パターン指向ソフトウェア アーキテクチャのパイプとフィルタ アーキテクチャ パターンについて読んでいます。ここでは、コンパイラの設計を知らなくても構いませんが、著者はコンパイラの設計で例を挙げました。私はそれのほとんどをフォローしましたが、フォローを理解するのが難しいです。
コンパイラー設計と同様に、スキャナー、パーサー、意味解析、中間コード生成、バックエンド (MIPS バックエンド、Intel バックエンドなど) などのさまざまなフェーズがあります。
ここで著者は、パーサー、意味解析、中間コード生成などのフロント エンド ステージについて言及しました。バックエンドはMIPSバックエンドです。
以下はテキストスニペットです
パーサーからセマンティック アナライザーに渡される抽象構文ツリーを明示的に構築しないことにします。代わりに、セマンティック アナライザー (sa) とコード ジェネレーター (cg) の呼び出しを yacc の文法規則に埋め込みます。
addexpr : team
| addexpr '+' term
{ sa.checkCompat($1,$3); cg.genAdd($1,$3);}
| addexpr '-' term
{ sa.checkCompat($1,$3); cg.genSub($1,$3);}
上記のテキストに関する私の質問 1.「抽象ツリーを明示的に構築しない」という著者の意味は何ですか? 2. 上記の文法規則を理解する必要があるだけですが、それは何をしているのでしょうか? 私は言語を設計していないので、パターンを理解する必要があります。上記の例をよく理解していれば、パターンを効果的にたどることができますか?
お時間をいただきありがとうございます。