8

私のユースケースでは、生成された解析ツリーでビジターを使用して、数千の小さく独立した式をツリー表現に解析する必要があります。現在、解析操作ごとに新しいストリーム、レクサー、パーサーインスタンスが作成されています。

これは最適ではないかもしれないと思います。ANTLR4のウォームアッププロパティを利用するために、このようなセットアップでどのオブジェクトインスタンスを再利用できますか?スレッドセーフはどうですか?これらのインスタンスのどれがスレッドローカルである必要がありますか?レクサーまたはパーサーインスタンスを再利用するには、何らかのリセットが必要ですか?

4

1 に答える 1

11

ANTLR 4の初期(最初のリリースの数か月前)では、アダプティブDFAキャッシュはインスタンスごとに作成されていたため、Lexer.setInputStreamまたはの使用はParser.setInputStream良好なパフォーマンスを達成するために不可欠でした。

これはもはや当てはまりません。バックグラウンドキャッシュはすべてのパーサーインスタンス間で共有され、スレッドセーフになりました。LexerおよびクラスのメソッドはParserスレッドセーフではないため、複数のスレッドで解析する場合は、レクサーとパーサーの複数のインスタンスを作成する必要があります。

于 2013-03-06T02:40:28.330 に答える