Compilateurs

Quelle est la forme correcte de l'arbre syntaxique abstrait de l'expression 2 + 3 * 4 ?

  1. ALa racine est le nœud +, dont l'enfant droit est le nœud * représentant 3 * 4
  2. BLa racine est le nœud *, dont l'enfant gauche est le nœud + représentant 2 + 3
  3. CLes cinq nœuds 2, 3, 4, + et * sont tous enfants directs de la racine
Afficher la réponse et l'explication

Réponse : A. La racine est le nœud +, dont l'enfant droit est le nœud * représentant 3 * 4

La multiplication étant prioritaire sur l'addition, l'expression s'interprète comme 2 + (3 * 4). Dans l'arbre syntaxique abstrait, les opérations calculées en premier sont placées plus bas ; la racine est donc +, avec pour enfant gauche 2 et pour enfant droit le nœud * dont les enfants sont 3 et 4. En évaluant l'arbre de bas en haut, on calcule d'abord 3 * 4 = 12, puis 2 + 12 = 14. La racine * correspond à l'écriture (2 + 3) * 4, et placer tous les nœuds sous la racine ne permet pas d'exprimer l'ordre de calcul.

S'entraîner sur ce thème Retour au thème

Autres questions sur Compilateurs

  1. Quelle caractéristique du code à trois adresses, l'une des représentations intermédiaires, est correcte ?
  2. Que détermine l'analyse de vivacité (liveness), effectuée en préparation de l'allocation de registres ?
  3. Dans une fonction, le nombre maximal de valeurs vivantes simultanément est de 5. Dans le cas simple où le graphe d'interférence ne crée pas d'autre contrainte que ces 5 valeurs, combien de registres faut-il au minimum pour placer toutes les valeurs en registre sans déversement ?
  4. Si une boucle de 100 itérations est réécrite par déroulage avec quatre copies du corps, combien y a-t-il de tests de comptage et de branchements ? (100 est divisible par 4)
  5. Quel est l'enchaînement courant permettant d'obtenir un exécutable à partir d'un programme C ?

Comparatifs sur ce thème