【发布时间】:2020-12-13 18:24:22
【问题描述】:
我正在使用 TatSu,我从 codegen 解析器得到的结果与我直接构建解析器时得到的结果非常不同。考虑相当简单的骰子符号语法:
start = expression $;
int = /-?\d+/ ;
dice = number_of_dice:factor /d|D/ sides:factor;
expression = addition ;
addition
=
| left:addition op:('+' | '-') ~ right:addition
| dice_expr
;
dice_expr
=
| dice
| factor
;
factor
=
| '(' ~ @:expression ')'
| int
;
如果我将1d3 提供给通过tatsu.compile 生成的解析器,我会得到我期望的结果:
{'number_of_dice': '1', 'sides': '3'}
但是,当我使用解析器生成的 vita TatSu 命令行工具时,我得到:
{'left': None, 'op': None, 'right': None}
我尝试过分离规则、组合规则等。我可以让它工作的唯一方法是打破像(1+2)d3break 这样的语句。我有什么遗漏吗?
【问题讨论】:
-
如果这个问题仍然存在,你能发一个issue反对TatSu吗?语法是左递归的,生成的解析器中可能缺少解析步骤。
-
我发布了这个问题。请随时跟进。最好知道您是如何调用命令行工具的。 github.com/neogeny/TatSu/issues/180
-
老实说,我换了一个不同的工具,所以我不确定它是否仍然存在