问题标签 [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.
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-"
,但后者对于大范围的编写效率低下且繁琐。
如果没有其他可用的,我将自己重新实现该功能。
haskell - 如何使用 Parsec 进行正确的大小写折叠
有没有办法进行正确的大小写折叠Parsec
(比如我想要一个行为类似于stringCI
from的解析器Data.Attoparsec.Text
)。Text.Parsec.Token
只使用不区分大小写解析的代码char (toLower c) <|> char (toUpper c)
,但没有正确的大小写折叠。所以我很困惑这是否可能。
parsing - Parsec 解析和分离不同的结构
假设我有不同的解析器。我想定义一个函数where .p1, ..., pk
pk :: Parser ([t1], ..., [tk])
pi :: Parser ti
这将解析与 p 1 ...p k中的任何一个匹配的字符串集合(一个接一个),并将它们分隔在相应的列表中。为简单起见,假设没有一个字符串与两个解析器匹配。
我设法做到了,但我真的很难找到一种优雅的方式(最好使用许多或任何其他内置解析器解析器)。
parsing - 使用 Parsec 解析正则表达式
我正在尝试通过实现一个小型正则表达式解析器来学习 Parsec。在 BNF 中,我的语法类似于:
我试图在 Haskell 中实现这一点:
但是这里有一些无限循环(例如 expr -> star -> expr 而不消耗任何令牌),这使得解析器永远循环。不过,我不确定如何修复它,因为它的本质star
是它最终会消耗其强制性令牌。
有什么想法吗?
parsing - FParsec 中的示例语法超越了示例?
我正在寻找一些用 FParsec 编写的示例语法,这些语法将超出项目存储库中的示例。
我发现了这个非常好的GLSL 语法,但这是我找到的唯一示例。我需要的是一种类似于 C 或 JavaScript 的语言的语法。
haskell - 如何从此 Parsec 错误中删除“预期字母或数字”?
我在 Parsec 中使用未完成的类似 Haskell 语言的解析器。
尽管我对错误消息不满意,但它似乎工作正常。
- 输入:
"foo (bar"
- 错误:
expecting letter or digit, operand or ")"
我怎样才能让它只打印expecting operand or ")"
?我已尝试添加<?>
但无法使其正常工作。
这是我的代码:
haskell - 使用 Parsec 解析配置
在这里,我想到一个可能的配置是一棵规范树,每个规范都有一个对应的关键字(字符串)和类型。像这样的东西:
鉴于没有“类型类型”,我不确定如何正确编写它,但暂时不要介意。
现在,给定这样一棵树,我想构建一个可以读取可能的有效配置的解析器;我假设我已经有了可以解析关键字/类型对的子解析器。
例如,一个可能的配置树是:
它可以指定矩形的大小。一个可能的配置文件是:
(假设配置文件只是换行符分隔对的列表,keyword = blah,其中 blah 是该关键字的相应解析器可以处理的内容;但它们可以按任何顺序排列,只需匹配一个树的可能“有效子集”,其中有效子集是包含顶部节点的任何子集,它包含它包含的“和”节点的所有子节点,并且准确地说是它包含的“或”节点的一个子节点。)
我什至不知道如何开始构建这样的解析器。任何人都可以提供一些关于如何进行的提示,或者一种将上述 ConfigTree 数据类型完全重构为更易于解析的方法吗?
haskell - 在单个输入上选择多个正确的解析器
我想知道解析多个解析器可以成功的输入的最佳方法。我已经概述了我的第一次失败的尝试和一个不优雅的解决方案,我希望它可以变得更加地道。
例如,我想将以下句子中的“the”、“quick”和“fox”应用到它们自己的数据构造函数中:
所以给定以下类型构造函数:
我希望解析的输出是:
以下是两种解决方案:
第一次尝试“test1”不会产生所需的输出,因为“选择”返回第一个成功的解析器,而我真正想要的是第一个成功的解析器,同时消耗最少的字符。这就是我接下来要尝试的方法,方法是保留已解析输入的源位置并使用具有最低源位置的解析器。
这种情况似乎很常见,我觉得我错过了一些明显的组合符咒语。谁能提供更好的建议?
谢谢!
-deech
parsing - 在 Haskell 中解析一个特定的字符串
我正在使用 parsec Haskell 库。
我想解析以下类型的字符串:
等等
我很感兴趣只收集值 v1 和 v2,并将它们存储在数据结构中。
我尝试使用以下代码:
这样,如果输入是"[[v1]][[v2]]"
程序工作正常,返回以下输出:
如果输入是"xyz[[v1]][[v2]]"
程序不起作用。特别是,我只想要 中包含的内容[[...]]
,而忽略"xyz"
.
另外,我想将 的内容存储[[...]]
在数据结构中。
你怎么解决这个问题?