J'ai écrit un compilateur de base qui génère un AST, en prenant correctement en compte la priorité de l'opérateur dans les expressions. Cependant, lors de la génération de code pour produire du code C++, je ne suis pas sûr de la façon de gérer l'utilisation des crochets.Associativité et précédence des expressions lors de la génération de code C/C++?
Pour cette expression:
A - (B - c)
L'AST ci-dessous:
-
/\
A -
/\
B C
Si générer correctement l'expression précédente, y compris les parenthèses, si le deuxième opérateur est un opérateur d'addition (par exemple), les parenthèses seraient inutiles. Je préférerais ne les utiliser que lorsque cela est nécessaire pour améliorer la lisibilité.
Existe-t-il des règles dictant ce type de comportement et comment savoir quand utiliser des parenthèses. Plus et moins ont le même niveau de priorité dans la plupart des langues et j'aimerais que cela fonctionne pour tous les opérateurs.
Quel type de code générez-vous? Si vous générez du code machine (comme le supposeraient la plupart des gens dans ce contexte), alors votre question est un peu absurde. * Générez-vous un langage de niveau (er) élevé comme C? * – BCS
Excuses, je devinais que générer un langage de niveau supérieur serait plus commun ou du moins que l'utilisation du terme code plutôt que de l'assemblage le rendrait clair. J'ai mis à jour la question pour refléter cela ... – Dan