2017-10-27 10 views
1

コンパイラ関連のクラスのプログラミング割り当ての一部として、私は教師にフレックス・バイソンの代わりにANTLRを使用するように提案しました。ここで彼は私に欲しいもの、つまり字句解析、構文解析、意味解析(以下の画像の最初の3つのステップ) ANTLRを使ってそのようなアナライザを作るのはとても簡単だと確信しています。コンパイラの中間コードとオブジェクトコードの生成フェーズ(以下の画像の残りのフェーズ)、これは私を混乱させます。私はそのようなツールはユーザーにそのような世代の施設を与えなければならないと思っていましたが、著者が書いた参考書でさえもその方法を説明するものは何も見つかりませんでした。ANTLRを使用した中間およびオブジェクトコードの生成

enter image description here

は、ここでは誰もがそうする方法を私に説明したり、ちょうど私が私の先生を説得することができます書き込み材に私を指すことができます。

+0

これは非常に広い質問です。基本的に、ANTLRを主要なコンポーネントとしてコンパイラーを構築する方法を知りたいですか?非常に野心的です。私はANTLRを使ってZ80アセンブラを作成しましたが、それを使ってコンパイラを構築することはしません。 – TomServo

+0

@TomServo私はちょっと具体的になるように自分の質問を編集しました –

答えて

1

簡単な答えは、ANTLRがコンパイラの実装に適しており、少なくともこの目的のためのYACC/Bisonと同等の機能です。

ANTLRは、レクサー(字句解析)、構文解析(構文解析)、ツリーウォーカー(意味解析)のサポートをすべて、エラーリスナーと回復メカニズムの適切な形式で提供します。シンボルテーブルの例はgithub repoです。

通常、意味解析には複数のツリーウォークが使用されます。最終歩行を使用して、コードの中間表現(IR)を出力することができます。

LLVM projectが提供するIR言語、オプティマイザ、およびコードジェネレータを見て、残りの手順に関係するものを理解してください。

教授の書籍Language Implementation PatternsTDARが役立ちます。

+0

開発者はツリーを歩いているときに開発者が中間コードを生成しなければならないと言っていますが、これはパーサージェネレータツールではできません。 –

+0

はい、これはANTLR、YACC/Bison、およびその他すべての同様のパーサーに当てはまります。構文木(または他のもののAST)の意味解析は、シンボルテーブルと組み合わせて、開発者の責任です。 IRの実際のレンダリングについては、ANTLRのコンパニオンライブラリ[StringTemplate](http://www.stringtemplate.org/)を使用してください。 – GRosenberg

+0

中間コードとオブジェクトコードを生成するために 'StringTemplate'を使用するスタートガイドを教えてください –

関連する問題