有没有办法用以下语法定义多行制作? PLY预计:在ID之前暗示每行生产一次。
def p_envvar(p):
'''
envvar : EV \
ID \
COLON \
INT_VAL \
BOX_OPEN \
INT_VAL \
SEP \
INT_VAL \
BOX_CLOSE \
STRING_VAL \
INT_VAL \
INT_VAL \
DUMMY_NODE_VECTOR \
comma_identifier_list \
SEMICOLON
'''
答案 0 :(得分:2)
您应该使用“管道”来分隔备用规则:
def p_envvar(p):
'''
envvar : EV
| ID
| COLON
| INT_VAL
| BOX_OPEN
| INT_VAL
| SEP
| INT_VAL
| BOX_CLOSE
| STRING_VAL
| INT_VAL
| DUMMY_NODE_VECTOR
| comma_identifier_list
| SEMICOLON
'''
但是使用这么多的替代提示我可能需要简化,(你可以声明不同的函数,简化到相同的状态:
def p_envar_ev():
"""envvar : EV"""
def p_envvar_id():
"""envvar : ID"""
......等比使用大的if块来处理每种可能的情况更容易阅读。
答案 1 :(得分:0)
有一种方法可以通过docstring
理解它的方式在多行上传播长PLY
:
def p_expr(p):
("""process_type : this is a very long """
""" production rule """
""" that does not fit on a single line """)
此魔法的归功于this的OP。
请注意括号:它们比使用\
转义要好得多,因为它们符合PEP 8,因此语法检查器不会抱怨。