ANTLR v4,JavaLexer和JavaParser将null作为解析树返回

前端之家收集整理的这篇文章主要介绍了ANTLR v4,JavaLexer和JavaParser将null作为解析树返回前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用antlr v4来提取 java程序的解析树以用于其他目的.我从这个样本开始: ANTLR v4 visitor sample

我已经测试了给定链接上的步骤,以检查它是否有效以及一切正常:

  1. java Run
  2. a = 1+2
  3. b = a^2
  4. c = a+b*(a-1)
  5. a+b+c
  6. ^Z
  7. Result: 33.0

然后我编写了自己的解析java程序如下面的结构:

  1. |_Java.g4
  2. |_Java.tokens
  3. |_JavaBaseVisitor.java
  4. |_JavaLexer.java
  5. |_JavaLexer.tokens
  6. |_JavaParser.java
  7. |_JavaTreeExtractorVisitor.java
  8. |_JavaVisitor.java
  9. |_Run.java

Run.java如下:

  1. import org.antlr.v4.runtime.*;
  2. import org.antlr.v4.runtime.tree.*;
  3.  
  4. public class Run {
  5. public static void main(String[] args) throws Exception {
  6. CharStream input = CharStreams.fromFileName("F:\\Projects\\Java\\Netbeans\\ASTProj\\JavaTreeExtractor\\prog.java");
  7. JavaLexer lexer = new JavaLexer(input);
  8. CommonTokenStream tokens = new CommonTokenStream(lexer);
  9. JavaParser parser = new JavaParser(tokens);
  10. ParseTree tree = parser.getContext();
  11.  
  12. JavaTreeExtractorVisitor calcVisitor = new JavaTreeExtractorVisitor();
  13. String result = calcVisitor.visit(tree);
  14. System.out.println("Result: " + result);
  15. }
  16. }

但是在语句ParseTree tree = parser.getContext();树对象变为null.
因为我是antlr的新手,有什么建议让我检查或任何解决方案?

(如果需要更多信息,请通知我).

TG.

解决方法

假设您正在使用语法 here,那么您需要解析Java文件的起点
  1. ParseTree tree = parser.compilationUnit();

(对于没有使用该语法的任何人,您需要您命名为顶级解析器规则的任何内容.)

猜你在找的Java相关文章