问题标签 [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 回答
441 浏览

javascript - 如何在 PEG 语法中描述函数参数

我仍在与 Qt 的 qmake 模棱两可的语法作斗争。

现在我找不到一种方法来描述可以包含括号的函数参数(例如正则表达式):

我试图描述这样的函数调用:

如何在这种语法中添加对没有引号/双引号的嵌入式括号的支持?如何区分函数参数内的括号和函数关闭一个?

有效的函数调用示例:

0 投票
1 回答
57 浏览

javascript - 在 Pegjs 中递归查找和扩展变量

寻找使用 PegJS 之类的解决方案(对其他建议开放)以递归方式查找和扩展变量。

程序可以将变量设置为其他变量或数字

给定这样的结构:
{$a: '1', $b: '$a + 2', $c: '$b + 10'}

完成此任务的最佳方法(工具或其他方式)是什么?

0 投票
1 回答
534 浏览

javascript - PegJS - 匹配所有字符,包括 ) 除非 ) 是最后一个字符

我正在编写一个 PegJS 语法来解析 SQL 语句。我正在将一个函数拆分为function_id(function_args). 对于函数 args,我想匹配所有字符,包括(最后)一个除外),这对于嵌套函数是必需的。

如何编写规则以匹配所有字符,包括字符串中的最后一个字符)除外。)

语法如下

并且测试字符串是

0 投票
1 回答
30 浏览

javascript - PEGjs 可以将语句的“结束”字符作为输入吗?

我一直在研究 PEGjs 语法。大多数都有效,但我在最后一件事上遇到了麻烦。我的解析器接受如下所示的输入:First:[content];并返回类型(第一个或第二个)和内容中的每个元素(“c”、“o”...)。我还需要它能够]作为输入,因此它应该能够解析以下内容:First:[co]nt];.

有谁知道我该怎么做?这是我到目前为止所拥有的:

0 投票
1 回答
132 浏览

context-free-grammar - 如何为此编写语法(Peg.js 中的负前瞻)?

编辑:更多信息在Peg.js 引擎在像正则表达式一样前瞻之后后退吗?

所以我一直在学习一般的解释器,特别是我最近一直在使用 peg.js 从语法创建解析器。

这是我遇到的问题的示例。其中,以下包含三个“术语”('abc def'、'ghi'和'jkl')和两个“分隔符”('.'),我该如何编写语法:

这样做对我来说没有问题:

我用这个:

但是,这样做对我来说是一个大问题:

一旦术语本身和分隔符共享一个标记 - 空格 - 我就无法继续。例如,这不起作用:

问题是我尝试的任何事情似乎都要求词法分析器或指针,我不确定正确的术语,移动到完成术语之前的句点,所以它失败了,认为它已经通过了空格它正在寻找分隔符。

我基本上无法向前看,啊这个空格实际上是分隔符的第一个值,而不是表达式的最后一个值。

像“&”这样的先行类型运算符仅控制是否使用匹配项,但仍将指针移动到该位置。

事实上,我想在我的术语中使用我的两个分隔符,如下所示:

我怎样才能做到这一点?

0 投票
1 回答
351 浏览

regex - Peg.js 引擎是否像正则表达式一样在前瞻之后后退?

根据关于lookarounds的regular-expressions.info,引擎在前瞻后后退:

让我们再看一下内部,以确保您了解前瞻的含义。让我们应用 q(?=u)i 退出。前瞻现在是积极的,然后是另一个令牌。同样,q 匹配 q,u 匹配 u。同样,来自前瞻的匹配必须被丢弃,因此引擎从字符串中的 i 退回到 u。前瞻成功,因此引擎继续执行 i。但我无法匹配你。所以这个匹配尝试失败了。所有剩余的尝试也都失败了,因为字符串中没有更多的 q。

然而,在 Peg.js 中,它看起来像引擎仍然通过了&or!这样实际上它不是与正则表达式相同意义上的前瞻,而是对消费的决定,并且没有后退,因此没有真正的前瞻.

是这样吗?

(如果是这样,那么某些解析甚至不可能,比如这个?)

0 投票
1 回答
35 浏览

pegjs - Why pegjs not match Expression when __ not matched? Program = __/Expression

Example code:

In my mind , pegjs while match Expression when __ is not matched? But this get a error

Line 1, column 1: Expected [ \t\r\n] or end of input but "2" found. Expected behavior:

I want to know why it is not work. And I what to know is it possible to get all function callees in js use pegjs?

Actual behavior: A parse error: Line 1, column 1: Expected [ \t\r\n] or end of input but "2" found.

0 投票
1 回答
63 浏览

javascript - pegjs 正则表达式组内参数的深度标记

考虑以下语法:

它应该描述正整数列表。

问题是tail未定义,因为它在括号内。

所以我不得不做以下事情:

这在较长的语法中可能非常麻烦。

有没有办法标记(',' item)正则表达式组内的内容?

0 投票
1 回答
107 浏览

javascript - PegJS 数学解析

目前,我的语法支持基本的变量赋值,我将在这个例子中使用它,但是我在数学解析方面遇到了一些问题。尝试使用时它会正确返回:

例如,但它返回:

尝试使用时:

奇怪的是,尝试使用它似乎工作正常:

这是我的语法:

0 投票
2 回答
243 浏览

javascript - 如何为类似液体的模板语言编写简单的 peg 语法?

编辑:您可以在此处关注进度:https ://github.com/simple-updates/template

我正在使用peg.js并尝试编写一些可以解释模板的东西,例如:

我尝试了很多事情,但假设这是我的起点:

例如,当我尝试字符串时{{ test }},它只会将其解释为字符而不是插值。

知道我该怎么做吗?

(显然嵌套“标记”会更复杂)