问题标签 [pegjs]
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.
pegjs - 为什么 PEGjs / 无法正常工作?
我在 PEGjs 中有一个简单的解析器
我试着匹配
但不是得到“str”,而是在解析“float”时出错
javascript - PEGJS:为谓词优先语法生成 AST
我回到探索 pegjs 并且显然还没有掌握核心概念。我正在尝试解析以谓词开头的“查询语言”,然后是操作数列表(可能包括另一个谓词)。所以一个简单的例子是:
我希望将上述内容转换为:
这个查询:
会变成这个 AST:
我的语法很接近,但有几个问题。这是当前的 PEGJS 语法。它可以直接粘贴到在线 pegjs 解析器 ( http://pegjs.majda.cz/online )。
上面的语法处理了我给出的两个例子,但我注意到了两个问题,这导致我提出以下三个问题。
1.语法在这个看似简单的输入上失败(关键是嵌套的 OR 紧跟在父 OR 之后,“字符串”在末尾):
我不确定是什么导致了这个或如何解决它。
2.语法目前有这条愚蠢的operand
规则行:
请注意 . 之前第三行的前导空格 (ws) or_predicate
。如果没有那个空格,我会收到错误“超出最大调用堆栈大小”。我认为这与左递归有关,但对此并不积极。理想情况下,我希望那里没有必需的“ws”,因此没有这样的空格的查询可以工作:
现在你必须人为地添加一些额外的空格,如下所示:
3.我完全错误地接近这个语法吗?这只是我尝试的第二个,第一个是基于 pegjs 算术示例,所以我意识到我可能完全错误,这可能就是我遇到这些问题的原因。
感谢您的协助和时间!
最好的祝福,
埃德
peg - 解析常量和标识符
我想匹配一个常量,它基本上是一个全大写的字符串。
另外,我想匹配一个标识符,它可以包含小写和大写字母的混合。
问题是,当我尝试匹配时Asd
,它说:Line 1, column 2: Expected [A-Z_0-9] or end of input but "s" found.
它似乎符合常量规则,但即使失败也不会交换到标识符之一......
问题似乎是常量也是一个有效的标识符,但我无法找出打破歧义的规则,我认为如果常量匹配失败,它应该只尝试标识符规则......
angularjs - AngularJS webapp 中的 Peg.js
我有一个 AngularJS 网络应用程序。
我想在我的应用程序中使用 peg.js。我刚刚写了一个 peg.js 语法: CriteriaValue.pegjs 并使用命令行生成了解析器:
pegjs CriteriaValue.pegjs
,它生成了 CriteriaValue.js。
有人可以向我解释如何使用解析器吗?
var result = parser.parse('我的字符串'); 不起作用。
我创建了一个 plunker: http ://plnkr.co/edit/Ae05SeZAjKOQ75B3lvLc?p=preview
javascript - PEGJS : 嵌套 pegjs 语法
我想解析输入
2 or 2 or 2
或2 and 2 and 2
但2 or 2 and 2
无效。简而言之,我不想在输入中and
和or
一起出现。有没有办法用 peg 做到这一点,而不涉及 javascript 和存储以前看到的变量(我已经有一个解决方案)?
parsing - 如何解决 PEG 中的左递归
问题是,PEG(解析表达式语法)不允许左递归规则。我已经阅读了有关该主题的可用答案,但问题具体(例如这个)或非常简单(例如x = symbol:(x '.')
)。
我创建了以下非常简单的语法来说明问题
可以使用PEG.js 解析器生成器测试此语法。
能“流利”使用正式语言的人描述如何将这条规则/规则集重写为 PEG?还是有一种通用的方法/算法可以解决左递归?
编辑:我刚刚找到这个 Wikipedia 页面,它描述了一种删除左递归的方法,我将对其进行研究并尝试将其应用于上面显示的语法。