gpt4 book ai didi

java - antlr 访问者返回一个空的解析树

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:17 27 4
gpt4 key购买 nike

所以我试图打印在词法分析阶段正在访问的词位,这是执行此操作的方法的代码:

public void parse(String inputFile) {
InputStream is = System.in;
if (inputFile != null)
try {
is = new FileInputStream(inputFile);
ANTLRInputStream input = new ANTLRInputStream(is);
PARVALexer lexer = new PARVALexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
PARVAParser parser = new PARVAParser(tokens);

ParseTree tree = parser.prog(); // parse


PARVAnalyzer visitor = new PARVAnalyzer();

visitor.visit(tree);
} catch (Exception e) {

e.printStackTrace();
}

}

如果我打印 tokens ,我会得到输入文件中所有已识别词位的正确输出,但如果我打印 tree ,输出只是 [ ] ,因此方法 visit(tree) 没有执行任何操作...我可能做错了什么?

最佳答案

很可能您的解析器无法匹配输入中的任何内容。 ANTLR 解析器不会尝试处理整个输入,除非您的语法规则强制它们(例如,如果您的规则中有 EOF)。检查 stderr 中的解析器消息,或尝试通过 grun 运行您的输入以查看解析器看到的内容。请记住,如果您的语法规则允许空输入,那么它就是正确的结果,比如说您的开始规则是这样的

file : (record)*;

当没有记录可以匹配时,空解析树是语法上正确的结果。

关于java - antlr 访问者返回一个空的解析树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28682373/

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