是否有可能以某种方式获得某些自定义类型的解析错误?例如,从错误中获取有关解析上下文的更多信息会很酷.以文本消息的形式出现错误信息似乎不太方便.
正如Rhymoid观察到的那样,遗憾的是,这是不可能的.
Parsec与你自己Either的monad 相结合也无济于事 - 它会过早退出(ParsecT过度Either)或太晚(EitherT过度ParsecT).
如果你想要它,你可以这样做:使用ParsecT结束State (SourcePos, YourErrorType).(您不能使用Parsec的用户状态,因为错误将被回溯.)
每次你想发出一个结构化的误差值,它与当前位置的状态记录,但只有在当前位置是远低于已经记录之一.(如果位置相同,您可能想要以某种方式合并错误.也许保留它们的列表.)
最后,当你运行monad堆栈时,你将获得最终状态,ParseError并且包含一个SourcePos.只需检查两个位置是否重合.如果它们没有(即Parsec SourcePos更远),那么您没有此错误的错误值.
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |