最近、Ply を使用して Python でパーサーを作成しました (これは yacc を Python で再実装したものです)。パーサーをほぼ使い終えたとき、構文解析する必要がある文法では、構文解析中にルックアップを行ってレクサーに通知する必要があることに気付きました。レクサーに通知するためにルックアップを行わないと、言語の文字列を正しく解析できません。
文法規則からレクサーの状態を制御できることを考えると、パーサーモジュールのルックアップテーブルを使用してユースケースを解決すると思いますが、保守/テストが難しくなりすぎる可能性があります。そこで、他のオプションについて知りたいと思います。
Haskell では、構文解析関数 (コンビネーターとして知られる) のライブラリーである Parsec を使用します。Parsec の Python 実装はありますか? それとも、Python でコンテキスト依存のパーサーを構築できるように、構文解析機能を備えた他の製品品質のライブラリでしょうか?
編集:コンテキストフリーの解析での私の試みはすべて失敗しました。このため、ANTLR がここで役立つとは思いません。