问题标签 [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.
parsing - 使用 PEG (Grako) 解析选项不足?
我的同事 PaulS 问了我以下问题:
我正在为现有语言(SystemVerilog - IEEE 标准)编写解析器,并且规范中有一个规则,其结构与此类似:
问题是在解析以下合法字符串时:
anIdentifier
成功匹配data_type
(通过其标识符选项),这意味着 Grako 正在寻找另一个标识符,然后失败。然后它不会尝试在没有 data_type 部分的情况下进行解析。
我可以重写规则如下,
但我想知道是否:
- 这是故意的
- 如果有更好的语法?
这是一个 PEG-in-general 问题,还是一个工具(Grako)?
python - grako 的规则优先级问题
我正在重做我最初在 Perl 上构建的迷你语言(请参阅github 上的 Chessa#),但是当我应用语义时遇到了许多问题。
这是语法:
我遇到的问题是,d
当运算符和任何后续字母数字字符串之间不存在空格时,运算符被拉入标识符规则。虽然语法本身是 LL(2),但我不明白问题出在哪里。
例如,4d6
停止解析器,因为它被解释为4
d6
,其中d6
是标识符。应该发生的是它被解释为4
d
6
,d
是一个运算符。在 LL 解析器中,情况确实如此。
一种可能的解决方案是禁止d
从标识符开始,但这将禁止诸如这样drop
命名的函数。
grako - 将词汇元素分解成碎片
我的语法文件test.ebnf
看起来像,
当我在输入“test1234”中运行此语法时,我希望它产生“test1234”作为单个词素,但 AST 看起来像,
我尝试将nameguard
功能设置为 false 运行,但没有运气。我怎样才能在不写规则的情况下获得这种行为identifier = /[a-z]*[0-9]*/
?
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!
python - 如何在python中处理结构化语言文件
我有一个像这样的大型结构化语言文件:
我对python和脚本真的很陌生。如何使用 python 将此文本文件解析为 AST。在网上搜索时,我发现 python 中的 grako 可能是一个选项。您能否解释一下 grako 如何使用示例代码工作。提前谢谢。
python - 如何在ebnf语法中实现规则组合而不重复?
我正在使用Grako EBNF/PEG 解析器。
我知道 EBNF 语法允许获取满足给定选项之一的表达式:
是否有类似的语法部分或解决方法允许抓取任何组合的表达式a
,b
并且c
没有重复,以便有效的表达式如下:
但不喜欢:
?
python - 源代码生成
我正在使用 python 的 grako 实用程序将我的 OIL 文件解析为 AST。但我想在修改 AST 后从 AST 重新生成源代码。grako 是否具有执行此操作的功能,或者 python 中的任何其他实用程序都可用于此源代码重新生成。
python - 生成的代码不缩进
我正在使用 python 脚本修改油文件。我已经编写了 EBNF 语法来使用 Grako 将油文件转换为 AST。并使用 codegen 从 AST 生成油文件,但油文件不缩进(在一行中生成)。
样品油文件:
生成的油:
EBNF 语法:file = [{Comments_option}] OIL_version 包括 [implementation_definition] application_definition {object_definition_list};
缩进 grako 要小心或 codegen。如何缩进生成的代码。谢谢。
python - 我的语法或解析器生成工具是否有错误?
以下是我试图为其生成解析器的 EBNF 格式(主要是 -此处记录了实际语法)语法:
我用来生成解析器的工具是Grako,它生成了一个修改过的 Packrat 解析器,声称支持直接和间接左递归。
当我在这个字符串上运行生成的解析器时:
我收到以下错误:
调试表明解析器似乎到达了 first 的末尾e[0]
,然后永远不会回溯到/到达它将尝试匹配in
令牌的点。
我的语法是否存在一些问题,以至于支持左递归的 Packrat 解析器会失败?或者我应该在 Grako 问题跟踪器上提交问题吗?