Vous êtes sur la page 1sur 13

Bruno Delb

http://www.brunodelb.com

Date : 12/11/1997

Compilation

Sommaire
ASSEMBLEUR..............................................................................................................3
RFRENCE AVANT..........................................................................................................3
Deux passes...........................................................................................................3
Une passe...............................................................................................................3
ETAPES.......................................................................................................................4
ALLOCATION..................................................................................................................4
SUBSTITUTION...............................................................................................................4
GNRATION.................................................................................................................4
PLACE LES VARIABLES UTILISES DANS DES REGISTRES...............................................................4
LES TYPES DE LANGAGE..............................................................................................5
LANGAGE
LANGAGE

SANS STRUCTURE PARENTHSE...............................................................................5


AVEC STRUCTURE PARENTHSE...............................................................................5

LES AUTOMATES RCURSIFS ( PILE D'TATS)..........................................................6


NOTATION....................................................................................................................6
EXEMPLE......................................................................................................................6
LA GRAMMAIRE...........................................................................................................7
AMBIGUIT...................................................................................................................7
Dfinition................................................................................................................7
Exemple.................................................................................................................7
RCURSIVIT GAUCHE....................................................................................................7
Dfinition................................................................................................................7
Exemple.................................................................................................................7
DISJONCTION AVEC PREMIERS COMMUNS................................................................................8
Dfinition................................................................................................................8
Exemple.................................................................................................................8
FORME NORMALE............................................................................................................8
PREMIER......................................................................................................................8
SUIVANT......................................................................................................................8
Dfinition................................................................................................................8
Exemple.................................................................................................................8
L'AUTOMATE...............................................................................................................9
CONSTRUCTION..............................................................................................................9
LA GRAMMAIRE.........................................................................................................10
SIMPLIFICATION............................................................................................................10
Principe................................................................................................................10
Exemple...............................................................................................................11
FORME NON NORMALE REPRSENTABLE.................................................................................11
Dfinition..............................................................................................................11
Exemple...............................................................................................................11
DISJONCTION DANS UNE CONJONCTION................................................................................11
Dfinition..............................................................................................................11
Exemple...............................................................................................................11
L'AUTOMATE.............................................................................................................12
1

Bruno Delb

http://www.brunodelb.com

Date : 12/11/1997

Compilation
REPRISE SUR ERREUR.....................................................................................................12
Actions smantiques..............................................................................................12
Exemple...............................................................................................................12
Format.................................................................................................................13
But.......................................................................................................................13
Inconvnients.......................................................................................................13

Bruno Delb

http://www.brunodelb.com

Date : 12/11/1997

Compilation

Assembleur

Rfrence avant
Deux passes
Le premier parcours constitue la table des symboles et traduit les codesoprations.
Le deuxime parcours remplit les parties adresses des instructions.

Une passe
Si l'assembleur rencontre un identificateur inexistant dans la table des
symboles, il l'installe tout de mme dans la table et lui affecte une liste
d'attente. Il existe donc encore dans le texte objet des instructions
incompltes.
Les langages volus travaillent en une seule passe.

Bruno Delb

http://www.brunodelb.com

Date : 12/11/1997

Compilation

Etapes

Allocation
Elle dtermine pour chaque objet du dictionnaire une adresse relative au
dbut du programme objet.
Le compilateur doit engendrer en liste d'instructions symboliques des appels
une allocation d'espace mmoire.

Substitution
Substitue les pointeurs de la liste d'instructions symbolique par des adresses
dans le texte-objet.

Gnration
Elle traduit les instructions symboliques par des instructions machine de
l'ordinateur cible.
On peut ce niveau amliorer le texte (OPTIMISATION).

Place les variables utilises dans des registres


Le texte objet est plac dans un fichier en format binaire translatable.
Mais les problmes ne sont pas rsolus pour les traducteurs :

remplir les parties-adresses par des CALL

les adresses sont relatives au dbut du texte-objet, le compilateur


ne sait donc pas o sera implant le programme lors de son
excution.

Bruno Delb

http://www.brunodelb.com

Date : 12/11/1997

Compilation

Les types de langage

Langage sans structure parenthse


L'analyseur syntaxique est fond sur un automate d'tats finis.
Ce sont des analyseurs trs rapides.

Langage avec structure parenthse


L'automate doit faire appel des inclusions smantiques comptant les
parenthses.
+-----------------------------+

+ a b - <>
S0 S1 e e e e
S1
S2 S2 S1

+-----------------------------+

e = message " Reprise sur erreur "

S1, S2 = nom de sous-programme qui fait appel un sousprogramme qui voit si cette variable est dans le sous-programme
ou non.

Bruno Delb

http://www.brunodelb.com

Compilation

Les automates rcursifs ( pile d'tats)

Notation
-> = avancer dans le texte suivant
= PTEXTE := PTEXTE + 1
. = passer l'tat (ligne) suivant
= PILE (SP) := PILE (SP) + 1
v = dpiler
= SP := SP - 1
^ = empiler
= SP := SP + 1
PILE (SP := n
e = cas d'erreur
= afficher un message d'erreur
algorithme de reprise sur erreur
end = arrt de l'analyse
= mot syntaxiquement correct
omission = arrt de l'analyse
= omission de caractres
surplus = arrt de l'analyse
= surplus de caractres
/// = cas impossible
= situation impossible de l'automate

Exemple
+--------------------------------------------------+
^3
e
e
e
omission
+---------+---------+---------+---------+----------
surplus surplus surplus surplus end

+---------+---------+---------+---------+----------
-> .
///
///
///
///

+---------+---------+---------+---------+----------
^7
^7
e
e
omission
+---------+---------+---------+---------+----------
e
e
-> .
e
omission
+---------+---------+---------+---------+----------
v .
v .
v .
v .
v .

+---------+---------+---------+---------+----------
^3
-> .
///
///
///

+--------------------------------------------------+

La suite de la pile d'tats est :


7 8
3 4 4 4 5
7 7 7 7 7
3 4 4 4 4
1 1 1 1 1
((x))?! =>

6
7 7 8
4 4 4 4 4 5 6
1 1 1 1 1 1 1 1 2
surplus (?!) => arrt de l'analyseur

Date : 12/11/1997

Bruno Delb

Date : 12/11/1997

http://www.brunodelb.com

Compilation

La grammaire

Ambiguit
Dfinition
Une rgle est ambigue si et seulement si rgle et si
<> 0.

Premier (<a>) _ Suivant (<A>)

Exemple

<A> -> <B>b *


<B> -> ba<C> L = (ba) b
<C> -> _<B>

On peut alors :

modifier le langage ou

modifier la grammaire (exemple : <A> -> b<B>)

laisser venir l'erreur

faire un branchement inter-automates

Rcursivit gauche
Dfinition
Il y a rcursivit gauche si un lment de V est son propre premier.

Exemple
<A> ->
<T> -> _<B><T>

Exemple

<A><B><C>

devient

<A>

->

<C><T>

Bruno Delb

http://www.brunodelb.com

Date : 12/11/1997

Compilation

Disjonction avec premiers communs


Dfinition
Il y a disjonction si et seulement si deux termes ont au moins un premier
commun.

Exemple

<A> -> <B><C>


<T> -> _ <B><T>

devient <A> -> <C><T>

Forme normale
Disjonction et conjonction :
<A> -> xyz devient <A> -> <B>z
<B> -> xy

Premier
v Premier de <A> v _ Premier (<A>) il existe une rgle du type :
<A> -> <X > ...

1
<X > -> <X > ...
1 2
.... -> ....
<X > -> v ...
n

Suivant
Dfinition
v suivant de <A> il existe une rgle du type : <S> -> ... <T><U> ...

<X > -> ... <X >


1 2
.... -> ....
<X > -> v
n

Exemple
<A> -> <B>x
<T> -> y<B><C>d
<C> -> _y

Suivant (<B>) = { x, <C>, Premier (C), d } = { x, <C>, y, d }

Bruno Delb

http://www.brunodelb.com

Date : 12/11/1997

Compilation

L'automate

Construction
Codage d'un lment de V = ^n
Avec :

n = premier tat du sous-automate correspondant l'lment de V

. = dans les colonnes des premiers de l'lment de V

^ = sortie de sous-automates autres que l'axiome

" surplus " = sortie d'axiome sauf dans la colonne de

" end " (marque de fin de texte)

X = premires lignes de sous-automates autres que

l'axiome (cas impossible)

. = ligne comportant un appel une rgle comportant

" omission " = colonne de " end "

0 = reste (erreur)

Bruno Delb

http://www.brunodelb.com

Date : 12/11/1997

Compilation

La grammaire

Simplification
Principe
Rgle du type <A> -> <B> :

<A> diffrent de l'axiome

supprimer <A>

remplacer <A> par <B>

Rgle utilise une seule fois dans une rgle de mme forme :

la remplacer dans cette dernire rgle

la supprimer

10

Bruno Delb

http://www.brunodelb.com

Date : 12/11/1997

Compilation

Exemple
<A> -> b<C>d => <A> -> bxyzd
<C> -> xyz

Forme non normale reprsentable


Dfinition
<A> -> _xy

Exemple
<A> -> _xy

Disjonction dans une conjonction


Dfinition
La disjonction de terminaux joue le mme rle. suppression de l'automate
qui les traite

Exemple
<A> -> xyabcz

11

Bruno Delb

http://www.brunodelb.com

Date : 12/11/1997

Compilation

L'automate

Reprise sur erreur


Actions smantiques

mmoriser le type

parcours du dictionnaire : nom existant ?

oui => " erreur : double dclaration "

non => placer le nom avec son descripteur (variable, type) dans le
dictionnaire

parcours du dictionnaire : identificateur existant ?

oui => mmorisation de son type

non => " erreur : identificateur inexistant "

parcours du dictionnaire : identificateur existant ?

oui => comparer les deux types : identiques ?

oui -> cration en LIS d'un appel un sous-programme de conversion

non => " erreur "

Exemple
Enonc : entier A, rel B , B <- A
Prexistant :
Dictionnaire :
+-------- descripteur ----------------+
+-------------------------------------+
Aux Var Rel Real Procedure
+-------------------------------------+
+---------- identificateur -----------+

LIS :
+----------------+
point d'entre
+----------------+

12

Bruno Delb

http://www.brunodelb.com

Date : 12/11/1997

Compilation
Procdure REAL
Traduction :
AUX <- CALL (A) => B <- A
B <- AUX

Dictionnaire :
+-----------------------------------+
A Var Entier B Var Rel
+-----------------------------------+

LIS :
+------ AUX <-> CALL (A) -------+ +---- B <- AUX ----+
+------------------------------------------------------+
CALL point d'entre A Aux Affecter B Aux |
+------------------------------------------------------+

Format
Une unit de programme est un couple module (programme principal, texteobjet, sous-programme) (format source) et descripteur de module (nom,
taille, ...) (format binaire excutable).

But
Faire accepter, alternativement, sur la ligne de l'erreur et la suivante, les
caractres du texte.

Inconvnients
Erreurs de l'algorithme possibles diagnostiques aberrants possibles

13