问题标签 [tatsu]

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

parsing - 在 Tatsu 中使用生成器 CodeGen

我已经从我的语法生成了模型代码和解析器,但我无法将模型修改为在 python 中生成的代码。我的 EBNF 语法是一个脚本代码,例如用于在 XML 或 ANSI X12 中翻译文件的“C”语法。这是一种特定于语言的语言,我想使用 Tatsu 从此脚本生成 Python 代码。我解析脚本,但我无法成功使用 Parser 或 Model 生成 Python 源代码......我必须在哪里保存 Model 或修改解析器以生成 Python 代码......我看到 tools.py......我可以复制构建新代码模型的代码...你能帮我吗...我开始学习python,我必须在网站上通过上传脚本和下载python代码来实现这个解决方案。

0 投票
1 回答
75 浏览

python-3.x - AttributeError:“元组”对象没有属性“asjson”

当我想测试我的 EBNF 语法时,我遇到了错误:

AttributeError:“元组”对象没有属性“asjson”

代码 :

如何验证我的语法文件?

0 投票
1 回答
229 浏览

python - 如何实现这种EBNF语法(lookahead)?

我正在尝试使用这种 TatSu (grako) 中的 EBNF 语法来解析字符串“###”:

我收到一个错误:

我怀疑首先执行搜索{'#'}(匹配'#' 零次或多次),然后找不到'#'(必需的字符'#')。是否有可能以某种方式实现它,以便首先我看到所需的字符'#',然后才寻找{'#'}附加字符?

0 投票
1 回答
52 浏览

bnf - 如何实现表达式的优先级 Bakus-Naur 形式

文档中描述了这种语法:

如何正确描述语法,以便在尝试解析字符串时得到以下结果:

对于字符串'######',我们得到的结果(['#', '#', '#', '#', '#'], '#')是 True(第一个规则)

对于字符串'#####%',我们得到的结果(['#', '#', '#', '#'], '#')是 False 它应该是(['#', '#', '#', '#'], '#%')(首先工作,但应该是第二个规则)

对于字符串'000000',我们得到的结果(['0', '0', '0', '0', '0'], '0')是 True(适用的第三条规则)

对于字符串'###000',我们得到的结果(['#', '#'], '#')是 False (首先工作,但应该是第五条规则)

文档中给出的规则是荒谬的还是我做错了什么?

0 投票
1 回答
62 浏览

python - Tatsu 语法分析器和代码生成器产生两个截然不同的结果

我正在使用 TatSu,从 codegen 解析器获得的结果与直接构建解析器时获得的结果非常不同。考虑骰子符号的相当简单的语法:

然后,如果我输入1d3通过生成的解析器,tatsu.compile我会得到我期望的结果:

但是,当我使用解析器生成的 Vita TatSu 命令行工具时,我得到:

我试过分离规则、组合规则等。我能让它工作的唯一方法是打破像(1+2)d3break这样的语句。有什么我想念的吗?

0 投票
1 回答
108 浏览

python - 如何在 Python 中生成独立的解析器?

我想为自定义语言生成 Python 解析器。由于我是解析新手,到目前为止我唯一的要求是生成的模块不应依赖于生成器。

我学习了 Tatsu,因为它可以将解析器生成为 Python 模块。但是当我查看生成的模块时,它仍然以

有没有办法使用 Tatsu 生成独立的(仅取决于标准 Python 库)解析器模块?如果没有,我还有其他选择吗?

0 投票
1 回答
27 浏览

tatsu - 如何让 Tatsu 不使用标识符名称中的右括号?

identifier定义为:

并且arrayType作为:

那么为什么 Tatsu 在下面的日志中决定 'ASCIIcode]' 是一个标识符而不是一个身份 + 右括号呢?

0 投票
1 回答
36 浏览

annotations - @name 和 @@keyword 不适用于规则注释

我试图在我的语法中使用@@keyword 和@name,但如果标记@name 的规则被注释,tatsu 似乎会忽略它。

我错过了什么吗?

为了重现该行为,我提供了以下示例:

这个有效:

不出所料,tatsu会报告

如果我通过注释标识符规则

相同的python程序将输出

0 投票
1 回答
46 浏览

parsing - 报告与 TatSu 中一样多的不同语法错误

我正在尝试为首先由 TatSu 解析然后解释的语言实现解释器。我想向我的最终用户提供我的解释器一次报告尽可能多的语言源中包含的潜在错误的功能,包括底层 TatSu 解析器引发的 FailedParse 错误。

我知道的唯一方法是 TatSu 只生成一个 FailedParse 异常,然后停止解析。

有没有办法包装 TatSu 解析器,使其恢复解析源并报告源中任何进一步的潜在语法错误?

0 投票
1 回答
65 浏览

python - 在 Tatsu Python 中漂浮

我使用 TatSu 作为 python 解析器库(如预期的那样)并使用“CalcMiniTutorial”来帮助理解构建。

可悲的是,我没有找到声明浮点数的解决方案。

本教程number = /\d+/ ;用于普通数字,但不适用于浮点数。

我也尝试过number = /\d+"."\d+/ ;number = /\d+\\.\d+/ ;但这不会起作用。

有人有想法或解决方案吗?