在Parsec中引发错误( ParseError )的首选方法是什么? 我得到了执行检查,如果检查失败,解析器内部的一些代码ParseError应(即返回Left ParseError运行时parse )。

#1楼 票数:5 已采纳

您可以使用Text.ParserCombinators.Parsec.Prim.unexpectedControl.Monad.fail 两者都采用表示错误消息的String参数,并返回(在本例中) GenParser tok st a类型的值。

有关更多信息,请参阅Text.ParserCombinators.Parsec.Error ,特别是Message 在那里你可以读取在哪种情况下使用哪个函数(尽管两者都表示解析错误,它们在语义上略有不同)。

  ask by finnsson translate from so

未解决问题?本站智能推荐:

1回复

Haskell中Parsec的“电池”

我是Haskell的新手,我一直在尝试使用Parsec作为练习来编写JSON解析器。 这大部分进展顺利,我能够用相对较少的代码解析列表和对象,这些代码也是可读的(太棒了!)。 但是,对于JSON,我还需要解析像这样的原语 整数(可能已签名) 浮动(可能使用科学记数法,如“3.4e
1回复

Haskell/Parsec:你如何使用Text.Parsec.Indent中的函数?

我有麻烦工作如何使用任何功能在Text.Parsec.Indent通过所提供的模块indents包Haskell中,这是一种附加的秒差距的。 所有这些功能都做了什么? 它们如何使用? 我能理解的简单的黑线鳕描述withBlock ,我发现了如何使用示例withBlock , runIn
2回复

在Haskell的Parsec中解析基于缩进的语法

我正在尝试使用Parsec在Haskell中解析基于缩进的语言(想想Python,Haskell本身,Boo,YAML)。 我已经看过IndentParser库,看起来它是完美的匹配,但我无法弄清楚如何将我的TokenParser变成缩进解析器。 这是我到目前为止的代码: 这会引发错误:
1回复

如何在Haskell中运行Parsec测试?

最近,我开始使用 Hackage 库学习解析器实现,尤其是 Parsec。 到目前为止,我有这段代码来测试整数加法作为简单计算器功能之一: 由于缺少 GHCI 启动此解析器的线索,我有点困惑(我的操作系统是 Windows 10)。 我想在命令提示符中输入什么只是为了进行一些测试?
1回复

Haskell解析查询(Parsec)

我正在尝试在Haskell中创建查询解析器,但不明白我应该如何允许解析器逻辑的不同可选路径。 我的尝试: 解析与第一个do stmt结构相对应的字符串时,该方法有效,例如: 但不适合其他人。 例如,解析时: 它不尝试其他路径,而是返回: 换句话说,似乎它只尝试第一种逻辑。
1回复

Haskell解析-与Alex的Parsec

如何使用Alex作为词法分析器,然后将令牌馈入Parsec进行解析? 有什么例子吗? 我认为Alex比Parsec更好(更容易?)用于词法分析,但是Parsec似乎比Happy更易于解析。 他们可能会很好地结合在一起。
1回复

在Haskell(Parsec)中链接两个解析器

Parsec 提供了一个运算符来在两个解析器之间进行选择: 是否有类似的功能来链接两个解析器? 我没有使用 Hoogle 找到具有相同签名的一个。 举个例子,假设我想解析任何单词,可选地后跟一个数字。 我的第一个想法是使用>>但它似乎不起作用。 我使用fmap pure将数字转换为实际
2回复

如何使用haskell中的parsec解析带有基本前缀的整数?

我正在尝试使用parsec解析haskell中的输入整数字符串。 字符串可以是十进制,八进制或十六进制。 对于十进制,八进制和十六进制, #o由#d , #o或#x的前缀指定,然后是整数。 如果没有指定前缀,则假定基数为10.这是我到目前为止所做的: 但是,这不是编译,而是因类型错误而