问题标签 [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 投票
2 回答
187 浏览

pegjs - 为什么 PEGjs / 无法正常工作?

我在 PEGjs 中有一个简单的解析器

我试着匹配

但不是得到“str”,而是在解析“float”时出错

0 投票
1 回答
1010 浏览

javascript - PEGJS:为谓词优先语法生成 AST

我回到探索 pegjs 并且显然还没有掌握核心概念。我正在尝试解析以谓词开头的“查询语言”,然后是操作数列表(可能包括另一个谓词)。所以一个简单的例子是:

我希望将上述内容转换为:

这个查询:

会变成这个 AST:

我的语法很接近,但有几个问题。这是当前的 PEGJS 语法。它可以直接粘贴到在线 pegjs 解析器 ( http://pegjs.majda.cz/online )。

上面的语法处理了我给出的两个例子,但我注意到了两个问题,这导致我提出以下三个问题。

1.语法在这个看似简单的输入上失败(关键是嵌套的 OR 紧跟在父 OR 之后,“字符串”在末尾):

我不确定是什么导致了这个或如何解决它。

2.语法目前有这条愚蠢的operand规则行:

请注意 . 之前第三行的前导空格 (ws) or_predicate。如果没有那个空格,我会收到错误“超出最大调用堆栈大小”。我认为这与左递归有关,但对此并不积极。理想情况下,我希望那里没有必需的“ws”,因此没有这样的空格的查询可以工作:

现在你必须人为地添加一些额外的空格,如下所示:

3.我完全错误地接近这个语法吗?这只是我尝试的第二个,第一个是基于 pegjs 算术示例,所以我意识到我可能完全错误,这可能就是我遇到这些问题的原因。

感谢您的协助和时间!

最好的祝福,

埃德

0 投票
1 回答
112 浏览

peg - 解析常量和标识符

我想匹配一个常量,它基本上是一个全大写的字符串。

另外,我想匹配一个标识符,它可以包含小写和大写字母的混合。

问题是,当我尝试匹配时Asd,它说:Line 1, column 2: Expected [A-Z_0-9] or end of input but "s" found.

它似乎符合常量规则,但即使失败也不会交换到标识符之一......

问题似乎是常量也是一个有效的标识符,但我无法找出打破歧义的规则,我认为如果常量匹配失败,它应该只尝试标识符规则......

0 投票
1 回答
550 浏览

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

0 投票
1 回答
303 浏览

javascript - PEGJS : 嵌套 pegjs 语法

我想解析输入

2 or 2 or 22 and 2 and 22 or 2 and 2无效。简而言之,我不想在输入中andor一起出现。有没有办法用 peg 做到这一点,而不涉及 javascript 和存储以前看到的变量(我已经有一个解决方案)?

0 投票
1 回答
914 浏览

parsing - 如何解决 PEG 中的左递归

问题是,PEG(解析表达式语法)不允许左递归规则。我已经阅读了有关该主题的可用答案,但问题具体(例如这个)或非常简单(例如x = symbol:(x '.'))。

我创建了以下非常简单的语法来说明问题

可以使用PEG.js 解析器生成器测试此语法。

能“流利”使用正式语言的人描述如何将这条规则/规则集重写为 PEG?还是有一种通用的方法/算法可以解决左递归?

编辑:我刚刚找到这个 Wikipedia 页面,它描述了一种删除左递归的方法,我将对其进行研究并尝试将其应用于上面显示的语法。

0 投票
2 回答
3470 浏览

javascript - 如何使用 PEG.js 的示例

我在玩PEG.js

我创建了一些接受 [LettersNumbers] 形式的输入的简单代码:

  • abc123
  • 你好98765
  • 等等

这是代码:

这里:在线版本可以测试代码并下载解析器,另外我下载了 peg.js本身。

不幸的是,文档非常稀少。我试过:

但是得到了这些错误:

未捕获的引用错误:未定义模块未
捕获的类型错误:PEG 不是函数

有人可以为我提供一个工作示例吗?我只需要将生成的 js 文件集成到网站中。

0 投票
2 回答
111 浏览

javascript - 在 PEG.js 中指定数量

我在玩PEG.js

我怎样才能允许输入正好 2 个字母?

这是我的方法:

我使用了{2}from 正则表达式,但不幸的是它不适用于 PEG.js。

0 投票
2 回答
31313 浏览

javascript - 加入不是函数

我在玩PEG.js

为什么我会出现错误:

a.join 不是函数

当我输入一个有效的字符串时abc

0 投票
2 回答
117 浏览

javascript - 将字母连接到 1 个单词

我在玩PEG.js

这是我的语法:

当我在浏览器中执行它时:

我得到这个输出:

即使我return a.join("")在语法中使用它,为什么它不只加入 1 个单词?