我正在使用antlr v4提取Java程序的解析树以进行其他用途。我已经从这个示例开始:ANTLR v4访问者示例
我已经测试了给定链接上的步骤以检查其是否有效,并且一切都顺利进行。
java Run
a = 1+2
b = a^2
c = a+b*(a-1)
a+b+c
^Z
Result: 33.0
然后我自己编写了一个解析Java程序的结构如下:
|_Java.g4
|_Java.tokens
|_JavaBaseVisitor.java
|_JavaLexer.java
|_JavaLexer.tokens
|_JavaParser.java
|_JavaTreeExtractorVisitor.java
|_JavaVisitor.java
|_Run.java
以下是Run.java的代码:
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
public class Run {
public static void main(String[] args) throws Exception {
CharStream input = CharStreams.fromFileName("F:\\Projects\\Java\\Netbeans\\ASTProj\\JavaTreeExtractor\\prog.java");
JavaLexer lexer = new JavaLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
JavaParser parser = new JavaParser(tokens);
ParseTree tree = parser.getContext();
JavaTreeExtractorVisitor calcVisitor = new JavaTreeExtractorVisitor();
String result = calcVisitor.visit(tree);
System.out.println("Result: " + result);
}
}
但是在语句ParseTree tree = parser.getContext();
处,tree对象为null。
由于我对antlr不熟悉,您有什么建议可以帮助我检查或解决这个问题吗?
(如果需要更多信息,请告知我)。
TG.
ParseTree tree = parser.compilationUnit();
将是解析Java文件的起点。(假定使用Java语法此处) - Bill the Lizard