Je n'ai pas compris comment une grammaire non ambiguë dérive d'une grammaire ambiguë? Considérez l'exemple sur site: Exemple . Comment la grammaire a-t-elle été dérivée me déroute.
Quelqu'un peut-il me guider?
L'exemple a deux grammaires:
E → E + E | E ∗ E | (E) | a
E → E + T | T
T → T ∗ F | F
F → (E) | a
La grammaire non ambiguë a été dérivée de la grammaire ambiguë en utilisant des informations non spécifiées dans la grammaire ambiguë:
Avec les informations externes, nous pouvons dire que:
a * a + b * b
est groupé comme s'il était écrit:
(a * a) + (b * b)
plutôt que comme:
a * ((a + b) * b)
La seconde suppose que "+" se lie plus étroitement que "*" et que les opérateurs se lient de droite à gauche plutôt que de gauche à droite.
Comment l'associativité entrerait-elle en scène pour des exemples comme:
S → aA | Ba
A → BA | a
B → aB | epsilon
Il s'agit d'une grammaire ambiguë, alors comment procéder pour la convertir en univoque?
Je me demande si le 'epsilon' est ε, la chaîne vide; analysons la grammaire dans les deux sens.
La règle pour B dit qu'un B est soit une chaîne vide ou un a suivi d'un B valide, ce qui équivaut à une chaîne indéfiniment longue de 0 ou plusieurs a.
La règle pour A dit qu'un A est un a ou un B suivi d'un a. Ainsi, une chaîne indéfiniment longue de a pourrait aussi être un A. Donc, il n'y a aucun moyen pour la grammaire de choisir si une chaîne de a est soit A soit B.
Et la règle pour S n'est d'aucune aide; un S est soit un a suivi d'une chaîne indéfiniment longue de a soit une chaîne indéfiniment longue de a suivie d'un a. Il nécessite au moins un a, mais n'importe quel nombre de un à partir de un est OK, mais la grammaire n'a aucune base pour décider entre les alternatives gauche et droite.
Ainsi, cette grammaire est intrinsèquement ambiguë et ne peut, à mon avis, être rendue sans ambiguïté; il ne peut certainement pas être rendu sans ambiguïté sans d'autres informations qui ne sont pas en notre possession.
Et si ε n'est pas la chaîne vide?
Dans ce cas, la grammaire est sans ambiguïté en l'état (mais pas nécessairement LR (1)). De toute évidence, beaucoup dépend de la signification de "epsilon" dans le commentaire/la question.
Je ne pense pas que l'associativité affecte cette grammaire. Il entre généralement en jeu avec les opérateurs infixes (comme le "+" dans "a + b").
De Wikipedia (sur Reconnaître les grammaires ambiguës ):
Certaines grammaires ambiguës peuvent être converties en grammaires non ambiguës, mais aucune procédure générale pour ce faire n'est possible, tout comme aucun algorithme n'existe pour détecter les grammaires ambiguës.
Pour arriver à la deuxième grammaire, vous devez trouver une grammaire qui est