-1

「新しい」言語用のコンパイラを設計したい。新しい言語は独自の構文を持ち、有効な C コードを出力する。つまり、疑似コードから AC コードを生成する。抽象構文ツリー。たとえば、if 構造のツリーを取得しました。これを元の C コードにマップするにはどうすればよいですか? 順序通りのトラバーサルなどを実行できますか?

Aho Ullman の本を読んだことがあります。インタープリターの実行とコンパイルの違いは何ですか? 訪問者パターンを適用できますか?

4

1 に答える 1

2

マシンコードにマップするのと同じ方法ですが、代わりに C を出力します。これにより、いくつかのことは簡単になり (独自のシンボル テーブルを作成するのではなく、C コンパイラのシンボル テーブルを利用できます)、いくつかのことは難しくなります (C が受け入れる方法で物事を表現する必要があるため)。

ほとんどの場合、抽象構文ツリーを具体的な意味ツリーに変換する必要があることに注意してください。

インタープリターは、実際に実行されているセマンティック ツリーの部分に対してのみ実行され、繰り返し実行される可能性があります。また、インタプリタのメモリ モデルでデータを操作しています。コンパイラはセマンティック ツリー全体を 1 回実行し、実行可能なすべてのコードを生成する必要があります。一般に、完全なメモリ モデルも生成する必要がありますが、C を出力すると、部分的にごまかすことができます。

ドラゴンブックには、これらの質問に対するより詳細な回答があります. 基本的に、C を「高水準アセンブラー」として扱います。

于 2014-03-07T05:08:08.380 に答える