1.1 L’objectif, ou : pourquoi apprendre la compilation ? 3
des plantes. Il existe des langages style dataflow qui ne sont pas bas´es sur des phrases
lin´eaires, mais o`u les programmes ont forme de graphes, et ces langages sont loin de
l’abstraction acad´emique : Khoros,Simulink,UML, etc. sont des langages pratiques,
voire mˆeme industriels.
Notre approche sera donc de “haut niveau”, et les techniques de g´en´eration du code
viseront plutˆot des machines virtuelles – interpr`etes, que directement le silicium,
car ainsi il sera plus facile d’aborder la s´emantique et la pragmatique qui permettent
d’´evaluer et de comparer les langages. Le code de bas niveau est important, car,
finalement, les ordinateurs marchent grˆace aux instructions ex´ecut´ees directement
par le mat´eriel, mais nous n’avons pas le temps de traiter tout, et surtout le
domaine qui n’appartient plus `a l’informatique au sens large, mais `a l’ing´enierie
des architectures d’ordinateurs. Nous affirmons : un ´etudiant en Informatique devra
probablement un jour construire un petit compilateur et/ou interpr`ete, car telles sont
les tendances d’aujourd’hui. Par contre, les chances qu’il construise un compilateur
dont le code-cible est l’assembleur de bas niveau, sont presque nulles.
Nous allons sacrifier une partie de th´eorie souvent incluse dans les cours de
compilation, qui doit ˆetre bien couverte par le cours Langages et Automates du
premier semestre. R´ep´etons, que notre cours sera par excellence pratique, sans
pour autant d´epr´ecier la th´eorie. `
A l’envers, nous allons l’exploiter intens´ement,
bien que parfois implicitement. Grˆace `a cette th´eorie, notamment dans le domaine
du parsing (analyse syntaxique), la construction des compilateurs est devenue un
domaine abordable par les ´etudiants de Licence, et ne reste pas r´eserv´e aux Grands
Sp´ecialistes. La th´eorie de langages est notre plate-forme commune. Mais si le cˆot´e
applicatif du cours qui pr´ec`ede le notre n’est pas suffisant pour le lecteur, il devra
travailler un peu individuellement. Nous donnerons aux lecteurs une importante
collection de ressources Internet o`u on trouve beaucoup d’exemples concrets et
lisibles de la th´eorie et de la pratique de compilation.
La question : “pourquoi apprendre la compilation, et pourquoi ce cours est tr`es
important” n’a pas ´et´e abord´ee. Notre opinion sur ce sujet est bas´e sur les
observations suivantes :
– La plupart des logiciels de haut niveau assure quelques possibilit´es de dialogue
avec l’utilisateur et doit ˆetre capable de comprendre quelques instructions for-
mul´ees dans un langage formalis´e. Nous avons des tableurs ou des traitements
de texte ´equip´es avec des macro-processeurs puissants et capables de com-
prendre les formules math´ematiques assez complexes ; syst`emes graphiques ou
gestionnaires de bases de donn´ees qui communiquent avec l’utilisateur dans
des v´eritables langages de programmation de haut niveau, etc. Des ´editeurs
de texte ´evolu´es comme Emacs ou Word sont ´etendus par des interpr`etes des
langages universels : Lisp ou Basic. Il y a des implantations des langages de
programmation, comme par exemple Scheme-Elk con¸cues sp´ecialement pour
´etendre les fonctionnalit´es des paquetages plus sp´ecifiques. Elk est utilis´e dans
un puissant paquetage d’animation (AL) et dans un modeleur 3D populaire :
Sced. Ces applications sont programmables en Scheme, alors elles doivent in-
corporer le compilateur et la machine virtuelle (interpr`ete) appropri´ee. Les
syst`emes de mise en page (comme L
A
T
EX) sont ´egalement des compilateurs –
ils transforment le texte source, symbolique, en instructions de rendu graphique