7

私は趣味として単純なコンパイラを構築する方法を学びたいと考えています。私はJava仮想マシンをターゲットにしています。抽象構文ツリーをバイトコードに変換

私はEclipseのANTLRプラグインを使用して簡単な文法を書いています。

誰かがAntlrによって生成されたASTのメソッドノードとして知られていることを教えてくれました。 ASMを使用してバイトコードを生成する予定です。 メソッドノードとはどのようなものですか?ASMから呼び出す方法と、メソッドの説明を参照する方法を教えてください。

また、コンパイラのセマンティックアナライザはどうですか。それは手動で書かれているのでしょうか、それとも発電機がありますか?

答えて

3

ここには多くの無関係な質問があります。あなたが定義した言語によっては、あなたの言語にメソッドノードがあるかもしれません。もしあなたの言語が無条件でmain(String[])メソッドにコンパイルされていれば、何もありません。

ASTをターゲット言語に変換する方法は複数あります。ほとんどの場合、コードを直接生成することはできませんが、ターゲットプラットフォーム用のASTを生成し、Treewalkerを使用して、かなりのプリンタでコードを生成させます。

意味解析は、コンパイラのプログラミングです。構文的レベルで入力を読み、理解することは解析です。セマンティック・アナライザーを自分で作成する必要があります。そうしないと、コンパイラーを作成していないことになります。 ;-)

Jasminを使用してアセンブリコードをコンパイルするとしますか?非常に良いスタートは、入力言語と目的言語(Jasmin)の文法を書いて、どの入力構造がどの出力をレンダリングするかということです。どのようにしてfor i := 1 to 10ループをジャスミンに書きますか?小さな問題に取り組み、必要に応じてコンパイラを拡張しますが、新しく実装されたトランスフォーメーションを早期に、徹底的にテストします。

非常に良い読み値:Let's Build a Compiler, by Jack Crenshaw

+1

最近、私は[stephen chin](http://steveonjava.com/)によってほぼ同じ答えが与えられました。Jack Crenshawのコンパイラを作ろうと思っています。 – Gautam

関連する問題