En classe de langage de programmation, j'ai appris la précédence et l'associativité des opérateurs. La sous est simple -contexte-grammairePriorité de l'opérateur dans le langage de programmation
<expr> -> <expr> + <term> | <term>
<term> -> <term> * <fact> | <fact>
<fact> -> (<expr>) | a
En utilisant Grammaire de-contexte ci-dessus, nous pouvons faire la phrase
a+a+(a+a)
je pense, l'ordre doit être fait opération suivre: (a + a) -> a + a puis plus tout à fait. Cependant, lors d'une conférence, le professeur a dit que les deux (a + a) -> a + a et a + a -> (a + a) sont corrects. Les étudiants sont en panique. Même dans la phrase ci-dessous,
(a+a)+((a+a))
fois l'ordre ((a + a)) -> (a + a) puis plus et (a + a) -> ((a + a)) est correct. Il vient de dire, après avoir fait l'arbre d'analyse, puis converti en langage assembleur donc l'ordre dépend du compilateur.
Je ne comprends pas son explication. Est-ce que quelqu'un peut expliquer pourquoi il y a deux ordres possibles ??
Notez que la grammaire donnée est ambiguë. ' + ' devrait probablement être ' * '. –
@MichaelDyck correct. Ma faute de frappe –