gpt4 book ai didi

java - ANTLR v4、JavaLexer 和 JavaParser 返回 null 作为解析树

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:29:30 24 4
gpt4 key购买 nike

我正在使用 antlr v4 提取 java 程序的解析树用于其他目的。我从这个样本开始:ANTLR v4 visitor sample

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

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(); 中,树对象变为空。由于我是 antlr 的新手,有什么建议可以让我检查或解决吗?

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

TG.

最佳答案

假设您使用语法 here ,您希望解析 Java 文件的起点是

ParseTree tree = parser.compilationUnit();

(对于任何不使用该语法的人,您都需要您命名的顶级解析器规则。)

关于java - ANTLR v4、JavaLexer 和 JavaParser 返回 null 作为解析树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45635065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com