Question

Je l'ai écrit un compilateur de base qui génère un AST, en tenant correctement compte de la priorité des opérateurs dans les expressions. Cependant, lors de l'exécution de génération de code pour produire le code C, je ne suis pas sûr de la façon de gérer l'utilisation de supports.

Pour cette expression:

A - (B - c)

L'AST ci-dessous:

   -
  / \
 A   -
    / \
   B   C

devrait 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 unecessary. Je préférerais ne les utiliser que si nécessaire pour améliorer la lisibilité.

Existe-t-il des règles dictant ce genre de comportement et comment savoir quand utiliser entre parenthèses. Plus et moins le même niveau de priorité dans la plupart des langues et je voudrais faire ce travail pour tous les opérateurs.

Était-ce utile?

La solution

Par le passé, ils appellent cela « assez d'impression ». Si vous Google que plus « priorité », vous pouvez trouver quelques exemples pour vous aider.

Officieusement, je pense que l'idée de base est que lorsque vous RECURSE dans une sous-expression, on compare sa priorité à l'expression actuelle. Si elle est inférieure, vous avez besoin entre parenthèses. Sinon, vous ne le faites pas. Associativité peut être manipulé en faisant une vérification similaire:. Si la sous-expression a le même priorité en tant que parent vous avez besoin entre parenthèses si elle est du mauvais côté selon associativité

Autres conseils

Si une opération avec une priorité plus élevée est plus faible dans l'arbre que vous n'avez pas besoin de le mettre entre parenthèses en.

Il ne suffit pas de connaître la priorité des opérations cependant. Vous devez également connaître le associativité des opérations. Il permet aux opérations du groupe de la même priorité correctement. Dis, soustraction reste associative, donc A-B-C est égal à (A-B)-C, mais pas A-(B-C).

Il suffit d'écrire sur la table entière de préséance et associativities pour toutes vos opérations et consulter que vous générez votre expression.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top