问题标签 [peg]

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 投票
1 回答
436 浏览

parsing - 是否可以使用 Menhir 创建一个非常宽松的语法?

我正在尝试解析 Verilog 的一些点点滴滴——我主要对提取模块定义和实例感兴趣。

在verilog中,模块定义如下:

并且模块以两种不同的可能方式之一实例化:

此时我只对查找已定义或实例化模块的名称感兴趣;'foo' 在上述两种情况下。

鉴于此 menhir 语法 (verParser.mly):

当我在 menhir 解释器中尝试这个时,它可以很好地提取模块实例:

它适用于单个模块实例化:

但是,当然,如果有一个 IDENT 出现在其中任何一个之前,它将 REJECT:

...当然,在这些defs之前的实际verilog文件中会有标识符。

我试图不必完全指定 Verilog 语法,而是希望慢慢地、增量地构建语法,以最终解析越来越多的语言。

如果我将 IDENT 添加到垃圾规则中,则可以解决上述问题,但是模块实例化规则不起作用,因为现在垃圾规则正在捕获 IDENT。

是否可以创建一个非常宽松的规则来绕过我不想匹配的内容,或者通常要求您必须创建一个完整的语法才能实际执行此类操作?

是否可以创建一个让我匹配的规则:

其中“stuff*”最初匹配除 RPAREN 之外的所有内容?

就像是 :

我过去使用过允许这样的构造的 PEG 解析器。

0 投票
1 回答
1151 浏览

parsing - 如何用 peg 语法解析这个?

我正在尝试使用pegjs制作解析器。我需要解析类似的东西:

我无法编写从 to 捕获文本的"START"规则"END"

0 投票
1 回答
162 浏览

ruby - 匹配Treetop中的复数词

有没有办法使用 Treetop 以编程方式匹配复数单词。Linguistics gem 会将一个单词复数,但是如何将它插入到解析器中。

这是我正在尝试做的一个例子:

0 投票
1 回答
3043 浏览

javascript - PEG.js 输入结束问题

我正在尝试为 PEG.js 编写一个简单的语法,它可以匹配如下内容:

所以基本上这些是一些用分号分隔的文本。我的简化语法如下所示:

问题是,如果我在输入中输入分号以外的任何内容,我会得到:

如何解决这个问题?我读过 PEG.js 无法匹配输入的结尾。

0 投票
1 回答
123 浏览

ruby - 树顶回溯类似于正则表达式?

我读过的所有内容都表明 Treetop 会像正则表达式一样回溯,但我很难做到这一点。

假设我有以下语法:

这与字符串不匹配{abc}。我怀疑那是因为从这封信开始.+就消耗了一切。aabc}当我只希望它消费时它正在消费abc

这似乎与类似的正则表达式不同。正则表达式/{.+}/将匹配{abc}。据我了解,这是可能的,因为正则表达式引擎在将关闭}作为 的一部分使用后回溯.+,然后无法匹配。

那么 Treetop 可以这样回溯吗?如果是这样,怎么做?

我知道您可以使用否定来匹配“除 a 之外的任何内容}”。但这不是我的本意。假设我希望能够匹配字符串{ab}c}。在这种情况下,我想要的标记是开头{、中间字符串ab}c和结尾}。这是一个人为的示例,但在使用嵌套表达式(如{a b {c d}}.

0 投票
1 回答
210 浏览

parsing - 是否存在从 LL(*) 到 PEG 的明确且合理的转换?

我正在研究 PEG(解析表达式语法)解析器,我正在研究的主题之一是与其他解析技术的等效性。

我在From Regular Expressions to Parsing Expression Grammars找到了一篇关于将正则表达式转换为等效 PEG 的好论文。

我希望为LL(*)解析器找到类似的处理方法,但仍然空手而归。在我看来,1中描述的许多技术也将适用于LL(*)转换问题,但是我对形式主义的了解还不够,无法对自己的分析充满信心。

非常感谢您的集体帮助!

0 投票
2 回答
536 浏览

javascript - 如何将一个简单的语法转换为在 PEG.js 中有效的东西(预期为“a”但找到了“a”)

我刚开始玩 PEG.js 并且遇到了语法问题(大大简化了调试):

我正在使用https://pegjs.org/online

此语法无法解析bdd

这是 PEG 无法做到的事情,还是我可以将我的语法转换成可以解析它的东西?

PS如果我尝试解析(错误地建议?)bda我得到无意义的错误:

0 投票
1 回答
739 浏览

javascript - 生成的解析器为 Node.js 上的转义引号引发错误

我正在使用PEG.js创建一个包含解析字符串的解析器。
包含任何类型字符的字符串都用引号括起来",并且可能包含转义引号\"
到目前为止,我有以下规则:

它适用于PEG.js 在线版本"abc\"def"为给定的输入生成"abc\"def"

为带有 PEG.js 版本 0.7.0 的 Node.js 版本 0.6.21 生成的解析器按以下方式执行

并产生以下错误:

但是,使用\\"而不是\"成功并获得预期的输出。

这个问题有解释或解决方法吗?特别是,我不可能对解析器的预期输入中的所有引号进行双重转义。

0 投票
3 回答
2731 浏览

parsing - 消除此 PEG.js 语法的左递归

(注意:我读过其他类似的问题但我无法弄清楚)。

我写了这个语法:

有了这个输入

它返回

而且我要

我认为这个左递归规则可以给我类似的东西,但是 PEG.js 不支持左递归。

在这种情况下如何消除左递归?

PS:您可以在在线 PEG.js 演示中进行测试

0 投票
2 回答
964 浏览

python - pyPEG2:'f(x)' 的 PEG 语法有什么问题?

这个语法问题还有另一个问题:

我正在玩 Volker Birk 的pyPEG2,但我遇到了一个非常微不足道的案例:

我得到的异常看起来像:

Traceback(最近一次调用最后):文件“test.py”,第 5 行,打印解析(文本,语法)文件“/home/yy/dev/python/len/len/lang/pypeg2/ init .py”,第 539 行,在解析 t 中,r = parser.parse(text, thing) 文件“/home/yy/dev/python/len/len/lang/pypeg2/ init .py”,第 644 行,在解析 t 中,r = self._parse(t, thing, pos) 文件“/home/yy/dev/python/len/len/lang/pypeg2/ init .py”,第 814 行,在 _parse t2 中,r = self._parse(t, e , pos) 文件“/home/yy/dev/python/len/len/lang/pypeg2/ init .py”,第 962 行,在 _parse 中引发 GrammarTypeError("in grammar:" + repr(thing)) pypeg2.GrammarTypeError:在语法中:'('

parse()在解析应该是 Symbol() 的左圆括号时失败。当然,我遗漏了一些明显的东西,但是什么?