2012-03-24 2 views
-2

I ont la grammaire suivante:yacc réduire/réduire les conflits

  1. x: (z) o
  2. x: n
  3. z: x
  4. z: zx
  5. o: + | - |/| *
  6. n: [0..9]

la pile de l'analyseur Curren tly est: "(z (zx" les tokens suivants sont) +) *

Laquelle des règles 3 ou 4 va l'analyseur pour réduire et pourquoi?

Merci

+0

Lesquels sont les symboles terminaux? Quelles règles sont impliquées dans le conflit? Quel est le message affiché par YACC? Cela ressemble beaucoup à un devoir. S'il vous plaît affiner votre question. – mschonaker

+0

oui c'est un devoir. Les symboles terminaux sont 0..9 et + -/*. Ce que je ne comprends pas, c'est si l'analyseur va réduire x à z ou zx à z. Probablement le premier, parce que la règle z: x est la première mais je ne suis pas sûr. – user1290468

+1

La sortie de 'yacc -v' vous dira ce que fait la grammaire (ou' bison -v'). –

Répondre

0

La réponse est: règle 4.

, c'est Intuitivement parce que les règles 3 et 4 règles sont une paire gauche-associative qui convertit X à Z de façon gourmande.

Une autre raison est que si nous réduisons la règle 3, nous nous retrouvons avec Z Z sur la pile d'analyse, ce qui n'est pas une forme potentielle possible. La grammaire ne génère pas de dérivations partielles qui ont Z Z.