我正在使用Megaparsec处理一个小的解析器,并尝试解析算术。 -- Arithmetic expressions
data Aexp = N Num
| V Var
| Mult Aexp Aexp
| Add Aexp Aexp
| Sub Aexp Aexp
deriving (Show, Eq, Read)
我将使用megaparsec来解析大学项目的编程语言。不过,我搜索了一个报告多个错误的方法。 我知道与恢复,我看到this问题,但我没有找到有关错误发生在不同位置的情况。 例如在该Java代码: class A
{
public get() // line 3 column 10
{
return x // line 5 column 22
}
}
我想使用Megaparsec解析Haskell中类似于此的文本。 # START SKIP
def foo(a,b):
c = 2*a # Foo
return a + b
# END SKIP
,其中# START SKIP和# END SKIP标记文本解析的块的开始和结束。 与skipBlockComment相比,我想让解析器返回开始标记和结束标记之间的界限。 这是
使用百万秒差距5. 继this guide,我可以通过组合StateT和实现回溯用户状态(非定义的类型应该是显而易见/无关): type MyParser a = StateT UserState (ParsecT Dec T.Text Identity) a
如果我运行一个分析器p :: MyParser a,像这样: parsed = runParser (runStateT p init
我不明白什么呢的类型(例如)eol平均: eol :: (MonadParsec e s m, Token s ~ Char) => m String
,或者更好,我不明白如何使用EOL Text.Megaparsec.Text而不是Text.Megaparsec.String。 我一直在尝试使用学习如何使用Megaparsec遵循从真实世界Haskell Parsec(旧)教程(我实际上开始