我想使用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