ANTLR v4,JavaLexer和JavaParser返回null作为分析树
我使用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:ProjectsJavaNetbeansASTProjJavaTreeExtractorprog.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();
树对象变为空。 由于我是antlr新手,有任何建议让我检查或解决方案?
(如果需要更多信息,只需通知我)。
TG。
假设你在这里使用语法,你需要解析一个Java文件的起点
ParseTree tree = parser.compilationUnit();
(对于任何不使用该语法的人,都需要您命名顶级解析器规则的任何内容。)
你不应该这样做:
ParseTree tree = parser.input();
在计算器例子中?
链接地址: http://www.djcxy.com/p/96957.html上一篇: ANTLR v4, JavaLexer and JavaParser returning null as parse tree
下一篇: Is it acceptable to use extension methods on a class which you can modify