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

0 投票
1 回答
1060 浏览

parsing - 在没有左手递归的情况下解析布尔表达式

我正在尝试匹配这个

  • f(some_thing)是一个函数调用,它是一个表达式
  • ==是一个布尔运算符
  • 'something else'是一个字符串,也是一个表达式

所以布尔表达式应该是

问题是如果没有左递归,我无法弄清楚如何做到这一点这些是我的规则

使用语法符号,我有

因为我的语法是 EOE 我不知道如何使用左手算法

其中 e 为空,b 为终端

0 投票
2 回答
489 浏览

node.js - PEGjs:如果浮点规则失败,则回退(回溯?)到字符串

我有一条atom规则,它首先尝试将所有内容解析为数字或带引号的字符串,如果失败,则将其视为字符串。

一切都很好解析,除了一个特殊的情况是这个非常具体的字符串:

DUD 123abc

无法解析Expected " ", "." or [0-9] but "a" found.错误。

我的期望:它应该成功解析并将字符串“123abc”作为字符串原子返回。您可以在下面的语法内容中看到我的几个不成功的尝试被注释掉了。

任何帮助/提示/指针/建议表示赞赏!


你可以在网上的 PEG.js 版本上试试语法。我正在使用节点 v0.8.23 和 pegjs 0.7.0

正确解析的数字:

  • `123
  • `0
  • `0。
  • `1。
  • `.23
  • `0.23
  • `1.23
  • `0.000
  • . <--- 作为字符串,不是数字,也不是错误

我想123abc被解析为字符串,这可能吗?


这是我的整个语法文件:

0 投票
1 回答
219 浏览

parsing - PegJS:如何匹配周围文本中的短语

我正在尝试用 PegJS 做一个解析器

我正在尝试解析这样的东西..

I would like to email john@gmail.com today or tomorrow.

您将如何制作与某些短语匹配的解析器,例如email john@gmail.com并丢弃周围的字符和空格(如果它们存在)。

我一直遇到的问题是匹配器消耗了整行、短语和所有内容——在更详细的匹配器有机会之前。

另外,有人可以崩溃negative look aheads吗?(机制和语法)
似乎它们是答案,但我很难找到关于它们的信息。

谢谢你,
吉欧。

0 投票
0 回答
248 浏览

javascript - 我怎样才能解析像coffeescript中的对象定义

假设我们在 cofeescript 中有这个

编译为

所以假设我有这个 PEG.js 语法

如果您想在在线 PEG 解析器上对其进行测试,并且该two变量在同一范围内定义了 2 次,而不是在第一个one变量下定义,那么该语法只做了一半。如何检查 2 行左侧是否有相同的空间,以便将它们添加到相同的范围内?

0 投票
1 回答
150 浏览

peg - 为什么这个 peg 语法不能识别 42?

使用语法

withpeg.js识别 4 但不是 42 在这种情况下错误

“第 1 行,第 2 列:预期输入结束,但找到了“2”。”

被报道。显然,解析器完成了start -> b消耗“4”的规则,然后不知道如何处理“2”。a但是,当它遇到错误时,为什么不使用其他规则再次尝试呢?

0 投票
1 回答
234 浏览

javascript - 为什么 pegjs 无法处理空格规则“”*

以下简单的 pegjs 语法可以正常工作:

它可在http://jsfiddle.net/4V3Zt/获得 。语法也可以粘贴到http://pegjs.majda.cz/online中。

如果我更改 ws 规则以允许空白任意空格:

解析失败并抛出最大调用堆栈异常。(如果使用 jsfiddle,您会在浏览器工具中看到异常。该异常也出现在 node.js 环境中,因此它肯定与 pegjs 有关)。

这个 ws 规则中的 * 有什么问题?

0 投票
1 回答
212 浏览

javascript - PEG.js 中的 Lambda 表达式

我对 lambda 表达式有PEG 语法问题,如果我使用语法,它们就可以工作:

这相当于

但这不起作用

这相当于:

是否可以使第二个功能与 PEG.js 一起使用?

0 投票
3 回答
1087 浏览

javascript - 如何在 PEG.js 中制作可选词

我正在尝试使用 PEG.js 构建一个简单的解析器。我希望用户能够输入一系列关键字,它们之间有一个可选的“AND”,但我似乎无法获得可选和工作。它总是期待它,即使我已经用 ? (零或一)。

将此语法粘贴到http://pegjs.majda.cz/online

我的目标是将这些输入中的任何一个解析为 ["foo", "bar"] 的数组:

0 投票
2 回答
3292 浏览

javascript - 使用 PEG.js 解析完整的数学表达式

我正在尝试扩展PEG.js的示例语法,以使用我的在线 BASIC 解释器实验的所有 4 个运算符解析数学表达式:

http://www.dantonag.it/basicjs/basicjs.html

但并非所有表达式都被正确解析。

这是我的 PEG 语法:

它可以正确解析像 2*3+1(给出 7)这样的表达式,但不能正确解析像 2-1-1 这样给出 2 而不是 0 的表达式。

你能帮我改进和调试吗?

提前致谢。

编辑:我在语法中添加了“数字”规则。是的,我的语法给出了一个类似于解析树的递归结构作为输出。

0 投票
1 回答
286 浏览

javascript - 返回键,具有动态键名的值对象

在 PEG.js 我有以下规则

如果它解析[hello] world它会导致:

{"key": "world"}.

我希望它返回

{"hello": "world"}.

这可能吗?如何确保对象键接受动态值。