JAVA ANTLR 的树解析器

JAVA Tree parser for ANTLR

我想制作一个 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

我是初学者,实在找不到问题。提前致谢。

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

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

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