Parser with ply - 解析器规则简单引用

Parser with ply - Parser rules simple quote

我正在 python 中使用 ply 开发解析器。 但是我对解析规则有疑问,因为我有这样的东西:

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 个简单的引号?

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

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

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