4

Megaparsec を使用して、Haskell でこれに似たテキストを解析したいと考えています。

# START SKIP
def foo(a,b):
    c = 2*a # Foo 
    return a + b
# END SKIP

ここで、# START SKIP# END SKIPは、解析するテキスト ブロックの開始と終了を示します。

skipBlockCommentと比較して、パーサーが開始マーカーと終了マーカーの間の行を返すようにします。

これは私のパーサーです。

skip :: Parser String
skip = s >> manyTill anyChar e
  where s = string "# START SKIP"
        e = string "# END SKIP"

skipパーサーは意図したとおりに機能します。

たとえば、開始マーカーと終了マーカー内に可変量の空白を許可するために# START SKIP、次のことを試しました。

skip' :: Parser String
skip' = s >> manyTill anyChar e
  where s = symbol "#" >> symbol "START" >> symbol "SKIP"
        e = symbol "#" >> symbol "END" >> symbol "SKIP"

を使用skip'して上記のテキストを解析すると、次のエラーが発生します。

3:15:
unexpected 'F'
expecting "END", space, or tab

このエラーの原因と修正方法を知りたいです。

4

1 に答える 1