问题标签 [grako]

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 回答
584 浏览

parsing - 使用 PEG (Grako) 解析选项不足?

我的同事 PaulS 问了我以下问题:


我正在为现有语言(SystemVerilog - IEEE 标准)编写解析器,并且规范中有一个规则,其结构与此类似:

问题是在解析以下合法字符串时:

anIdentifier成功匹配data_type(通过其标识符选项),这意味着 Grako 正在寻找另一个标识符,然后失败。然后它不会尝试在没有 data_type 部分的情况下进行解析。

我可以重写规则如下,

但我想知道是否:

  1. 这是故意的
  2. 如果有更好的语法?

这是一个 PEG-in-general 问题,还是一个工具(Grako)?

0 投票
2 回答
734 浏览

python - grako 的规则优先级问题

我正在重做我最初在 Perl 上构建的迷你语言(请参阅github 上的 Chessa#),但是当我应用语义时遇到了许多问题。

这是语法

我遇到的问题是,d当运算符和任何后续字母数字字符串之间不存在空格时,运算符被拉入标识符规则。虽然语法本身是 LL(2),但我不明白问题出在哪里。

例如,4d6停止解析器,因为它被解释为4 d6,其中d6是标识符。应该发生的是它被解释为4 d 6,d是一个运算符。在 LL 解析器中,情况确实如此。

一种可能的解决方案是禁止d从标识符开始,但这将禁止诸如这样drop命名的函数。

0 投票
0 回答
125 浏览

python - 列表中的浮点数会因“无可用选项”错误而停止解析器

鉴于此语法

这个语义对象

no available options...当遇到包含非整数元素的列表(浮点数或列表;变量很好,不过)时,我的解析器会因错误而停止。

例子:

  • drop(4d6, 1)
  • [1.5, 2, 3]

有趣的是,drop([1, 2, 4, 2], 1)行为正确并输出[2, 4, 2].

0 投票
1 回答
99 浏览

grako - 将词汇元素分解成碎片

我的语法文件test.ebnf看起来像,

当我在输入“test1234”中运行此语法时,我希望它产生“test1234”作为单个词素,但 AST 看起来像,

我尝试将nameguard功能设置为 false 运行,但没有运气。我怎样才能在不写规则的情况下获得这种行为identifier = /[a-z]*[0-9]*/

0 投票
0 回答
415 浏览

python - grako ebnf tags at new line; ingoring spaces

Trying to make a parser with grako to parse something like

such that whitespaces before tag1 should be ignored; but tags should start at new line.

Small ebnf (x.ebnf)

input (test):

start:

Error:

Question: Why?! I put ^\s*x , why it does not match?

Thanks for any hint!

0 投票
1 回答
273 浏览

python - 如何在python中处理结构化语言文件

我有一个像这样的大型结构化语言文件:

我对python和脚本真的很陌生。如何使用 python 将此文本文件解析为 AST。在网上搜索时,我发现 python 中的 grako 可能是一个选项。您能否解释一下 grako 如何使用示例代码工作。提前谢谢。

0 投票
1 回答
241 浏览

python - 如何在ebnf语法中实现规则组合而不重复?

我正在使用Grako EBNF/PEG 解析器

我知道 EBNF 语法允许获取满足给定选项之一的表达式:

是否有类似的语法部分或解决方法允许抓取任何组合的表达式ab并且c没有重复,以便有效的表达式如下:

但不喜欢:

?

0 投票
1 回答
155 浏览

python - 源代码生成

我正在使用 python 的 grako 实用程序将我的 OIL 文件解析为 AST。但我想在修改 AST 后从 AST 重新生成源代码。grako 是否具有执行此操作的功能,或者 python 中的任何其他实用程序都可用于此源代码重新生成。

0 投票
1 回答
98 浏览

python - 生成的代码不缩进

我正在使用 python 脚本修改油文件。我已经编写了 EBNF 语法来使用 Grako 将油文件转换为 AST。并使用 codegen 从 AST 生成油文件,但油文件不缩进(在一行中生成)。

样品油文件:

生成的油:

EBNF 语法:file = [{Comments_option}] OIL_version 包括 [implementation_definition] application_definition {object_definition_list};

缩进 grako 要小心或 codegen。如何缩进生成的代码。谢谢。

0 投票
1 回答
301 浏览

python - 我的语法或解析器生成工具是否有错误?

以下是我试图为其生成解析器的 EBNF 格式(主要是 -此处记录了实际语法)语法:

我用来生成解析器的工具是Grako,它生成了一个修改过的 Packrat 解析器,声称支持直接和间接左递归。

当我在这个字符串上运行生成的解析器时:

我收到以下错误:

调试表明解析器似乎到达了 first 的末尾e[0],然后永远不会回溯到/到达它将尝试匹配in令牌的点。

我的语法是否存在一些问题,以至于支持左递归的 Packrat 解析器会失败?或者我应该在 Grako 问题跟踪器上提交问题吗?