代码之家  ›  专栏  ›  技术社区  ›  Luiz Miranda

带ply的解析器-解析器规则简单引号

  •  0
  • Luiz Miranda  · 技术社区  · 8 年前

    但是我有一个关于解析规则的问题,因为我有这样的问题:

    def p_main(p):
    main : PROGRAMA ID declaraciones declaracion_funcion bloque
    

    例如:

    def p_expression_binop(p):
        '''expression : expression PLUS expression
                      | expression MINUS expression
                      | expression TIMES expression
                      | expression DIVIDE expression'''
        if p[2] == '+'  : p[0] = p[1] + p[3]
        elif p[2] == '-': p[0] = p[1] - p[3]
        elif p[2] == '*': p[0] = p[1] * p[3]
        elif p[2] == '/': p[0] = p[1] / p[3]
    

    2 回复  |  直到 8 年前
        1
  •  1
  •   PaulMcG    8 年前

    你试过运行你的程序了吗?我希望如果您这样做,您将得到语法错误,因为您的解析规则的定义,虽然有效的BNF,但不是有效的Python。PLY内省“p\u xxx”方法的docstring来读取对应于该表达式解析规则的BNF,因为对引用字符串的内容没有约束。三重引号是我们在Python中定义多行字符串的方式,因此它非常适合捕获与解析方法相对应的解析规则。

    推荐文章