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中定义多行字符串的方式,因此非常适合捕获解析规则以对应于解析方法。
我正在 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中定义多行字符串的方式,因此非常适合捕获解析规则以对应于解析方法。