最近、Haskell で正規表現インタープリターを作成しようとしています。私がしたことは、可能なすべてのコンストラクター (シーケンス、、、間隔など) を使用して新しいデータ型を作成し*
、^
マッチャー関数を定義することでした。それは驚異的に機能しますが、私の問題は、入力(たとえば、文字列"a(b*)(c|d)ef"
)をデータ型("Seq (Sym a) (Seq (Rep Sym b) (Seq (Or Sym c Sym d) Sym ef))"
)に変換する必要があることです。問題のこの部分に問題があります (新しいデータ型、解析ツリーを作成しようとしましたが、完全に失敗しました)。どうすれば解決できるかについてのアイデアはありますか?
1092 次
2 に答える
8
標準的なアプローチは、 Parsecなどのパーサーコンビネーターライブラリを使用することです。パーサーコンビネーターライブラリ(パーサージェネレーターなど)を使用すると、文法の説明を記述して、その言語の文字列からトークンにパーサーを生成できます。
文法をParsec関数としてエンコードするだけです。
例として、この前のSOの質問を参照してください:Parsecを使用して正規表現を解析する
于 2012-04-18T12:54:08.850 に答える
4
これは、正規表現の実装に関する興味深い記事 (遊び) です。
于 2012-04-18T12:57:39.160 に答える