Implantation des langages de
programmation –
compilateurs et interpr`etes
Licence d’Informatique, Caen 1997/1998
Jerzy Karczmarczuk
Partie I
Copyright c
Jerzy Karczmarczuk
Chapitre 1
Introduction
1.1 L’objectif, ou : pourquoi apprendre la compi-
lation ?
L’objectif principal de ce cours est : Apprendre la construction pratique
des compilateurs r´eels pour des langages de programmation r´eels. Il ne
constitue donc pas la continuation du cours “Langages et Automates” du premier
semestre, qui ´etait plus th´eorique, et consacr´e `a la m´ethodologie analytique dans le
domaine des langages. La th´eorie sera ´evidemment aussi exploit´ee, mais ce cours est
ind´ependant.
Son titre officiel est Compilation, mais ses ambitions et son programme r´eel sont
un peu plus larges. Nous allons parler de langages de programmation en g´en´eral et
de leurs styles, de techniques d’implantation des machines virtuelles et d’interfa¸cage.
Credo religieux no. 1 : On ne peut vraiment apprendre la compilation des langages
de programmation, que si on en connaˆıt quelques uns.
Il est ´evident que les besoins des utilisateurs des ordinateurs varient, ´evoluent, et les
langages de programmation aussi. Les langages d’aujourd’hui sont plutˆot orient´es
vers une bonne conceptualisation, lisibilit´e, et surtout sur la puissance s´emantique
qui d´etermine notre libert´e d’expression, que vers une utilisation extrˆemement
intense des ressources mat´erielles, comme des registres, compacit´e de code, transferts
des octets entre les zones de m´emoire, etc. L’´epoque des assembleurs est bien finie,
au moins pour ceux qui n’envisagent pas le codage du noyau dur d’un syst`eme
d’exploitation embarqu´e o`u l’´economie de m´emoire et la vitesse sont essentielles,
voire critiques.
De plus, les langages de programmation “classiques” n’´epuisent pas le monde
de langages informatiques. Il ne faut pas oublier que plusieurs applications ont
besoin d’effectuer l’analyse et interpr´eter correctement : les langages de marquage
des textes (SGML, HTML), macro-langages inclus dans un document textuel (T
EX,
L
A
T
EX, Lout, JavaScript), langages de description de sc`enes 3D (VRML, POVRay,
RIB, etc.) langages de description de styles (CSS1), un langage de mod´elisation
universel (UML), qui devient de plus en plus populaire, etc. Cette liste peut ˆetre tr`es
longue. Nous avons mˆeme des langages et les descriptions syntaxiques des syst`emes
biologiques ´evolutifs comme les syst`emes de Lindenmayer, utilis´es pour la simulation
2
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
1.2 Litt´erature 4
des textes et des images, “ex´ecut´ees” ensuite par les imprimantes, les pilotes
PostScript esidant dans l’ordinateur, ou par des pilotes de sortie vid´eo. Les
plug-in des flˆaneurs Web comme Netscape ou Hot Java sont des petits in-
terpr`etes.
Il est ´evident que les syst`emes d’interfa¸cage graphiques comme X-Windows,
Microsoft Windows ou le syst`eme MacIntosh ont besoin de “scripts” (pro-
grammes “shell”) capables d’automatiser les tˆaches r´ep´etitives et de prendre
quelques d´ecisions d´ependantes du contexte. Comme il a ´et´e soulign´e ci-dessus,
tous les ´editeurs s´erieux, comme Emacs sont programmables. Il ne s’agit pas
d’ajouter simplement des macros au texte, mais de permettre `a l’utilisateur
de lancer l’ex´ecution d’un autre programme, de r´ecup´erer le courrier, d’´etablir
une communication vocale, etc. On a besoin des scripts pour inegrer plusieurs
applications, par exemple une calculatrice symbolique avec un logiciel de rendu
graphique comme Gnuplot, ou pour ´ecrire les programmes CGI (ex´ecut´es sur
le site serveur par une commande incluse dans une page HTML et lanc´ee par
un client distant). Des langages comme Perl ou Python servent principalement
`a cela.
La programmation devient de plus en plus int´egr´ee et visuelle. On a besoin
de langages nouveaux pour d´ecrire les sc`enes 3D et permettre `a l’utilisateur
d’interagir avec son mod`ele (VRML 2) ; la description des textures surfaciques
ou volumiques des objets constituent des langages de programmation. Le
monde SGML ou XML ´evolue vite : nous avons d´ej`a des langages de description
de structures chimiques, ou de la phonologie et morphologie de la parole
humaine, sans parler de l’animation, ou de la simulation graphique de syst`emes
physiques.
L’Intelligence Artificielle continue `a ´evoluer, et on a souvent besoin de pouvoir
d´ecrire un probl`eme strat´egique complexe dans un langage formalis´e afin de
pr´eciser les modalit´es de sa solution automatique. On d´eveloppe donc des
langages logiques, des langages o`u il est plus facile de coder l’heuristique,
l’apprentissage, l’acc`es aux bases de donn´ees d´eductives, , la coop´eration entre
experts/agents distribu´es, etc.
On a besoin de langages (et de compilateurs sp´ecialis´es) pour le parall´elisme,
simulation, cr´eation musicale, communication multi-m´ediatique, organisation
des hyper-textes, etc.
Cette liste n’´epuise pas le domaine. Il est ´evident que de nouveaux langages sont
n´es tous les mois (bien que ce soit difficile `a prouver. . . ). Terminons alors cette
introduction par un avertissement s´erieux : les exercices inclus dans ces notes
doivent ˆetre pris au s´erieux, mˆeme les exercices dont l’apparence est ludique. Ils
font partie int´egrale du cours, et quelques techniques de programmation ne seront
expliqu´es qu’`a travers eux.
1.2 Litt´erature
1. A. V. Aho, R. Sethi, J. Ullman, Compilers, Principles, Techniques and Tools,
Addison-Wesley 1986. (Version fran¸caise : InterEditions 1989).
1 / 64 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 !