Parsing 避免使用解析器库中的失败解析器
据我所知,不建议使用,稍后将删除 在下面的例子中,什么应该正确使用而不是失败Parsing 避免使用解析器库中的失败解析器,parsing,haskell,parser-combinators,Parsing,Haskell,Parser Combinators,据我所知,不建议使用,稍后将删除 在下面的例子中,什么应该正确使用而不是失败 parserNaturalNoLeadZero::解析器整数 parserNaturalNoLeadZero=do 数字1和标题数字=='0' 然后失败“前导零” 否则返回$read数字 如文档所示,将引入一个新类来履行该角色 但是,对于像解析器这样的东西,明智的选择通常是,这已经存在了很久了。Parsec: 三位一体: 唯一的区别是它们产生的错误消息 对意外令牌使用unexpected意外的“令
parserNaturalNoLeadZero::解析器整数
parserNaturalNoLeadZero=do
数字1和标题数字=='0'
然后失败“前导零”
否则返回$read数字
如文档所示,将引入一个新类来履行该角色
但是,对于像解析器这样的东西,明智的选择通常是,这已经存在了很久了。Parsec:
- 对意外令牌使用
<代码>意外的“令牌”将导致错误消息,如unexpected
意外的:“令牌”
- 使用语法分析器表示的高级结构对语法分析器进行注释
这通常用于一组备选方案的结尾,我们希望以更高级别的结构返回错误消息,而不是返回所有可能的字符
parsexpr=。。。“表达” parseId=。。。“标识符” 帕西蒂=。。。“类型”
不会产生任何错误消息。回溯并让另一个分支成功或负责报告有意义的错误仍然是有用的empty
- 使用
对于其他类型的错误,库不能对其中包含的内容进行太多假设,因此它们可能会将其参数视为原始消息fail
parserNaturalNoLeadZero :: Parser Integer
parserNaturalNoLeadZero = do
digits <- some digit
if length digits > 1 && head digits == '0'
then fail "Leading Zeros"
else return $ read digits
parseExpr = ... <?> "expression"
parseId = ... <?> "identifier"
parseTy = ... <?> "type"