1

我正在尝试使用 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();
4

1 回答 1

1

看起来您正在使用 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 injection/rewrite operator

于 2013-03-06T21:05:44.317 回答