11
votes

Comment résoudre un défi de changement / réduit?

J'utilise une tasse pour créer un analyseur dont j'ai besoin de ma thèse. J'ai un autre conflit dans ma grammaire. J'ai cette règle de production: xxx

et j'ai cet avertissement: xxx

maintenant, je voulais effectivement que cela puisse changer, donc je suis Jolie ok avec ça, mais mon professeur m'a dit de trouver un moyen de résoudre le conflit. Je suis aveugle. J'ai toujours lu le conflit if / sinon, mais pour moi cela ne semble pas le cas. Pouvez-vous m'aider?

P.s.: Identifiant, LPAREN "(" et RÉPAREN ")" Les terminaux, les parlisttes et la commande ne sont pas.


0 commentaires

3 Réponses :


9
votes

Vous avez deux productions:

command ::= IDENTIFIER command2
command2 ::= LPAREN parlist RPAREN |;


1 commentaires

Merci, mais j'ai le même changement / réduit le même conflit, même avec cette solution. Je n'ai pas d'erreurs de syntaxe, donc je suis à peu près sûr que la tasse n'utilise pas un étrange "symbole vide" mais je le contrôle.



9
votes

Votre problème n'est pas dans ces règles du tout. Bien que Michael Mrozek répond soit une approche correcte pour résoudre le "problème pendling sinon", il ne saisit pas le problème à la main.

Si vous regardez le message d'erreur, vous voyez que le conflit de décalage / réduit est présent lorsque Lexing lparen . Je suis à peu près sûr que les règles seules ne créeront pas de conflit.

Je ne peux pas voir votre grammaire, donc je ne peux pas vous aider. Mais votre conflit est probablement lorsque une commande est suivie d'une règle différente qui commence par un lparen .

Regardez toutes les autres règles pouvant éventuellement être après la commande et commencer par lparen . Vous devrez alors consolider les règles. Il y a une très bonne chance que votre grammaire soit erronée pour une entrée spécifique.


1 commentaires

Oui vous avez raison. Le problème était dans la ligne au-dessus de celui-ci. J'ai résolu ce problème il y a 4 jours. J'ai oublié de mettre à jour la question.



2
votes

Essayez de définir une priorité:

precedence left     LPAREN, RPARENT;


0 commentaires