0

我正在使用 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这样的语句。有什么我想念的吗?

4

1 回答 1

0

这个问题是最新版本 TatSu 中的解决方案:https ://pypi.org/project/tatsu/

于 2021-03-24T23:50:47.643 回答