我正在转换一些使用 Parsec 的功能性 Haskell 代码,而不是使用 Attoparsec,以期获得更好的性能。我进行了更改,一切都编译了,但我的解析器无法正常工作。
我正在解析一个包含各种记录类型的文件,每行一个。我用于解析记录或注释的每个单独的函数都可以正常工作,但是当我尝试编写一个函数来编译一系列记录时,解析器总是返回部分结果,因为它需要更多的输入。
这是我尝试过的两个主要变体。两者都有同样的问题。
items :: Parser [Item]
items = sepBy (comment <|> recordType1 <|> recordType2) endOfLine
对于第二个,我更改了记录/注释解析器以使用行尾字符。
items :: Parser [Item]
items = manyTill (comment <|> recordType1 <|> recordType2) endOfInput
我的方法有什么问题吗?还有其他方法可以实现我的尝试吗?