我试着用Python PLY做一个简单的表达式解析器,但是我不能让它工作。代码是available at 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)之类的表达式会引发以下问题:
TypeError: unknown text at ')'这些错误的来源是什么?
发布于 2011-10-07 16:59:15
您的解析器很好,但是您在main()方法中做了一些愚蠢的事情:
def main():
data = "3*4+5*6-10"
data = raw_input()
print yacc.parse(data[::-1])您正在向解析器提供相反的字符串:data[::-1]!难怪(9+7)会给出一个错误,它被解析器视为)7+9(。只需传递真正的data,就可以了。
https://stackoverflow.com/questions/7679263
复制相似问题