Fiche CCMP2 1

Intermediate Representation

A cet étape de la construction du compilateur, nous avons un ast.

J’ai un ast, comment je fais pour prodire du code depuis l’AST ?

Structure du compilateur

Front-End et Back-End

Front end est un nom (le front end)
front-end est un adjectif (front-end interface)

Front end: Lié à l’analyse.
Middle end: Concerne tout ce qui est des optimisations généric etc.
Back end: Concerne le passage à notre assembleur préféré.

Front end:

Lexical analysis (scanning)
...

Back end:

Instruction select
register allocation
Register allocation
assembly specific optimizations
assembly code emission
...

Middle-End

L’interet d’un middle end c’est que si un compilo à un bug, alors il faut changer le code de tous les compilos qui se ressemblent (C, et C++ par exemple). Alors que si on crée un middle end, on a moins de noeuds à vérifier. (cf. slide 9 du pdf du prof).

Il est difficile de réaliser le passage d’un angage à un middle end commun à tous les langages.
On va donc réaliser plusieurs couche de middle end qui vont chacune faire converger notre langage vers un middle end commun. Chaque couche retirera une couche d’abstraction. Par exemple une couche va retirer l’objet, une autre va retirer les lambda etc…

Il existe plusieurs type de middle-end. Celui qui va nous intéresser est le RegisterBased: tc’s Tree.

RegisterBased: tc’s Tree

:warning: Question:

Dans la slide 27/107 vous faites référence à 3 structures:

Je ne comprends pas à quoi cela correspond et fait référence. Pouvez-vous m’éclairez ?

Le langage Tree

Tree structure (nokidding…)
Un bounded number of registers (temporaries)
Two way conditional jump

Exemples de représentations tree à la slide 41.

Memory

On a plusieurs modèle de mémoire dynamique:

:warning: Question:
Je n’ai pas compris ce qu’est le modèle Global. Puis-je avoir un exemple svp ?

Activation Blocks

Activation Block: Tout ce qui constitue une procédure/fonction en ASM.

Data à mettre sur la stack:

Example de block à la slide 54/107

frame pointer: Début du block d’activation
Stack pointer: Fin du block d’activation

:warning: Question
Je n’ai pas compris ce qu’était Arrays et Alloca.

Translation

Linearization

Lineariser: Quand on a le language tree, on essaie de tout aplatir en remplacant les blocks imbriqué en jeu d’instruction.

Principe:

:warning: QuestionS

Je ne comprends ce que vous voulez dire par là.

Je ne suis pas sûr de comprendre ce que sont les ss1, ss2, ss3 etc…

Enfin, je vois de nombreuses transformations dans la slide 95. Comment avez-vous opéré pour les réaliser ? Juste par logique et visuellement ou y a-t-il un algorithme ?