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

python - 规则匹配时 Grako 结束关闭

我有这个语法:

但是当我尝试解析时,它总是将表达式的名字作为参数的一部分。有没有办法让它在 args 闭包中的每个名称之前测试它是否可以匹配表达式并在它通过时结束?

提前致谢。

编辑:我通过语义解决了它,但我仍然很好奇它是否可以通过 grako ebnf。

0 投票
1 回答
652 浏览

python - 如何在 EBNF 中表达这种格式?

我有以下数据:

我正在尝试使用 Grako 将其转换为 JSON,但我无法正确获取 EBNF 格式。这是我所拥有的:

但是,这只是打印出来:

我哪里错了?我从来没有用过Grako。我只是希望能够将其解析为可用/可访问的内容,而无需设计静态解析器以防格式更改。如果稍后格式发生变化,更新 EBNF 似乎比重新编写整个解析器更容易。

0 投票
1 回答
395 浏览

cython - 在 Python 中安装 grako 时出现链接错误

我正在尝试从 PyPI 安装包 grako,它显然用 Cython 编译东西。我不知道这个过程意味着什么,它以一个未解析的符号中断。

也许有人可以给我一个提示,要检查什么才能完成这项工作?

这是 Windows、Anaconda、Python 3.4 上的输出:

它说

有没有一种简单的方法可以解决这个问题?

0 投票
1 回答
316 浏览

grako - 基本 Grako 示例给出 IndexError

我想开始使用 Grako (3.6.6),作为解析器的第一次体验,我想从自定义语法生成 HTML 表。以下基本测试

导致错误

这恰好是partial_match = (token[0].isalpha() and token.isalnum() and self.is_name_char(self.current()) )

尽管我是解析器的新手并且缺乏文档,但我还是想坚持使用 Grako。

你能帮我建立一个输出表格 HTML 的基本示例吗?

0 投票
1 回答
180 浏览

python - Grako - 如何进行错误处理?

如何使用 Grako 进行错误处理?

EBNF (MyGrammar.ebnf):

我正在生成解析器

解析一个空字符串和一个“坏”字符串(语法无法匹配)都会导致一个空的 AST 闭包。

另外:是否有任何错误消息,如“预期 foo 在位置 123”?

0 投票
2 回答
76 浏览

parsing - PEG 解析匹配至少一个保留顺序

鉴于 PEG 规则:

我如何重写它以使其匹配至少一个元素但可能同时执行它们的顺序?

即我想匹配以下所有行:

但不是空字符串或无序的表达式,例如def abc.

当然,对于三个元素,我可以在单独的规则中拼出组合,但是随着元素数量的增加,这变得容易出错。

有没有办法以简洁的方式指定这一点?

0 投票
1 回答
648 浏览

python - Grako“代码”生成

我试图了解如何重新创建由grako生成的解析器解析的文档。

在深入研究 grako 源代码之后,我相信我终于明白了如何从 AST 返回到生成的文档。有人可以检查我的以下理解是否正确,如果有更直接的方法,请告诉我?

  1. 一个人创建一个希望解析的 PEG 语法。Grako 创建了一个解析器类和一个基于它的语义类。
  2. 一个人(手动)创建一个python模块,其中包含(或多或少)一个单独的类(的子类grako.model.Node),用于一个人的语法中的每个规则。每个类必须至少有一个构造函数,该构造函数为相应规则中的每个命名元素提供参数,并将其值存储在类属性中。
  3. 一个子类(手动)生成的语义类,以将每个规则的 ast 替换为在步骤 2 中创建的相应类。
  4. 一个人(手动)创建一个python模块,一个grako.codegen.ModelRenderer定义模板的子类,用于(或多或少地)为一个人的语法中的每个规则生成“代码”。
  5. 一个提供由 Node 子类和包含模板的 python 模块组成的 ASTgrako.codegen.CodeGenerator().render(...)以创建输出。

这可能是对的吗?这似乎一点也不直观。

  • 为什么要经过第 2 步和第 3 步的重大努力,除了存储 AST 中已经包含的信息之外什么都不做?
  • 这种方法比直接从 AST 工作有什么优势?
  • 如果只想以原始语法重新创建文档,有没有办法自动化或回避步骤 2 和 3?
  • 给定一个 PEG 语法定义,理论上是否可以像创建“解析器生成器”一样自动创建“代码生成器”?
0 投票
1 回答
249 浏览

abstract-syntax-tree - 增强抽象语法树

这是一个简单的语法:

我用 Grako 解析这个输入流:

我检索这个抽象语法树(JSON):

有没有一种简单的方法来获得这样的 AST:

或这个:

?

我相信 Grako 生成的解析器中的语义操作是解决方案,但我无法弄清楚。

有没有一种简单的方法可以做到这一点?

0 投票
1 回答
168 浏览

python - 是否可以在没有 grako 的情况下使用 with grako 生成的解析器?

见标题。对于我正在编写的一个小工具,我想介绍一种简单的布尔过滤器语言,并决定“正确”地做到这一点并使用解析器生成器。在玩了一下 grako 之后,我发现我喜欢它并且很快就完成了过滤器语言(这也很好:))

现在的问题是,如果我想在其他计算机上使用该工具或将其提供给其他人,我首先必须以某种方式使 grako 可用,这有点麻烦,因为其他一切都是标准的 python3 东西。

我想通过共同打包必要的 grako 类是可能的,但这似乎有点混乱(许可会以任何方式提及)。也许我忽略了一些内置方法。

0 投票
1 回答
51 浏览

xtext - 从 grako 翻译时 XText 中的节点标签/键

在 grako 中,可以使用以下name:e命令将 e 的结果添加到 AST,使用名称作为键。例如

将这个翻译成 Xtext 的好方法是什么?我试过了

这没有失败,但会发出以下警告

我想我正在尝试模仿这种name行为,但没有太大的成功。