ANTLR的JAVA树解析器

时间:2018-01-16 01:33:15

标签: java tree abstract-syntax-tree antlr3

我想制作一个JAVA AST解析器,但我遇到了非常有用的answer

因此,根据我创建所有文件的说明,使用Java.g文件生成词法分析器和解析器没有错误,但在编译* .java文件时,我在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);
    }
}

用于编译:

javac -cp antlr-3.4-complete.jar *.java

,错误是:

Main.java:9: error: cannot find symbol
        CommonTree tree = (CommonTree)parser.javaSource().getTree();
                                            ^
  symbol:   method javaSource()
  location: variable parser of type JavaParser
1 error

我是初学者,我真的无法找到问题。提前谢谢。

1 个答案:

答案 0 :(得分:1)

CommonTree tree = (CommonTree)parser.javaSource().getTree();

这假设您使用的Java语法的起点是javaSource规则。

检查你的语法,看看是否确实如此。如果没有,请确定正确的启动规则并使用它。解析器的方法与语法中的规则命名相同。