问题标签 [megaparsec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
55 浏览

haskell - 如何将 MegaParsec“ParseErrorBundle”转换为“SourcePos”列表和错误消息

使用MegaParsecparse函数,我可以运行一个解析器,ParseErrorBundle如果它失败了就得到一个。

我知道我可以漂亮地打印ParseErrorBundle,并获得整个解析失败的错误消息,其中包括行号和字符号,使用errorBundlePretty.

我也知道我可以从 a中获取's列表ParseErrorParseErrorBundle,使用bundleErrors. 而且我可以用parseErrorPretty或很好地打印这些parseErrorTextPretty

我希望能够运行一个解析器,如果它失败了,得到一个 列表(SourcePos, Text),这样我就可以知道各个错误消息以及每个错误的位置。我想不出一种优雅的方式来做到这一点。虽然理论上我可以相当多地从源代码errorBundlePretty.reachOffsetPosState

0 投票
1 回答
75 浏览

haskell - 使用 megaparsec + 解析器组合器的排列解析过于宽松

我正在尝试解析标志的排列。我想要的行为是“任何顺序的一个或多个标志,不重复”。我正在使用以下软件包:

  • 兆秒差距
  • 解析器组合器

我拥有的代码正在输出我想要的,但对输入过于宽松。我不明白为什么它接受多个相同的标志。我在这里做错了什么?

例子:

0 投票
1 回答
47 浏览

haskell - 如何用 megaparsec 解析多行?许多 。许多人遇到空间泄漏

我想将一些非常简单的文本解析 "abcxyzzzz\nhello\n"["abcxyzzz", "hello"] :: String.

不寻找更简单的函数来执行此操作(例如words),因为我需要解析更复杂的东西,而我只是在这里奠定基础。

不幸的是,上面的内容在输入时遇到了无限循环/空间泄漏,simple'因为它输出以下内容:

使用 megaparsec-7.0.5(不是最新的 9.xx)。

是否有更简单的方法来获得多行?

0 投票
1 回答
58 浏览

haskell - 在解析器中添加字符串文字支持

现在我正在做我的大学作业,其中一项任务是在我的虚拟编程语言(名为“Hi”)的 Haskell 解析器中添加字符串文字支持。

我用该代码解决了这个任务:

但我不明白如何使用between?我想让这个解析器的代码更短,比如:

0 投票
0 回答
91 浏览

parsing - 如何在 Haskell 中将十六进制字符串解析为 Char?

我正在使用 megaparsec 编写解析器,并希望将十六进制数解析为 Char。

十六进制数解析器应该正好采用两个字符并返回一个具有相同数值的字符。

现在我有这样的东西。

我听说使用read被认为是不好的做法。

是否有一个内置函数可以做类似的事情?

0 投票
1 回答
66 浏览

haskell - 准引号转义

我想使用 Quasiquotes 将我的新语言添加到 Haskell,但语言本身|]用作关键字。

有没有办法,如何:

a) Escape |],所以它被传递给我的语言

b)让我的语言的解析器决定,什么时候准引用结束

谢谢。

0 投票
1 回答
68 浏览

haskell - 获取当前上下文错误格式化函数

我正在使用 Megaparsec 来获取代码的树表示,然后由单独的函数对其进行评估。我想将具有当前上下文的 parsec 函数添加到树表示的节点中以格式化错误。

为什么?例如。语法可能没问题,但代码中的某些变量可能不存在,只有稍后处理树的分离函数才能发现。这些函数将不得不抛出错误,该变量不存在,我会很高兴,如果我可以为此使用 Megaparsec 格式良好的错误(带有行号,上下文,...)。

请问有什么办法吗?

谢谢。