问题标签 [parsec]

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 投票
6 回答
5612 浏览

python - Parsec 的 Python 实现?

我最近使用 Ply 在 Python 中编写了一个解析器(它是 yacc 的 Python 重新实现)。当我几乎用完解析器时,我发现我需要解析的语法需要我在解析过程中进行一些查找以通知词法分析器。如果不进行查找以通知词法分析器,我将无法正确解析该语言中的字符串。

鉴于我无法从语法规则中控制词法分析器的状态,我想我将使用解析器模块中的查找表来解决我的用例,但维护/测试可能变得太难了。所以我想知道其他一些选择。

在 Haskell 中,我会使用 Parsec,一个解析函数库(称为组合子)。是否有 Parsec 的 Python 实现?或者也许是其他一些具有解析功能的生产质量库,以便我可以在 Python 中构建上下文敏感的解析器?

编辑:我所有的上下文无关解析尝试都失败了。出于这个原因,我不希望 ANTLR 在这里有用。

0 投票
2 回答
6068 浏览

parsing - 一个好的ocaml解析器?

我正在寻找一个好的 ocaml 解析库,它不是 flex/bison 的衍生物。理想情况下,我想要一个类似于秒差距的单子组合库,但我找不到任何东西。

我会使用haskell,但是为haskell 进行llvm 绑定证明比我最初想象的更烦人。

干杯,

杜安

0 投票
3 回答
808 浏览

windows - Haskell Parsec 编译错误

我已经通过预构建的安装程序 v6.8.2 安装了 Haskell。

尝试使用 GHC 编译此示例文件时

我收到以下错误:

我已经通过 cabal 安装了 Parsec。

有没有人知道什么是错的?

0 投票
1 回答
2139 浏览

parsing - 在 Haskell/Parsec 中引发 ParseError

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

0 投票
1 回答
656 浏览

haskell - 在haskell中使用oneOf,编译时出错

我是 Haskell 的新手。我正在尝试编译我下载的这个 Haskell 文件,但它给了我一些错误。

不确定这是否足够,但这是有错误的代码部分:

0 投票
3 回答
2739 浏览

haskell - 使用 Haskell 的 Parsec 解析 ByteString

我已经设法使用 Parsec 来解析字符串,但无法对 ByteString 做同样的事情。

如何在不手动将它们转换为字符串的情况下使 Parsec 与 ByteStrings 一起使用?

我觉得这并不难实现。我错了吗?(我是 Haskell 的新手。^^)

谢谢!

0 投票
4 回答
1258 浏览

haskell - 使用 Parsec,我如何解析零个或多个 foo1 以 foo2 结尾并全部用点分隔?

我正在尝试做的事情似乎很简单,但由于我是一个 parsec Haskell 新手,所以解决方案让我望而却步。

我有两个解析器,假设在哪里可以解析中间词并foo1解析结尾词。术语用符号分隔,。foo2foo1foo2"."

我需要解析的句子是

  • foo2
  • foo1.foo2
  • foo1.foo1.foo2

等等。

我最初的想法是做

但这不会抓住foo2-only 的情况。

0 投票
3 回答
1001 浏览

haskell - Parsec:回溯不起作用

我正在尝试解析 F# 类型语法。我开始编写 [F] Parsec 语法并遇到问题,因此我将语法简化为:

在遇到 FParsec 问题后,我转而使用 Parsec,因为我有一整章专门解释它。我的这个语法的代码是

问题是 Parsec 默认不回溯,所以

我尝试的第一件事是重新排序 typeP:

但这只是堆栈溢出,因为语法是左递归的——typeP 永远不会尝试identP,因为它会arrowP一遍又一遍地尝试。接下来我在各个地方进行了尝试try,例如:

但是我所做的一切似乎都没有改变(1)堆栈溢出或(2)在标识符后面不识别“->”的基本行为。

对于任何成功编写 Parsec 语法的人来说,我的错误可能是显而易见的。有人可以指出吗?

0 投票
2 回答
4753 浏览

parsing - Scala 解析器组合器与 Haskell 的 Parsec 相比如何?

我读过 Haskell 解析器组合器(在 Parsec 中)可以解析上下文敏感的语法。Scala 解析器组合器也是如此吗?如果是这样,这就是“into”(又名“>>”)函数的用途吗?

Scala 的解析器组合器实现与 Haskell 相比有哪些优势/劣势?他们接受同一类语法吗?使用其中一个或另一个更容易生成错误消息或做其他有用的事情吗?

Packrat 解析(在 Scala 2.8 中引入)如何适应这张图片?

是否有网页或其他资源显示从一种语言的实现如何映射到另一种语言的不同运算符/功能/DSL 糖?

0 投票
4 回答
1472 浏览

haskell - Haskell parsec 解析一串项目

我有一个列表,我需要解析除最后一个元素之外的所有元素都需要由一个解析器解析,最后一个元素需要由另一个解析器解析。

原来我试过

问题是 parse1 可以使用 parse2 输入。所以 parse1 总是消耗整个列表,而 parse2 什么都没有。

有没有办法说将 parse1 应用于字符串中最后一个元素之外的所有内容,然后应用 parse2?