问题标签 [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.
javascript - 由于评估先前规则的错误,解析器无法匹配后续规则
例子:
如果输入是abc()
我收到错误:
但是,如果 start 定义如下,则不会出现问题:
对于较早的情况,名称规则不应该不匹配并因此进入调用规则吗?否则如何管理这样的事情?
有关工作示例,请参阅操场
parsing - 如何最好地解析 PEG 语法中的逗号分隔列表
我正在尝试解析逗号分隔的列表。为了简化,我只是使用数字。这些表达式将是有效的:
(1, 4, 3)
()
(4)
我可以想到两种方法来做到这一点,我想知道为什么失败的例子不起作用。我相信这是一个正确的 BNF,但我不能让它像 PEG 一样工作。谁能准确地解释为什么?我试图更好地理解 PEG 解析逻辑。
我在这里使用在线浏览器解析器生成器进行测试: https ://pegjs.org/online
这不起作用:
(实际上,它解析得很好,并且喜欢 () 或 (1) 但不识别 (1, 2)
但这确实有效:
这是为什么?(这里是语法新手)
peg - 使用 PEG.js 生成的解析器美化代码
我想为自定义程序语言创建一个格式化程序/linter,并且正在阅读它,但似乎我错过了一些东西。
正在看/玩,PEG.js
似乎它会完成工作。我写了一个小解析器,运行时 - 它正确返回语法树(AST
)
而现在的主要问题是:如何使用生成的解析器来创建(例如)一个///VSCode
等。将美化/格式化代码的扩展名?Atom
CodeMirror
一般来说,这是正确的方法吗?(使用解析器或需要为每个工具编写特定的解析器)
javascript - Pegjs 保留关键字
我有一个支持这个的语法:
AND,OR,NOT,(和),“,”
我需要能够解析的几个样本:
- a1 或 a2
- a1 a2(同上)
- a1 和 a2
- “a1”和“a2”
- a1 或 a2 不是 a3
- a1 a2 OR "a3" NOT(a1 AND a2 'a6')
考虑到 a1、a2 等是真实的用户输入,几乎可以包括以下任何内容:
- 123
- 特斯拉-S
- 折纸
我遇到的问题是,其中一个词没有引号,并且以一些保留关键字开头,例如:
- 折纸
- 仙女座
在这种情况下,此解析器考虑:
- 或关键字 + igami 文字
- 和关键字 + romede 文本
这就是我遇到的问题。
我已经尝试了两天的各种解决方案,在stackoverflow(和官方文档)上找到:
(和许多其他)试图找到具有这些约束的解决方案:
- 不能保证关键字前后有空格,例如“a1 AND(a2 OR a3)”有效(“AND”和“(”)之间没有空格,“(a1 AND a2)OR a3”= > 关键字之前/之后可以有空格和/或“(”/“)”(但是当我尝试这样做时,我打破了括号规则)
- 一个词只有在它是保留部分的一部分时才不是一个词:"AND"i / "OR"i / "NOT"i / "(" / ")" / "'" / '"' / " " =>其中任何一个都不是一个词,其他任何一个都是,就像 ando 是一个词,而不是一个关键字。
这是我想出的代码:
问题示例:你好折纸
给出当前语法:
应该给出(它认为折纸是一个完整的世界,而不是 or + igami):
当前解析器中的 Origami 被拆分为 OR + igami,而它应该考虑整个单词 origami...
javascript - PegJS 成员表达式解析
我目前正在制作一种编程语言,并使用 PegJS 进行解析。这是我的语法:
有谁知道为什么我的成员表达式解析会遇到这种奇怪的怪癖?
one.two.three()
工作得很好。
one().two.three
也可以正常工作。
one.two().three
也有效。
也是如此one[2].three.four()
。
但one = two[3]().four
不起作用。它说:
Line 1, column 15: Expected "*", "+", "-", "/", "/*", "DIV", "MOD", "^", "array", "break", "continue", "do", "false", "for", "function", "global", "if", "none", "return", "switch", "true", "while", comment, end of input, end of line, identifier, number, string, or whitespace but "." found.
有任何想法吗?它会以这种方式表现似乎有点奇怪。
javascript - 是否可以创建一个简单的解析器并创建一个 javascript 文件,然后使用该解析器调用该文件?
我正在尝试创建一个解析器,一个文件。我正在尝试使用创建的这个文件由解析器解析。步骤是:
添加 pegjs
使用var parserFile创建解析器
使用var makeFile创建文件
添加 contentFile、nameFile 和 var contentFile、nameFile并在此处:var makeFile
在var makeFile中使用解析器和var parserFile
未捕获的 SyntaxError:意外的标记 ')'
第 1 行,第 1 列:应为“。” 但找到了“2”。
pegjs - PEGJS 不会在解析器文件中生成“module.exports”
exportVar:...
我尝试使用下面的代码生成解析器文件,但是尽管我已包含在选项中,但最终结果文件 parser.js 不包含导出行。
我想在文件顶部手动添加它吗?
javascript - PEG js:如何在 peg js 语法规则表达式中匹配单引号内的字符串?
我正在编写一个 peg js 语法来将逻辑查询文字解析为 json 格式,但面临在条件值中选择多值词的问题。像(city = 'a' OR city = 'b')可以正常工作,但(city = 'a b' OR city = 'b')不起作用,因为它对于第一个条件具有多字值。我有一个正则表达式'((?:''|[^'])*)' 可以匹配单引号值中的字符串,但 PEG js 解析器无法解析它。
任何人都可以帮助我实现这一目标吗?下面是我的语法:在线编译器:https ://pegjs.org/online 输入:(city = 'a b' OR city = 'b')语法:
javascript - 如何使用 PEG.js 创建一个简单的解析器
我想解析的语法如下:
我正在学习如何使用 PEG,这是我迄今为止为当前语法开发的内容:
我遇到了一些无限循环的问题。当前代码产生此错误:
上述简单语法的正确实现是什么?
javascript - Peg.JS:简单的 if..then..else 实现
我正在尝试为简单的 if..then..else 语句和简单语句实现语法。
它应该能够解析如下语句:
该文档以一个决定(如果……那么……否则)开始,然后是一个简单的陈述。
到目前为止,我的语法如下所示:
这将返回一个输出:
1、and数组中为什么会有多余的空字符串和then
数组else
?我应该怎么做才能删除它们?
- 为什么我的语法在决定后没有阅读简单的陈述?我应该怎么做才能让它读取和解析整个文档?
编辑:我想我知道为什么我要得到这些数组。我更改了语法以删除里面的重复indented_statements
。