java - Antlr 构造函数 Logic Lexer(ANTLR StringStream) 在 eclipse 中未定义

标签 java antlr

我正在尝试使用 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/

相关文章:

java - 不稳定的使用会降低性能吗

java - 如何从ANTLR语法中收集 'returns'

java - 从Java中的数字列表中查找平均值

java - 如何使用Nebula NatTable的PreserveSelectionModel?

java - 对我的方法进行 JUnit 测试

java - 箭头运算符如何在 Java 8 内部工作?

java - 中间代码生成

java - ANTLR 语法中的歧义

ant - 我从哪里获得 Antlr Ant 任务?

cmake - 如何将 ANTLR 与 CMake 集成?