2016-11-27 7 views
0

donc je fais ce projet où vous commandez un chariot élévateur à faire certaines choses avec un langage naturel et j'utilise Python Lex Yacc. Je voulais savoir s'il existe un moyen de différencier la grammaire permutée de la même longueur? La documentation indique seulement que vous pouvez le faire avec len (p) mais cela n'aide que s'ils sont différents en longueur. Exemple de code:PLY différencier entre les grammaires

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''' 

J'ai besoin que la sortie soit toujours dans un ordre unifié (donc je tiens à le 1er étant par défaut), ce que je fais est maintenant juste d'ajouter des lettres différentes sur les niveaux inférieurs alors je peut ordonnez-le de la bonne façon, puis supprimez les lettres, mais il semble que ce n'est pas la bonne façon de procéder. Je pourrais également le diviser en différents defs mais cela ne semble pas encore être le chemin à parcourir. Ou peut-être ai-je mal compris le concept puisque c'est ma première fois.

Répondre

0

Si différentes productions (même pour un même terminal) ont des actions différentes, implémentez-les dans différentes fonctions. C'est une façon normale et totalement raisonnable d'utiliser Ply. Combiner différentes actions de production de sorte que vous devez déterminer quelle production a été réduite est une fausse économie.