我正在使用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)d3 break这样的语句。我是不是漏掉了什么?
发布于 2021-03-25 07:50:48
这个问题是在最新版本的TatSu中解决的:https://pypi.org/project/tatsu/
https://stackoverflow.com/questions/63572442
复制相似问题