问题标签 [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 投票
2 回答
212 浏览

haskell - 等价于 Parsec 中的 attoparsecs `inClass`

我正在将一些代码从 attoparsec 转换为 Parsec,因为解析器需要产生更好的错误消息。attoparsec 代码广泛使用inClass(and notInClass)。Parsec 是否有类似的功能可以让我inClass机械地翻译 -occurrences?Hayoo 和 Hoogle 没有就此事提供任何见解。

inClass "a-c'-)0-3-"等价于\ x -> elem x "abc'()0123-",但后者对于大范围的编写效率低下且繁琐。

如果没有其他可用的,我将自己重新实现该功能。

0 投票
2 回答
598 浏览

json - 修复错误的 JSON 语法

我刚刚开始学习解析,我在 Haskell 中编写了这个简单的解析器(使用 parsec)来读取 JSON 并为其构建一个简单的树。我正在使用RFC 4627中的语法。

但是,当我尝试解析 string 时{"x":1 },我得到了输出:

只有当我在右大括号 (]) 或 mustachio (}) 之前有空格时,才会出现这种情况。

我做错了什么?如果我在结束符号之前避免空格,它就可以完美地工作。

0 投票
1 回答
570 浏览

haskell - 如何使用 Parsec 进行正确的大小写折叠

有没有办法进行正确的大小写折叠Parsec(比如我想要一个行为类似于stringCIfrom的解析器Data.Attoparsec.Text)。Text.Parsec.Token只使用不区分大小写解析的代码char (toLower c) <|> char (toUpper c),但没有正确的大小写折叠。所以我很困惑这是否可能。

0 投票
3 回答
647 浏览

parsing - Parsec 解析和分离不同的结构

假设我有不同的解析器。我想定义一个函数where .p1, ..., pkpk :: Parser ([t1], ..., [tk])pi :: Parser ti

这将解析与 p 1 ...p k中的任何一个匹配的字符串集合(一个接一个),并将它们分隔在相应的列表中。为简单起见,假设没有一个字符串与两个解析器匹配。

我设法做到了,但我真的很难找到一种优雅的方式(最好使用许多或任何其他内置解析器解析器)。

0 投票
2 回答
2205 浏览

parsing - 使用 Parsec 解析正则表达式

我正在尝试通过实现一个小型正则表达式解析器来学习 Parsec。在 BNF 中,我的语法类似于:

我试图在 Haskell 中实现这一点:

但是这里有一些无限循环(例如 expr -> star -> expr 而不消耗任何令牌),这使得解析器永远循环。不过,我不确定如何修复它,因为它的本质star是它最终会消耗其强制性令牌。

有什么想法吗?

0 投票
2 回答
2293 浏览

parsing - FParsec 中的示例语法超越了示例?

我正在寻找一些用 FParsec 编写的示例语法,这些语法将超出项目存储库中的示例。

我发现了这个非常好的GLSL 语法,但这是我找到的唯一示例。我需要的是一种类似于 C 或 JavaScript 的语言的语法。

0 投票
1 回答
339 浏览

haskell - 如何从此 Parsec 错误中删除“预期字母或数字”?

我在 Parsec 中使用未完成的类似 Haskell 语言的解析器。

尽管我对错误消息不满意,但它似乎工作正常。

  • 输入:"foo (bar"
  • 错误:expecting letter or digit, operand or ")"

我怎样才能让它只打印expecting operand or ")"?我已尝试添加<?>但无法使其正常工作。


这是我的代码:

0 投票
1 回答
382 浏览

haskell - 使用 Parsec 解析配置

在这里,我想到一个可能的配置是一棵规范树,每个规范都有一个对应的关键字(字符串)和类型。像这样的东西:

鉴于没有“类型类型”,我不确定如何正确编写它,但暂时不要介意。

现在,给定这样一棵树,我想构建一个可以读取可能的有效配置的解析器;我假设我已经有了可以解析关键字/类型对的子解析器。

例如,一个可能的配置树是:

它可以指定矩形的大小。一个可能的配置文件是:

(假设配置文件只是换行符分隔对的列表,keyword = blah,其中 blah 是该关键字的相应解析器可以处理的内容;但它们可以按任何顺序排列,只需匹配一个树的可能“有效子集”,其中有效子集是包含顶部节点的任何子集,它包含它包含的“和”节点的所有子节点,并且准确地说是它包含的“或”节点的一个子节点。)

我什至不知道如何开始构建这样的解析器。任何人都可以提供一些关于如何进行的提示,或者一种将上述 ConfigTree 数据类型完全重构为更易于解析的方法吗?

0 投票
2 回答
231 浏览

haskell - 在单个输入上选择多个正确的解析器

我想知道解析多个解析器可以成功的输入的最佳方法。我已经概述了我的第一次失败的尝试和一个不优雅的解决方案,我希望它可以变得更加地道。

例如,我想将以下句子中的“the”、“quick”和“fox”应用到它们自己的数据构造函数中:

所以给定以下类型构造函数:

我希望解析的输出是:

以下是两种解决方案:

第一次尝试“test1”不会产生所需的输出,因为“选择”返回第一个成功的解析器,而我真正想要的是第一个成功的解析器,同时消耗最少的字符。这就是我接下来要尝试的方法,方法是保留已解析输入的源位置并使用具有最低源位置的解析器。

这种情况似乎很常见,我觉得我错过了一些明显的组合符咒语。谁能提供更好的建议?

谢谢!

-deech

0 投票
1 回答
545 浏览

parsing - 在 Haskell 中解析一个特定的字符串

我正在使用 parsec Haskell 库。

我想解析以下类型的字符串:

等等

我很感兴趣只收集值 v1 和 v2,并将它们存储在数据结构中。

我尝试使用以下代码:

这样,如果输入是"[[v1]][[v2]]"程序工作正常,返回以下输出:

如果输入是"xyz[[v1]][[v2]]"程序不起作用。特别是,我只想要 中包含的内容[[...]],而忽略"xyz".

另外,我想将 的内容存储[[...]]在数据结构中。

你怎么解决这个问题?