4

最近、Haskell で正規表現インタープリターを作成しようとしています。私がしたことは、可能なすべてのコンストラクター (シーケンス、、、間隔など) を使用して新しいデータ型を作成し*^マッチャー関数を定義することでした。それは驚異的に機能しますが、私の問題は、入力(たとえば、文字列"a(b*)(c|d)ef")をデータ型("Seq (Sym a) (Seq (Rep Sym b) (Seq (Or Sym c Sym d) Sym ef))")に変換する必要があることです。問題のこの部分に問題があります (新しいデータ型、解析ツリーを作成しようとしましたが、完全に失敗しました)。どうすれば解決できるかについてのアイデアはありますか?

4

2 に答える 2

8

標準的なアプローチは、 Parsecなどのパーサーコンビネーターライブラリを使用することです。パーサーコンビネーターライブラリ(パーサージェネレーターなど)を使用すると、文法の説明を記述して、その言語の文字列からトークンにパーサーを生成できます。

文法をParsec関数としてエンコードするだけです。

例として、この前のSOの質問を参照してください:Parsecを使用して正規表現を解析する

于 2012-04-18T12:54:08.850 に答える
4

これは、正規表現の実装に関する興味深い記事 (遊び) です。

正規表現の遊び

于 2012-04-18T12:57:39.160 に答える