【问题标题】:Python PLY - something wrong with this grammar?Python PLY - 这个语法有问题吗?
【发布时间】:2011-10-06 19:13:48
【问题描述】:

我正在尝试将 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 ')'

这些错误的根源是什么?

【问题讨论】:

    标签: python grammar ply


    【解决方案1】:

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

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

    您正在向解析器提供 reversed 字符串:data[::-1]!难怪(9+7) 会出错,解析器会将其视为)7+9(。只要传递真正的data 就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2016-09-06
      • 2012-07-07
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多