问题标签 [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 - 是否有支持左递归的基于 PEG 的解析器生成器?
对于许多建立在递归下降解析基础上的解析器生成器来说,左递归似乎是一个大问题。我正在寻找一个支持它的基于 PEG 的解析器生成器 - 使用任何语言。
python - 空产品对 PEG 的作用是什么?
空生产规则
在 lex-yacc LR 自底向上解析器生成器(例如 PLY)中很有用。
在什么情况下应该在 PEG 解析器中使用 Empty 产生式,例如 pyparsing ?
javascript - CFG / PEG 用于代码完成?
我想知道是否可以直接使用 CFG 或 PEG 语法作为代码完成的基础而无需修改。我听说代码完成在 IDE 中有时会被操纵和按摩,甚至是硬编码,以使其性能更好。
我想在一个小型 DSL 上完成代码,所以我完全理解语法不能帮助具有库函数等知识的代码完成系统。
据我所知,解析器本身至少需要提供一个系统来查询它接下来的期望。
特别是我对使用peg.js 或jison的 javascript 代码完成解决方案感兴趣
ruby - 使用 PEG 问题制作 BBcode 解析器
我正在使用 PEG(Ruby 的柑橘实现)制作 bbcode 解析器,但我一直在解析这个[b]sometext[anothertext[/b]
有代码
问题在于text
我不知道怎么说的规则,该文本可以包含除 \r、\n、open_tag 或 close_tag 之外的所有内容。使用此实现,由于排除 [ 和 ],它在示例中失败(那是错误的)
所以最后的问题是如何做规则,它可以匹配除 \r、\n 或 open_tag 或 close_tag 的完全匹配之外的任何内容
如果您有另一个 PEG 实施的解决方案,也可以在那里提供。我可以切换:)
parsing - 使用 LPEG(Lua 解析器表达式语法),如 boost::spirit
所以我在玩lpeg来代替boost Spirit语法,我必须说boost::spirit比lpeg优雅自然得多。然而,由于当前 C++ 编译器技术的限制和 C++ 中的 TMP 问题,它是一个婊子。在这种情况下,类型机制是你的敌人而不是你的朋友。另一方面,Lpeg 虽然丑陋和基本导致更高的生产力。
无论如何,我离题了,我的 lpeg 语法的一部分如下所示:
此语法(虽然不完整)与以下内容匹配namespace foo {}
。我想实现以下语义(这是使用 boost spirit 时的常见用例)。
- 为命名空间规则创建一个局部变量。
namespace IDENTIFIER {
当已匹配时,将命名空间数据结构添加到此局部变量。- 将新创建的命名空间数据结构传递给
NAMESPACE_BODY
AST,以进一步构建 AST... 以此类推。
我确信这个用例是可以实现的。没有例子表明它。我对语言或库的了解不足以弄清楚如何去做。有人可以显示它的语法。
编辑:在尝试了几天与 lpeg 共舞并开始踩脚之后,我决定回归精神 :D 很明显 lpeg 是用 lua 函数编织的,而且这种编织是非常自由的-form(而精神有明确的非常有据可查的语义)。我只是还没有正确的 lua 心智模型。
ruby - 树梢中最简单的规则不起作用
我有一个只有两条规则的树顶语法:
我正在尝试解析简单的字符串(“A”和“5”)。如果我将该规则放在第一位,则“5”被识别为 Num,如果我将该规则放在第二位,则返回 nil。同样,如果我将该规则放在第一位,“A”将被识别为 ID,如果我将该规则放在第二位,则返回 nil。我无法理解这两个规则如何以任何方式重叠。这让我疯狂!
关于树梢或正则表达式,我有什么遗漏或不了解的吗?在此先感谢您的帮助。
treetop - Treetop(PEG)语法中使用的省略号(空字符串)是什么?
Treetop网站给出了以下我看不懂的解释
省略号 一个空字符串匹配任何位置并且不消耗任何输入。当您希望将单个符号视为序列的一部分时,它很有用,例如,当使用共享代码处理备用规则时。
规则 alts ( foo bar / baz '' ) { def value elements.map{|e| e.text_value } 结束 } 结束
何时将符号视为序列的一部分有用?任何人都可以提供一个有意义的例子吗?
parsing - LPeg 语法怪异
我的 Lua 应用程序的一部分是搜索栏,我试图让它理解布尔表达式。我正在使用 LPeg,但当前的语法给出了一个奇怪的结果:
它只解析第一个令牌,我无法弄清楚它为什么这样做。据我所知,由于!.
起始非终端的末尾,部分匹配是不可能的。我怎样才能解决这个问题?