私は、厳密に形成された英語の非常に小さなサブセットを意味解析用のトークンにレックスできるようにする必要がある小さな Haskell プロジェクトに取り組んでいます。これは、コマンドを発行できるよりも多くの異なるエンド エフェクターを備えたシステムに対する非常に単純な自然言語インターフェイスです。私は現在これに Alex を使用していますが、Alex はレキシコンを静的にコンパイルすることに依存しています。システムの性質上、ワールド内のエンド エフェクタの数や種類は、コンパイル後に増減する可能性があるため、実行時にレキシコンから実行可能なトークンを追加または削除できる必要があります。
動的レクシング ソリューションを探してみましたが、最も近いものは、2000 年以降更新されていないように見えるこの動的レクサー エンジンでした。
レベルの低いアプローチ (Attoparsec など) を使用したり、Alex の再コンパイル フックを配線してレクサーをアプリケーションの残りの部分から分離したりするなど、いくつかの手法を検討しています。
この種の字句解析のよく知られた解決策はありますか? 最終的には、作業プログラマー向けの自然言語処理に取り組むつもりなので、単純化されていないアプローチを取ることができますが、現在は基本的にレクサーが必要です。