标签: tatsu

如何处理PEG语法中的负数?

我正在尝试使用基于PEG的Python解析器生成器tatsu编写一个简单的int表达式解析器.这是我的代码:

import tatsu

grammar = r'''
    start = expression $ ;
    expression = add | sub | term ;
    add = expression '+' term ;
    sub = expression '-' term ;
    term = mul | div | number ;
    mul = term '*' number ;
    div = term '/' number ;
    number = [ '-' ] /\d+/ ;
'''
parser = tatsu.compile(grammar)
print(parser.parse('2-1'))
Run Code Online (Sandbox Code Playgroud)

该程序的输出['-', '1']不是预期的['2', '-', '1'].

如果我要么得到正确的输出:

  • 删除对一元减号的支持,即将最后一条规则更改为 number = /\d+/ ;
  • 删除term,mul和div规则,仅支持加法和减法 …

python parsing peg tatsu

5
推荐指数
1
解决办法
280
查看次数

标签 统计

parsing ×1

peg ×1

python ×1

tatsu ×1