我想使用Megaparsec解析Haskell中类似于此的文本。使用Megaparsec解析块注释使用开始和结束符号
# 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
我想了解这个错误的原因以及如何修复它。
问题是你的解析器有一个共同的前缀。看看['try'](https://hackage.haskell.org/package/megaparsec-5.1.1/docs/Text-Megaparsec.html#v:try)。 – Alec