2

我正在尝试将 Python PLY 用于简单的表达式解析器,但我无法让它工作。该代码可在 bitbucket 获得,但有问题的部分是:

首先,定义:

def p_expr_minus(p):
    '''expr :   expr MINUS term'''
    p[0] = p[1]-p[3]

def p_term_divide(p):
    '''term :   term DIVIDE factor'''
    p[0] = p[1]/p[3]

似乎是倒置的,给我结果:3-9 = 6 和 2 / 8 = 4。

其次,括号表达式factor: ( expr )不起作用。特别是,部分:

def p_factor_brackets(p):
    '''factor : OBRACKET expr CBRACKET'''
    p[0] = p[2]

不能正常工作。解析诸如(9+7)raises 之类的表达式:

TypeError: unknown text at ')'

这些错误的根源是什么?

4

1 回答 1

2

您的解析器很好,但是您在main()方法中做了一些愚蠢的事情:

def main():
    data = "3*4+5*6-10"
    data = raw_input()
    print yacc.parse(data[::-1])

您正在为解析器提供反向字符串:data[::-1]!难怪会出现错误,它被解析器(9+7)视为。)7+9(只要通过真实的data,你会没事的。

于 2011-10-07T08:59:15.407 回答