我正在尝试使用 Antlr 4.0 版解析逻辑表达式并生成树来计算表达式。
我运行了antlr工具并生成了解析器和词法分析器,但是当我将生成的文件放入项目中时,我收到以下错误:“构造函数LogicLexer(ANTLRStringStream)未定义”和“构造函数CommonTokenStream(LogicLexer)未定义”。
代码如下:
LogicLexer lexer = new LogicLexer(new ANTLRStringStream(expression));
LogicParser parser = new LogicParser(new CommonTokenStream(lexer));
CommonTree tree = (CommonTree)parser.parse().getTree();
最佳答案
看起来您正在使用 v3 语法和 v4 工具来生成词法分析器和解析器类。 ANTLR 4 不像 v3 那样支持树重写运算符。
API 也发生了变化(ANTLRStringStream
不再存在),因此它应该如下所示:
LogicLexer lexer = new LogicLexer(new ANTLRInputStream(expression));
LogicParser parser = new LogicParser(new CommonTokenStream(lexer));
ParseTree tree = parser.parse();
有关如何遍历生成的解析树的完整演示,请参阅:ANTLR 4 tree inject/rewrite operator
关于java - Antlr 构造函数 Logic Lexer(ANTLR StringStream) 在 eclipse 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15257856/