我使用readP编写了一个简单的解析器。它可以工作,但我正在使用它作为一种验证解析器,因为输入是手动编写的,有时会偏离规范。为了纠正输入,我想知道我的解析器在哪一行失败,所以我的问题是:
如何获取调试消息,显示我的解析器输入失败的哪一行,如real world haskell中显示的那些(对于Parsec)?
(我对哈斯克尔来说相当新,顺便说一句。)
答案 0 :(得分:5)
ReadP
不提供错误报告功能。从ReadP
解析器的类型可以看出这一点:
newtype ReadP a = R (forall b . (a -> P b) -> P b)
data P a
= Get (Char -> P a)
| Look (String -> P a)
| Fail
| Result a (P a)
| Final [(a,String)] -- invariant: list is non-empty!
deriving Functor
您可以看到Fail
构造函数不存储任何信息。
您需要使用不同的解析器组合库(或构建您自己的)。