【问题标题】:Tatsu grammar parser and codegen producing two very different resultsTatsu 语法分析器和代码生成器产生两个截然不同的结果
【发布时间】: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
  • 老实说,我换了一个不同的工具,所以我不确定它是否仍然存在

标签: python parsing peg tatsu


【解决方案1】:

此问题已在最新版 TatSu 中解决:https://pypi.org/project/tatsu/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-08
    • 2019-07-09
    • 2021-08-15
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2011-05-21
    相关资源
    最近更新 更多