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

v4 ツールで v3 文法を使用してレクサー クラスとパーサー クラスを生成しているようです。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

于 2013-03-06T21:05:44.317 に答える