PLY区分语法

PLY differentiate between grammars

所以我正在做这个项目,你可以命令叉车用自然语言做某些事情,而我正在使用 Python Lex Yacc。我想知道是否有办法区分长度相同的置换语法?该文档仅说明您可以使用 len(p) 来执行此操作,但这仅在它们的长度不同时才有帮助。示例代码:

def p_moveitemfromto(p):
'''moveitemfromto : MOVEITEM fulltype item rack rack side
                  | MOVEITEM rack rack side fulltype item
                  | rack MOVEITEM fulltype item rack side
                  | rack MOVEITEM rack side fulltype item'''

我需要输出始终保持统一顺序(所以我坚持默认为第一个),我现在所做的只是在较低级别添加不同的字母,这样我就可以按正确的方式排序然后删除字母,但它似乎不是要走的路。我也可以将它拆分为不同的 defs,但这似乎又不是可行的方法。或者也许我把整个概念都弄错了,因为这是我第一次。

如果不同的产生式(即使是同一个非终端)有不同的动作,那么在不同的函数中实现它们。这是使用 Ply 的正常且完全合理的方式。结合不同的生产行为,让你必须找出减少了哪些生产是错误的经济。