ANTLR Webサイトでサンプルテンプレートを見つけました。そのJavatreeparser.gは、必要なASTを生成できるとサイトが言っていますが、ANTLRを初めて使用するので、どのように表示させるのですか?これまでに行ったことは、既存のJava文法と一緒に文法ファイルを配置することです。しかし、ファイルから必要なASTを使用して出力する方法がわかりません。どうすればいいのですか?
2 に答える
ANTLR Webサイトでサンプルテンプレートを見つけました。そのJavatreeparser.gは、必要なASTを生成できるとサイトが言っています。
Java.g いいえ、 ANTLR wikiの結合された文法は、 Javaソースファイルのレクサーとパーサーを生成します。次に、パーサーはこのソースのASTを構築し、このASTを使用しJavaTreeParser.gてトラバースできます。ツリー文法JavaTreeParser.gは、ASTの作成には使用されません。これは、から作成されたパーサーによって実行されJava.gます。
これまでに行ったことは、既存のJava文法と一緒に文法ファイルを配置することです。
それは正しくありません。ツリー文法JavaTreeParser.gは、パーサーが生成した入力としてASTを想定していますJava.g。別のパーサー(または、さらに言えば、他のツリー文法)をプラグインすることはできません。
しかし、ファイルから必要なASTを使用して出力する方法がわかりません。どうすればいいのですか?
この以前のQ&Aを参照してください:ANTLRで作成されたASTの視覚化(.Net環境で)
編集
最初に自分で試してもらいたかったので、すぐに投稿したくありませんでした(はい、つまり!);)
簡単なデモは次のとおりです。
- ディレクトリ内のをコピーし、そこからand宣言
Java.gを削除します。@header{...}@lexer:::header{...} antlr-3.3.jar同じディレクトリにコピーします。- ファイル
Main.javaを作成しTest.java、このディレクトリに作成します(以下を参照)。
Test.java
public class Test {
int i = 1 + 2;
String s;
Test(String s) {
this.s = s;
}
}
Main.java
import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
import org.antlr.stringtemplate.*;
public class Main {
public static void main(String[] args) throws Exception {
JavaLexer lexer = new JavaLexer(new ANTLRFileStream("Test.java"));
JavaParser parser = new JavaParser(new CommonTokenStream(lexer));
CommonTree tree = (CommonTree)parser.javaSource().getTree();
DOTTreeGenerator gen = new DOTTreeGenerator();
StringTemplate st = gen.toDOT(tree);
System.out.println(st);
}
}
次に、レクサーとパーサーを生成します。
java -cp antlr-3.3.jar org.antlr.Tool Java.g
.java次に、すべてのソースファイルをコンパイルします。
javac -cp antlr-3.3.jar *.java
そして最後にMainクラスを実行し、出力を。という名前のファイルにパイプしますast.dot。
java -cp .:antlr-3.3.jar Main > ast.dot
(Windowsでは、次のようにしますjava -cp .;antlr-3.3.jar Main > ast.dot:)
ここでファイルを開くと、パーサーによって生成されたASTのDOTast.dot表現が表示されます。このASTを視覚化するには、DOTソースをhttp://graphviz-dev.appspot.comにコピーして貼り付け、次の画像を作成します。

私は本当にantlr4を使用することをお勧めします。
まず、CLASSPATH(antlr-4.5.3-complete.jarを含む)とJAVA_HOMEを設定します。
次に、文法Java.g4からレクサーとパーサーを生成します。
java -cp antlr-4.5.2-complete.jar Java.g4
第三に、生成されたすべてのJava*.javaをコンパイルします。
javac Java*.java
最後に、TestRigを実行します。
java org.antlr.v4.runtime.misc.TestRig Java compilationUnit -gui Test.java
ASTは次のように視覚的に表示されます。
