Quelques mots sur la compilation
Ianalyses lexicale et syntaxique: le front end d’un compilateur
Icf. cours Projet 1
Ir´esultat: un arbre de syntaxe abstraite
type expr =
Const of int
| Add of expr*expr
| Sub of expr*expr
| Mul of expr*expr
| Div of expr*expr
| IfEq of expr*expr*expr*expr
(* if e1 = e2 then e3 else e4 *)
Iback end: g´en´eration de code
`a partir d’un arbre (pas trop l’arbre de syntaxe abstraite, mais
le r´esultat de potentiellement beaucoup de transformations et
d’analyses) on engendre du code lin´eaire
La pile
Ila structuration de programmes en fonctions qui s’appellent
entre elles rend naturelle l’utilisation d’une pile
Isur la pile: enregistrements d’activation
Ice sont des enregistrements (records)
Ileur pr´esence sur la pile correspond `a la p´eriode durant laquelle
l’appel de la fonction est actif
Ipour commencer, des expressions arithm´etiques
pas de fonction pour le moment
type expr =
Const of int
| Add of expr*expr
| Sub of expr*expr
| Mul of expr*expr
| Div of expr*expr
| IfEq of expr*expr*expr*expr
(* if e1 = e2 then e3 else e4 *)
Evaluer les expressions arithm´etiques sur la pile
Ipour ´evaluer Add(Const 5, Const 7), on engendre
push 7
push 5
add
Il’appel `a add
Id´epile les arguments
Ifait le calcul
Imet le r´esultat sur le sommet de la pile
Il’expression Add(Const 5, Const 7) est traduite en une suite
d’instructions destin´ees `a s’ex´ecuter sur une machine abstraite
Ila pile + un jeu simple d’instructions
Imachine abstraite: on s’abstrait de l’architecture sous-jacente
(portabilit´e, p.ex. Java)
Ile sommet de la pile est acc´ed´e tr`es fr´equemment
trois acc`es lors de l’ex´ecution de add
Premier raffinement de la machine abstraite
Ila pile n’est utilis´ee que pour stocker les arguments
Iles calculs se font sur l’accumulateur, qui est un registre
sp´ecial
Iregistre: acc`es rapide (il y en a g´en´eralement plus d’un!)
Icela donne
acc <- 7
push acc
acc <- 5
acc <- acc + top (* op´eration atomique *)
pop
Ileitmotiv: on rend la pile dans l’´etat de propret´e dans laquelle
on l’a trouv´ee
Exemple un peu plus grand: 3+(7+5)
acc <- 3
push acc
acc <- 7
push acc
acc <- 5
acc <- acc + top
pop
acc <- acc + top
pop
Ibut du jeu
Ijeu d’instructions simples
Itraitement uniforme (ici: ´evaluer une addition)
Iavec des instructions correspondant `a des op´erations
´el´ementaires en machine
Ile r´esultat est en acc `a la fin
1 / 12 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !