1

これらの Ruby 式のいずれかを使用するための Haskell Parsec パーサーを作成する方法を見つけようとしています。

   hello("test", 'test2') 
   my_variable
   hello(world("test"))
   (hello + " " + world)

パーサーがこれらの項目の先頭で解析を開始すると、文字列全体を返し、項目の最後で解析を停止する必要があります。これらの項目のいずれかの後にコンマが続く場合、そのコンマは消費されるべきではありません。

これらのタイプの式のパーサーを作成しようと何度か試みましたが、成功しませんでした。これらの式のサブコンポーネントを解析する必要はありません。完全な AST は必要ありません。これらの種類のチャンクを消費してキャプチャするだけです。

適切なヒューリスティックには、前の識別子に加えて、括弧のバランスを取り、外側のバランスのとれた括弧内のすべてのコンテンツを食べることが含まれる可能性があると思いました。しかし、この方法で動作するパーサーを作成するには、助けが必要です。

4

1 に答える 1

1

すべてを解析せずに解析しようとしても意味がありません。(a) 構造化された正しいパーサーを作成するか、(b) 入力を食べてカウントと追跡を行うが実際には解析しないものを作成します。(b) を parsec で行うのは難しいでしょう。重要な問題は正確さthis(example + "(with" + (weird ("bracketing)?")+"("))です。文字列を解析しない限り、どのように解析するのでしょうか? 弾丸を噛んで、string最初にパーサーを作成し、次にidentifierパーサー、次に相互再帰expression、パーサーを作成する必要がargumentListありfunctionます。AST を返す必要はありません。

于 2016-03-05T01:48:40.747 に答える