问题标签 [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.
parsing - 在没有左手递归的情况下解析布尔表达式
我正在尝试匹配这个
- f(some_thing)是一个函数调用,它是一个表达式
- ==是一个布尔运算符
- 'something else'是一个字符串,也是一个表达式
所以布尔表达式应该是
问题是如果没有左递归,我无法弄清楚如何做到这一点这些是我的规则
使用语法符号,我有
因为我的语法是 EOE 我不知道如何使用左手算法
其中 e 为空,b 为终端
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
被解析为字符串,这可能吗?
这是我的整个语法文件:
parsing - PegJS:如何匹配周围文本中的短语
我正在尝试用 PegJS 做一个解析器
我正在尝试解析这样的东西..
I would like to email john@gmail.com today or tomorrow.
您将如何制作与某些短语匹配的解析器,例如email john@gmail.com
并丢弃周围的字符和空格(如果它们存在)。
我一直遇到的问题是匹配器消耗了整行、短语和所有内容——在更详细的匹配器有机会之前。
另外,有人可以崩溃negative look aheads
吗?(机制和语法)
似乎它们是答案,但我很难找到关于它们的信息。
谢谢你,
吉欧。
javascript - 我怎样才能解析像coffeescript中的对象定义
假设我们在 cofeescript 中有这个
编译为
所以假设我有这个 PEG.js 语法
如果您想在在线 PEG 解析器上对其进行测试,并且该two
变量在同一范围内定义了 2 次,而不是在第一个one
变量下定义,那么该语法只做了一半。如何检查 2 行左侧是否有相同的空间,以便将它们添加到相同的范围内?
peg - 为什么这个 peg 语法不能识别 42?
使用语法
withpeg.js
识别 4 但不是 42 在这种情况下错误
“第 1 行,第 2 列:预期输入结束,但找到了“2”。”
被报道。显然,解析器完成了start -> b
消耗“4”的规则,然后不知道如何处理“2”。a
但是,当它遇到错误时,为什么不使用其他规则再次尝试呢?
javascript - 为什么 pegjs 无法处理空格规则“”*
以下简单的 pegjs 语法可以正常工作:
它可在http://jsfiddle.net/4V3Zt/获得 。语法也可以粘贴到http://pegjs.majda.cz/online中。
如果我更改 ws 规则以允许空白任意空格:
解析失败并抛出最大调用堆栈异常。(如果使用 jsfiddle,您会在浏览器工具中看到异常。该异常也出现在 node.js 环境中,因此它肯定与 pegjs 有关)。
这个 ws 规则中的 * 有什么问题?
javascript - 如何在 PEG.js 中制作可选词
我正在尝试使用 PEG.js 构建一个简单的解析器。我希望用户能够输入一系列关键字,它们之间有一个可选的“AND”,但我似乎无法获得可选和工作。它总是期待它,即使我已经用 ? (零或一)。
将此语法粘贴到http://pegjs.majda.cz/online:
我的目标是将这些输入中的任何一个解析为 ["foo", "bar"] 的数组:
javascript - 使用 PEG.js 解析完整的数学表达式
我正在尝试扩展PEG.js的示例语法,以使用我的在线 BASIC 解释器实验的所有 4 个运算符解析数学表达式:
http://www.dantonag.it/basicjs/basicjs.html
但并非所有表达式都被正确解析。
这是我的 PEG 语法:
它可以正确解析像 2*3+1(给出 7)这样的表达式,但不能正确解析像 2-1-1 这样给出 2 而不是 0 的表达式。
你能帮我改进和调试吗?
提前致谢。
编辑:我在语法中添加了“数字”规则。是的,我的语法给出了一个类似于解析树的递归结构作为输出。
javascript - 返回键,具有动态键名的值对象
在 PEG.js 我有以下规则
如果它解析[hello] world
它会导致:
{"key": "world"}
.
我希望它返回
{"hello": "world"}
.
这可能吗?如何确保对象键接受动态值。