its*_*dok 5 python parsing peg tatsu
我正在尝试使用基于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+/ ;expresssion = add | sub | mul | div | number ;最后一个选项实际上可以工作而不会留下任何功能,但我不明白为什么它的工作原理.到底是怎么回事?
编辑:如果我只是翻转add/sub/mul/div规则来摆脱左递归,它也有效.但是,然后评估表达式成为一个问题,因为翻译了解析树.(3-2-1成为3-(2-1))
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |