5

ANTLR Webサイトでサンプルテンプレートを見つけました。そのJavatreeparser.gは、必要なASTを生成できるとサイトが言っていますが、ANTLRを初めて使用するので、どのように表示させるのですか?これまでに行ったことは、既存のJava文法と一緒に文法ファイルを配置することです。しかし、ファイルから必要なASTを使用して出力する方法がわかりません。どうすればいいのですか?

4

2 に答える 2

11

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環境で)

編集

最初に自分で試してもらいたかったので、すぐに投稿したくありませんでした(はい、つまり!);)

簡単なデモは次のとおりです。

  1. ディレクトリ内のをコピーし、そこからand宣言Java.gを削除します。@header{...}@lexer:::header{...}
  2. antlr-3.3.jar同じディレクトリにコピーします。
  3. ファイル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にコピーして貼り付け、次の画像を作成します。

ここに画像の説明を入力してください

于 2012-04-08T09:00:00.417 に答える
2

私は本当に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は次のように視覚的に表示されます。

ここに画像の説明を入力してください

于 2016-04-26T09:25:32.287 に答える