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

tatsu - 如何在 Tatsu 语法中包含文字“#”?

我无法让 Tatsu 解析包含文字“#”的语法。

这是一个最小的例子:

解析会引发FailedParse异常。跟踪似乎表明解析器与 '#' 文字不匹配:

如果我将语法更改为使用“#”以外的符号,它就可以正常工作。例如这有效:

不幸的是,我无法更改输入数据的格式。

0 投票
1 回答
79 浏览

c-preprocessor - 如何使用 Tatsu 构建预处理器解决方案?

我正在编写一个将 Tiny C 代码转换为 Python 代码的编译器,但我需要构建一个预处理器解决方案来替换#define和管理编译器 C 指令(#ifdef、#else、#define ...)

我选择在 Python 中使用 pcpp 模块,但没有成功……在完整的 Tatsu 解决方案中是否有可能提供解决方案?

0 投票
1 回答
64 浏览

tatsu - 有没有办法在 tatsu 中进行上下文相关的解析

上下文敏感的 '%' ..... eol 评论

我从这里描述的 PDF 语法开始

https://github.com/caradoc-org/caradoc/blob/master/doc/grammar/grammar.pdf

这似乎缺乏 eol 评论的定义。

PDF 具有以 '%' 字符开头的行尾注释,但 string_literal (和另一个规则流)除外。

其中 string_content 可以包含“%”字符和 eol,但不能包含“()”等。PDF 语言也有一些特殊情况,否则看起来像注释,例如

或者

有没有办法处理 tatsu 语法中的上下文敏感性?

0 投票
1 回答
74 浏览

tatsu - Tatsu:规则排序

我正在与 Tatsu 一起为半导体行业使用的语言实现解析器。该语言要求在使用前定义变量。例如:

在这种情况下,SignalGroup 模块必须位于 Pattern 模块之前。在 TatSu 中编写语法时,我如何强制/实施这种“排序”?

0 投票
1 回答
74 浏览

grammar - 如何优化这个语法规则?

我正在使用 TatSu python 库实现语法。我的语法工作正常,但有一条规则会消耗相当多的时间。在大约 3000 行的块上(更大语法的一部分),如果我采用这条完整规则,解析整个块大约需要 42 秒。如果我将此规则减少到几个标记,则运行时间会从 42 秒下降到 33 秒(改进约 20%)。

该规则如下所示,它应该匹配一系列由“/”分隔的事件。

如果我将事件更改为以下内容,我会得到更快的解析。

那么是否有可能以某种方式改进上述规则以获得更快的处理?感谢您的任何想法。

0 投票
2 回答
148 浏览

tatsu - TatSu:如何优化以下语法逻辑以获得更快的解析时间?

我在 TatSu 中有以下语法。为了减少解析时间,我实现了剪切操作(即,一旦看到特定的标记,就提交到特定的规则选项)。

但是,我仍然看到运行时间很长。在大约 830K 行的文件上,大约需要 25 分钟(没有剪切表达式,它接近 40 分钟)。我认为进一步改进是可能的,但我不确定如何以更好的方式重写以下逻辑。

我认为花费大部分时间(通过观察 TatSu 语法匹配跟踪)的主要问题是vec_data_string / vec_data_strings。关于如何进一步改进这一点的任何建议?

我的测试文件有很多这样的序列:

0 投票
1 回答
222 浏览

python-3.x - TatSu:转储到 YAML 时出现 yaml.representer.RepresenterError

在成功解析后,我有一个由 TatSu 生成的对象模型。模型使用 JSON 格式转储到标准输出 OK。但是当我尝试将其转储到 YAML 时,我得到了一个 RepresenterError 异常。我不知道如何解决这个问题。对象模型由 TatSu 内部生成。任何人都可以阐明如何潜在地解决此错误吗?

将 python 3.7.0 与 TatSu v4.4.0 与 pyyaml 5.1.2 一起使用。

我的代码:

输出:

0 投票
1 回答
90 浏览

python - 在语义中引发异常后,是否可以继续使用其他规则进行解析?

在语义操作中引发异常后,是否可以回退到其他规则?就像下面的(人为的)场景:

并且当引发异常时,解析将继续使用“关键字”规则。我知道@@keyword 功能,但我想在运行时声明关键字(我的解析器是用于具有用户定义运算符的编程语言)。

0 投票
1 回答
85 浏览

python - Tatsu:如何在语义动作中验证/处理类似算术的表达式

我有一个 TatSu 语法,我正在解析算术表达式,例如SignalGroup {ABUS='A3 + A2 + A1 + A0';}.

相关语法:

AST 输出:

我想对此规则进行一些语义验证。也就是说,检查信号 A3-A0 是否已在其他(信号)块中声明。如果未声明,则引发错误。在解析另一个(信号)块时,我保留了所有信号的命名(符号)表以供查找。我想知道在语义动作代码中“走”这样一个 AST 的最佳步行是什么,因为如果我的表达式包含 200 个信号(即 A0 + A1 + .. A199),它可能非常深。现在,我只有一个像这样的存根函数:

我检查了 TatSu 文档,其中有一个部分,Walking Models但似乎只有在构建完整模型 AST之后。也许我错了。在构建整个(顶级)模型时,有没有办法在语义验证规则中有效地遍历 signal_groups_block 的 AST?

参考:https ://tatsu.readthedocs.io/en/stable/models.html#walking-models

0 投票
1 回答
142 浏览

peg - 解析正确时如何处理 TatSu 中的语义失败?

我正在尝试为包含类 C 表达式的语言创建一个 TatSu 解析器。我对表达式有以下语法规则:

我在atom规则上遇到了麻烦。解析以下内容时(作为andexpression之间的部分):=;

我得到了这个例外:

helper_callvar_or_param规则应该匹配得很好时,它试图使其符合规则却失败了。事实证明,原因是FailedSemantics语义操作引发的错误var_or_param。一旦我解决了这个问题,解析就会按预期工作。

这就提出了一个问题:如果FailedSemantics影响解析逻辑,当出现语义错误时,什么是正确的方法来提醒用户,但解析逻辑在其他方面是正确的,不应该尝试不同的选择或规则?例如,声明前的类型不匹配或变量使用?(理想情况下,仍然会显示发生错误的行号。)