问题标签 [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.

0 投票
6 回答
1459 浏览

compiler-construction - Is Scalas/Haskells parser combinators sufficient?

I'm wondering if Scalas/Haskells parser combinators are sufficient for parsing a programming language. More specifically the language MiniJava. I'm currently reading compiller construction and jflex and java cup is quite painful to work with so I'm wondering if I could/should use parser combinators instead. The MiniJava syntax is very small. MiniJavas BNF: http://www.cambridge.org/us/features/052182060X/grammar.html

0 投票
1 回答
2898 浏览

parsing - EBNF 到 Scala 解析器组合器

我有以下要解析的 EBNF:

这就是我得到的:

但我想知道是否有更好的方法,最好不必求助于强制转换(asInstanceOf)。

0 投票
1 回答
5348 浏览

scala - Scala Parser 令牌分隔符问题

我正在尝试为以下命令定义语法。

第二个命令应标记为:

当我在下面定义的语法上运行此输入时,我收到以下错误消息:

据我所见,它失败了,因为匹配消息单词的模式与属性键:值对的键模式几乎相同,因此解析器无法判断消息在哪里结束以及属性从哪里开始。我可以通过坚持为每个属性使用开始令牌来解决这个问题,如下所示:

但我更愿意让命令尽可能接近自然语言。我有两个问题:

错误消息的实际含义是什么?我将如何修改现有语法以适用于给定的输入字符串?

0 投票
4 回答
3824 浏览

scala - 访问 Scala Parser 正则表达式匹配数据

我想知道是否有可能从下面的语法中匹配正则表达式生成 MatchData。

当然,一种选择是在块内再次执行匹配,但是由于 RegexParser 已经执行了匹配,我希望它将 MatchData 传递给块,还是存储它?

0 投票
1 回答
453 浏览

parsing - “|”的返回类型 在 Scala 的解析器组合器中

我正在阅读 Bernie Pope 关于“Scala 中的解析器组合器”的幻灯片。他引用了“替代”组合器的方法签名类型|

并问,“家庭作业:为什么不 | 有这种类型呢?”

0 投票
2 回答
4905 浏览

scala - 如何创建行尾很重要的解析器组合器?

我正在创建一个 DSL,并使用 Scala 的解析器组合库来解析 DSL。DSL 遵循简单的类似 Ruby 的语法。源文件可以包含一系列如下所示的块:

行尾在 DSL 中很重要,因为它们被有效地用作语句终止符。

我写了一个 Scala 解析器,看起来像这样:

由于行尾很重要,因此我进行了覆盖whiteSpace,以便它只会将空格和制表符视为空格(而不是将新行视为空格,从而忽略它们)。

这有效,除了commandBlock. 由于我的源文件包含一个尾随的新行,解析器抱怨它只期望一个end但在end关键字之后有一个新行。

所以我将commandBlock' 的定义更改为:

(也就是说,我在“end”之后添加了一个可选的新行)。

但是现在,在解析源文件时,出现以下错误:

认为这是因为,在它吸收了尾随的新行之后,解析器遇到了一个它认为无效的空字符串,但我不确定它为什么这样做。

有关如何解决此问题的任何提示?我可能会从 Scala 的解析器组合库中扩展错误的解析器,因此也欢迎任何关于如何创建具有重要换行符的语言定义的建议。

0 投票
3 回答
1332 浏览

scala - 解析器组合器未终止 - 如何记录发生了什么?

我正在尝试使用解析器组合器,并且经常遇到看似无限递归的情况。这是我遇到的第一个:

如何打印正在发生的事情?为什么这还没有完成?

0 投票
2 回答
4753 浏览

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

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

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

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

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

0 投票
2 回答
2499 浏览

scala - 出了什么问题:“值解析器不是包 scala.util.parsing.combinator 的成员”?

我收到了上述奇怪的错误消息,我不明白“值解析器不是包 scala.util.parsing.combinator 的成员”。

我正在尝试通过逐步编写 C 解析器来学习 Parser 组合器。我从令牌开始,所以我有课程:

这就像我能做到的一样简单。

下面的代码可以正常工作,但是如果我取消注释注释行,我会收到上面给出的错误消息:

如果我的设置有问题,我通过 scala-plugin for intellij 使用 scala 2.7.6。任何人都可以对此有所了解吗?消息错误,Parsers是 的成员scala.util.parsing.combinator

- - 跟进

这个人http://www.scala-lang.org/node/5475似乎也有同样的问题,但我不明白他给出的答案。谁能解释一下?

0 投票
1 回答
623 浏览

scala - scala StdLexical中的词法换行符?

我正在尝试 lex(然后解析)类似 C 的语言。在 C 中,有一些预处理器指令,其中换行符很重要,然后是实际代码,它们只是空格。

这样做的一种方法是像早期的 C 编译器一样执行两遍过程 - 为 # 指令设置一个单独的预处理器,然后对它的输出进行 lex。

但是,我想知道是否可以在单个词法分析器中完成。我对编写 scala 解析器组合器代码感到非常满意,但我不太确定如何StdLexical处理空格。

有人可以编写一些简单的示例代码,说可以#include使用一行(使用换行符)和一些琐碎的代码(忽略换行符)吗?或者这是不可能的,最好采用 2-pass 方法?