如何解决Tatsu语法解析器和代码生成产生两个截然不同的结果
我正在使用TatSu,并且从代码生成解析器获得的结果与直接构建解析器时获得的结果非常不同。考虑骰子符号的相当简单的语法:
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'}
但是,当我使用由TatSu命令行工具生成的解析器时,会得到:
{'left': None,'op': None,'right': None}
我尝试过分离规则,组合规则等。我使之起作用的唯一方法是破坏诸如(1+2)d3
break之类的语句。有什么我想念的吗?
解决方法
此问题已在最新版 TatSu 中解决:https://pypi.org/project/tatsu/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。