带有层的解析器-解析器规则简单报价

时间:2018-09-20 17:16:51

标签: python parsing ply

我正在用ply在python中开发解析器。 但是我有一个关于解析规则的问题,因为我有这样的东西:

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]

为什么要用3个简单的引号?

2 个答案:

答案 0 :(得分:1)

三个引号(双引号或单引号)是python中的多行字符串。

https://www.digitalocean.com/community/tutorials/how-to-format-text-in-python-3#multiple-lines

答案 1 :(得分:1)

您是否尝试过运行程序?我希望如果这样做,将会得到SyntaxErrors,因为解析规则的定义虽然有效,但BNF却不是有效的Python。由于对加引号的字符串的内容没有限制,PLY会自检“ p_xxx”方法的文档字符串以读取与该表达式的解析规则相对应的BNF。三引号是我们在Python中定义多行字符串的方式,因此非常适合捕获与解析方法相对应的解析规则。