5

Scalaパーサーフレームワークを使用して、プッシュモードでパーサーに提供されたイベントのストリーム(つまり、write()呼び出しのシーケンス)を解析できますか?または、イテレータを使用して入力を「プル」する必要がありますか?私は主に、write()呼び出しのシーケンスが整形式の正当なシーケンスであることを検証するためにパーサーを使用することを検討していますが、ストリームに追加のトークンを挿入する場合もあります。

スレッドを使用してシーケンスをプルすることを期待するコンポーネントにトークンのシーケンスをプッシュできることは知っていますが、それは厄介な解決策です。

4

1 に答える 1

2

OK、答えは、Scala パーサーが「制御ループを所有する」必要があるということのようです。プッシュ モードで駆動することはできません。これは、再帰降下解析エンジンとして、状態を維持するためにプログラム スタックが必要なためです。独立したスレッドとして実行することにより、別のスタックで動作する可能性がありますが、もちろん、文法にバックトラッキングや先読みが必要かどうかを検討し、必要なバッファリングを実装する必要があります。

意図した目的のためには、単純なステート マシンを生成するツールを見つけることが、より良い方法のように思えます。

この結論に至ったコメントに感謝します。

于 2012-10-04T17:12:52.047 に答える