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
规则。
检查你的语法,看看是否确实如此。如果不是,请确定正确的起始规则并使用它。解析器的方法命名与语法中的规则相同。
我想制作一个 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
规则。
检查你的语法,看看是否确实如此。如果不是,请确定正确的起始规则并使用它。解析器的方法命名与语法中的规则相同。