Cours de compilation-exercices
Master d'Informatique M1 2011{2012
24 octobre - 2 novembre 2011
5 Generation de code elementaire
5.1 Passage de parametres
Soit le programme: program param; var x : int; procedure proc(y:int); begin x:=x+y; y:=y+1 end; begin x:=2; proc(x); print(x) end;
Quel est le resultat de ce programme lorsque le parametre y de proc est passe :
1. par valeur,
2. par reference,
3. par copie/restauration,
4. par nom.
5.2 Tableaux d'activation et recursion terminale
On reprend le langage etudie lors de l'analyse semantique. Ce langage manipule des entiers et des booleens et permet de denir des variables et des fonctions.
Lors de la phase de generation de code, les localisations ne sont plus necessaires dans l'arbre de syntaxe abstraite ni les types. On supposera que la phase d'analyse semantique a reconstruit un programme dans le type suivant (cf chier tree.mli) en attribuant des noms uniques a chaque variable. Chaque utilisation de variable est de plus annotee an de distinguer les variables locales des variables globales. type l o c a l = Loc j Glob type c t e = Int of i n t j Bool of bool type op = Plus j Mult j Div j Minus j Leq j Geq j Lt j Gt j Eq type expr = j Cst of c t e j Var of l o c a l s t r i n g j Binop of op expr expr j Le t in of s t r i n g expr expr j I f of expr expr expr j Ca l l of s t r i n g expr l i s t type de c l = j Vdecl of s t r i n g expr j Fdecl of s t r i n g s t r i n g l i s t expr type program = de c l l i s tNovember 2, 2011 2
Le resultat de l'evaluation d'un programme forme d'une suite de declarations consiste a imprimer les valeurs de chaque variable globale introduite.
Ce langage est compile vers du code MIPS, neanmoins on choisit un schema de compilation naf dans lequel les variables locales sont stockees sur la pile. On pourra par contre choisir de stocker les calculs intermediaires soit uniquement dans la pile