问题标签 [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.
parsing - 是否可以使用 Menhir 创建一个非常宽松的语法?
我正在尝试解析 Verilog 的一些点点滴滴——我主要对提取模块定义和实例感兴趣。
在verilog中,模块定义如下:
并且模块以两种不同的可能方式之一实例化:
此时我只对查找已定义或实例化模块的名称感兴趣;'foo' 在上述两种情况下。
鉴于此 menhir 语法 (verParser.mly):
当我在 menhir 解释器中尝试这个时,它可以很好地提取模块实例:
它适用于单个模块实例化:
但是,当然,如果有一个 IDENT 出现在其中任何一个之前,它将 REJECT:
...当然,在这些defs之前的实际verilog文件中会有标识符。
我试图不必完全指定 Verilog 语法,而是希望慢慢地、增量地构建语法,以最终解析越来越多的语言。
如果我将 IDENT 添加到垃圾规则中,则可以解决上述问题,但是模块实例化规则不起作用,因为现在垃圾规则正在捕获 IDENT。
是否可以创建一个非常宽松的规则来绕过我不想匹配的内容,或者通常要求您必须创建一个完整的语法才能实际执行此类操作?
是否可以创建一个让我匹配的规则:
其中“stuff*”最初匹配除 RPAREN 之外的所有内容?
就像是 :
我过去使用过允许这样的构造的 PEG 解析器。
parsing - 如何用 peg 语法解析这个?
我正在尝试使用pegjs制作解析器。我需要解析类似的东西:
我无法编写从 to 捕获文本的"START"
规则"END"
。
ruby - 匹配Treetop中的复数词
有没有办法使用 Treetop 以编程方式匹配复数单词。Linguistics gem 会将一个单词复数,但是如何将它插入到解析器中。
这是我正在尝试做的一个例子:
javascript - PEG.js 输入结束问题
我正在尝试为 PEG.js 编写一个简单的语法,它可以匹配如下内容:
所以基本上这些是一些用分号分隔的文本。我的简化语法如下所示:
问题是,如果我在输入中输入分号以外的任何内容,我会得到:
如何解决这个问题?我读过 PEG.js 无法匹配输入的结尾。
ruby - 树顶回溯类似于正则表达式?
我读过的所有内容都表明 Treetop 会像正则表达式一样回溯,但我很难做到这一点。
假设我有以下语法:
这与字符串不匹配{abc}
。我怀疑那是因为从这封信开始.+
就消耗了一切。a
即abc}
当我只希望它消费时它正在消费abc
。
这似乎与类似的正则表达式不同。正则表达式/{.+}/
将匹配{abc}
。据我了解,这是可能的,因为正则表达式引擎在将关闭}
作为 的一部分使用后回溯.+
,然后无法匹配。
那么 Treetop 可以这样回溯吗?如果是这样,怎么做?
我知道您可以使用否定来匹配“除 a 之外的任何内容}
”。但这不是我的本意。假设我希望能够匹配字符串{ab}c}
。在这种情况下,我想要的标记是开头{
、中间字符串ab}c
和结尾}
。这是一个人为的示例,但在使用嵌套表达式(如{a b {c d}}
.
parsing - 是否存在从 LL(*) 到 PEG 的明确且合理的转换?
我正在研究 PEG(解析表达式语法)解析器,我正在研究的主题之一是与其他解析技术的等效性。
我在From Regular Expressions to Parsing Expression Grammars找到了一篇关于将正则表达式转换为等效 PEG 的好论文。
我希望为LL(*)
解析器找到类似的处理方法,但仍然空手而归。在我看来,1中描述的许多技术也将适用于LL(*)
转换问题,但是我对形式主义的了解还不够,无法对自己的分析充满信心。
非常感谢您的集体帮助!
javascript - 如何将一个简单的语法转换为在 PEG.js 中有效的东西(预期为“a”但找到了“a”)
我刚开始玩 PEG.js 并且遇到了语法问题(大大简化了调试):
此语法无法解析bdd
。
这是 PEG 无法做到的事情,还是我可以将我的语法转换成可以解析它的东西?
PS如果我尝试解析(错误地建议?)bda
我得到无意义的错误:
javascript - 生成的解析器为 Node.js 上的转义引号引发错误
我正在使用PEG.js创建一个包含解析字符串的解析器。
包含任何类型字符的字符串都用引号括起来"
,并且可能包含转义引号\"
。
到目前为止,我有以下规则:
它适用于PEG.js 在线版本并"abc\"def"
为给定的输入生成"abc\"def"
。
为带有 PEG.js 版本 0.7.0 的 Node.js 版本 0.6.21 生成的解析器按以下方式执行
并产生以下错误:
但是,使用\\"
而不是\"
成功并获得预期的输出。
这个问题有解释或解决方法吗?特别是,我不可能对解析器的预期输入中的所有引号进行双重转义。
parsing - 消除此 PEG.js 语法的左递归
(注意:我读过其他类似的问题,但我无法弄清楚)。
我写了这个语法:
有了这个输入
它返回
而且我要
我认为这个左递归规则可以给我类似的东西,但是 PEG.js 不支持左递归。
在这种情况下如何消除左递归?
PS:您可以在在线 PEG.js 演示中进行测试
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() 的左圆括号时失败。当然,我遗漏了一些明显的东西,但是什么?