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

javascript - PEGJs,语法创建嵌套数组

我有以下输入字符串:

想变成:

我如何在 pegjs 语法中做到这一点?

我当然可以编写一个 javascript 代码,但我正在寻找 PEGjs 的一些帮助。

0 投票
1 回答
540 浏览

javascript - 保存变量值以供将来在 peg.js 上使用

我正在使用 Peg.js 实现关系代数到 SQL 转换器。我实现了几乎所有的操作,但我没有实现赋值运算符,其中关系被转换为 SQL 并保存在变量中以供将来使用。(例如:A <- Π id(客户))。

由于原始代码有 200 多行,我将发布一个简单的示例来解释我认为捕获此规则的想法。

解析器代码:

输入示例:

在我的解析器开始时,我创建了一个数组来存储要保存的值,可以通过变量名访问该数组。

在我的第一条规则中,我声明每个标识符后跟赋值运算符(在我的示例中是等号),然后是要保存的值(在示例中是整数),然后是换行符和然后对于文本的其余部分,将在数组中保存,将标识符存储为键及其值,并处理查询的其余部分。

在第一条规则的最后一行,我声明任何只包含字母标识符的行都将被其存储的值替换。在示例中,解析器应返回值 23,这是分配给变量 A 的值。

但是解析器正在返回undefined。我检查了 Web 控制台,发现执行顺序不正确。

运行解析器后的控制台

有没有办法设置确切的执行顺序?我希望解析器在处理其余文本之前保存找到的值。

0 投票
1 回答
552 浏览

angular - Angular 2+ 应用程序中的 PEG.js

我已经使用 PEG.js 生成了一个解析器,并且我正在尝试在服务类中使用该解析器。我只是不知道如何将它导入我的打字稿类。

我只需要创建一个打字稿定义文件吗?我是打字稿的新手,一开始我并不擅长 javascript,所以我确信这是一个愚蠢的问题。

如果您需要任何其他信息,请告诉我。

0 投票
1 回答
345 浏览

javascript - How to export state variable from PEG.js parser

I'm starting to use excellent PEG.JS JavaScript parser generator
to implement Qt's qmake project file parser (*.pro).
It looks bash script, with variable assignments and function calls.
First of all, i need to parse all assignments to some kind of Dictionary, and use it in external code.

I can't undestand how to access internal parser state from the external function. I.e.: i need to parse my pro-file, and save state into client code-accessible variable, e.g. JavaScript Dictionary. But i can't achieve this!

Grammar (right now understood only assignment statement like TEMPLATE = app):

(The grammar above was successfully compiled in the qmake-project-parser.js) The parser usage code (frontend.js file):

And the output:

The question is: why undefined was outputed, however the REF 1 rule was successfully applied?
What am i doing wrong?

Thanks!

P.S. I'm new to JavaScript, so be patient to my silly mistakes please :)

0 投票
1 回答
608 浏览

javascript - 使用 PEG.js 匹配包含下划线的字符串文字

我正在继续学习 PEG.js,但停留在下一个问题上。

PEG.js 生成的解析器无法匹配包含下划线的字符串:

但在没有它们的情况下成功解析了字符串:

(这是一个内置变量CONFIG“附加赋值”语句,rvalue是一组有限字符串的列表)

我究竟做错了什么?


语法:

测试输入:

测试 PEG.js 输出:

0 投票
1 回答
156 浏览

javascript - 在 PEG.js 语法中使用 Node.JS 语句

在我的语法规则中,我需要检查目录是否存在。
但是,似乎我无法Node.JS在语法 JS 中使用 - 特定代码。
这是对的吗?任何解决方法?
谢谢和抱歉,如果一个问题是一个愚蠢的:)

示例语法:

PEG.js在线游乐场的输出:

0 投票
1 回答
909 浏览

javascript - 在 Peg.JS 中解析段落

我正在尝试学习 peg.js 并想解析简单的文本“块”,但正在努力解决如何对连续行进行分组而不会从我的语法中得到“可能的无限循环”错误。

目标:

解析后会变成:

换句话说:

  • 第一行是它自己的一段,因为它后面跟着一个空行
  • 第三行和第四行是一个段落,因为它们后面是一个空行
  • 第六行是一个段落,因为它是最后一行(一个或多个)

我可以编写一个匹配行和空行的语法(请参阅http://peg.arcanis.fr/4f4NdP/),但我所做的任何事情都是为了让多个连续行后跟一个空行(或 EOF)变成一个段落以递归错误结束。我觉得这是一个非常简单的 n00b 东西,我只是想念它,因为我以前没有使用过 PEG。

我知道我可以在初始化程序块中编写一个全局函数并跟踪最后一个元素并使其具有上下文关系,但我觉得这并没有像我应该使用的那样真正使用语法。

0 投票
1 回答
534 浏览

parsing - 如何使用 PEG 描述条件语句(if-then-else)

我正在研究 Qt 的 qmake 项目文件解析器(开源项目)。而且我在描述 qmake 的条件语句变体时遇到了麻烦,在文档中称为“范围”。

EBNF(简化):

第一个问题:如何区分 AND 运算符冒号和条件终结符?可能吗?

PS我的语法草案(没有函数调用支持)即使对于简单的情况也不起作用

PEG.JS代码:

谢谢!

0 投票
1 回答
311 浏览

javascript - 如何使用 Javascript 解析 .RC 文件

我正在尝试使用带有简单 fs.readFile 函数的 js 将数据从 .RC(资源定义文件)解析为 JSON,但是我收到了 SyntaxError: Invalid or unexpected token。目前我没有找到其他解决方案来解析这种类型的文件,请为我提供输入。以下是 .RC 示例。

我在节点中找到了一个名为“Jison”的包,它是一个用于在 JavaScript 中创建类似于“PegJS”的解析器的 API,但是如果它支持的话,我也无法弄清楚需要为我的文件类型编写的语法文件类型。解析后的结构可能类似于,

0 投票
1 回答
61 浏览

parsing - 我应该如何修改语法以允许可选表达式而不回溯

这是一个简单的语法:

它应该匹配以下内容:

但是,PEG.js 不允许回溯,fill只是消耗了<字符:

我应该如何修改语法以使其工作?