问题标签 [parser-combinators]
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.
regex - 在 Scala 中使用 JavaTokenParsers 时,简单的 stringLiteral 匹配失败
我刚刚开始研究外部 DSL,但是遇到了一个问题。我写了一个非常简单的测试,我使用 Scala 2.9.0-1 和 scalatest 1.6.1:
如果我运行它,它会在解析过程中失败并返回:
任何想法我做错了什么?我基本上遵循了 Dean Wampler 的书(http://ofps.oreilly.com/titles/9780596155957/DomainSpecificLanguages.html)。
parsing - Scala 解析器组合器和 Reader 无限循环
我对 Scala 解析器组合器有点困惑。我正在使用 Reader 的自定义实现来直接读取令牌列表:
令我困惑的是,atEnd
实际解析器似乎完全忽略了它,导致使用*
/时出现无限循环/无限递归rep
。
.net - FParsec 默认错误消息
假设我正在定义以下解析器:
解析时,会发生错误,正如人们所期望的那样:
我很好奇为什么它不能确定问题是他在期待一封信却找不到。我是否希望自己以某种方式将该信息添加到解析器中?
parsing - 如何编写一个解析器,根据谓词验证其输入,否则会失败
我想编写一个解析器,它产生一些数据结构并通过在其上运行谓词来验证其一致性。如果谓词返回false
,解析器应该返回一个自定义Error
对象(而不是 a Failure
,因为这可以通过 来实现^?
)。
我正在寻找可以实现这一目标的解析器上的一些运算符。例如,假设我想解析一个整数列表并检查它们是否不同。我想要这样的东西:
上面代码中的^!
就是我要找的。如何验证解析器输出并在未验证时返回有用的错误消息?
scala - 将组合解析器的列表/序列变成一个
我有一个值列表,我可以从中构造一个解析器列表,这些解析器通过映射依赖于这些值(参见示例)。然后我想要做的是通过连接将解析器列表变成一个解析器。
一种可能性是使用foldLeft
and ~
:
这有效率吗?
我不知道组合解析器是如何工作的;会有一个列表长度深度的调用堆栈吗?因此,我可能会在很长的连接中遇到 SO 错误吗?
更好的方法
有没有更易读的不同方式?
例子
假设您有一个包含两行的文件。第一行包含 n 个整数 x_1 到 x_n。第二行包含根据第一行属于组的 x_1 + x_2 + ... x_n 整数。我想从第一行获取整数序列并创建 n 个解析器 p_1 到 p_n,其中 p_i 解析 x_i 整数。
假设我有l = List(1,2,3)
第一行的整数列表。对于每个整数n
,我创建一个解析n
整数的解析器:parsers = l.map(repN(_,integer))
.
parsing - F# 中是否有任何已知的解析器组合库可以解析二进制(不是文本)文件?
我熟悉 fparsec 的一些基础知识,但它似乎面向文本文件或流。
是否有任何其他 F# 库可以有效地解析二进制文件?还是可以轻松修改 fparsec 以有效地处理二进制流?
java - Choosing a parsing technology for a large project
I have to deal with lots of different file formats. At least 50, maybe more than 100.
I've played around with Antlr in the past. However, I'm not sure that Antlr would be suitable for this project for a couple of reasons:
- it's difficult to combine and reuse grammars and/or pieces of grammars
- Antlr does code generation -- making a change to an existing parser requires going back to Antlr, making the change, regenerating the code, integrating the code back into the codebase, and running the unit-tests
- doing tree-building/-processing requires dealing with another language inside Antlr -- a potential problem for future developers
Basically, I like Antlr, but I think that it may be better suited for creating one or two parsers for complex languages, rather than 100 parsers for somewhat simpler languages/formats.
An alternative to Antlr-like parser generators is parser combinators. The advantages are the parsers are directly integrated into code, making reuse, testing, and further abstraction very easy. Also, future developers wouldn't have to learn how to use a new tool. The downside of parser combinators is that I don't know of any heavy-duty libraries for using them in Java.
So the questions are:
- Is Antlr suitable/intended for such a massive parsing project?
- What are other options for large-scale parsing in Java?
Note: some of the file formats are CSV or tab-delimited, some are somewhat more complex, some are as complex as Java. Semantics-wise, they can also be quite complicated (although not all are).
parsing - Scala combinator parser, what does >> mean?
I am little bit confusing about ">>" in scala. Daniel said in Scala parser combinators parsing xml? that it could be used to parameterize the parser base on result from previous parser. Could someone give me some example/hint ? I already read scaladoc but still not understand it.
thanks
parsing - RegexParsers 的自定义错误
可能有人帮助我理解以下行为:
parseAll (parseIf, "If bla blablaa")
应该导致is expected
. 相反,我总是得到string matching regex 'is\b' expected but 'b' found
. 我想这与空格有关,因为" If bla is blablaa"
(注意开头的空格)会导致相同的行为。我用 StandardTokenParsers 试了一下,一切正常。但不幸的是,STP 不支持正则表达式。后续问题:我将如何更改 RegexParsers 以便它使用字符串序列而不是字符序列?这将使错误报告变得更加容易。
scala - 模式匹配时如何摆脱“由于擦除而未检查”警告
斯卡拉 2.8.1
我已经使用解析器/组合器实现了一个非常简单的外部 DSL,用于 QA 编写验收测试。
最近我添加了像这样循环一组表达式的能力
warning: non variable type-argument ... is unchecked since it is eliminated by erasure
构建时,我在模式匹配时收到警告。我也尝试过使用以下内容进行提取。
exprs
有没有人有任何建议在没有这个警告的情况下以优雅的方式提取?它按原样运行。我应该忽略它吗?我不想养成无视警告的习惯。
编辑:回答。这实际上是我首先尝试的,但后来我添加了类型,因为 intelliJ scala 插件无法推断它们。