我想制作一个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
我是初学者,我真的无法找到问题。提前谢谢。
答案 0 :(得分:1)
CommonTree tree = (CommonTree)parser.javaSource().getTree();
这假设您使用的Java语法的起点是javaSource
规则。
检查你的语法,看看是否确实如此。如果没有,请确定正确的启动规则并使用它。解析器的方法与语法中的规则命名相同。