0% ont trouvé ce document utile (0 vote)
25 vues4 pages

Cours 2

La compilation est un processus qui divise un programme source en ses composants pour créer une représentation intermédiaire et un programme cible. Elle comprend plusieurs phases, dont l'analyse lexicale, syntaxique et sémantique, qui vérifient la structure et la validité des instructions. L'utilisation de grammaires non contextuelles permet de définir la syntaxe des langages de programmation, facilitant ainsi la traduction des programmes.

Transféré par

bilpodidi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
25 vues4 pages

Cours 2

La compilation est un processus qui divise un programme source en ses composants pour créer une représentation intermédiaire et un programme cible. Elle comprend plusieurs phases, dont l'analyse lexicale, syntaxique et sémantique, qui vérifient la structure et la validité des instructions. L'utilisation de grammaires non contextuelles permet de définir la syntaxe des langages de programmation, facilitant ainsi la traduction des programmes.

Transféré par

bilpodidi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

I. Introduction à la Compilation. 2ème Cours.

La compilation est un ensemble de phases ou de passes qui permettent de partitionner le


Programme Source (PS) en ses constituants et d’en créer une représentation intermédiaire
(partie analyse), elles permettent aussi de construire le Programme Cible (PC) (partie
synthèse).
- La partie analyse comprend : l’analyse lexicale, l’analyse syntaxique et l’analyse
sémantique.
1. Analyse lexicale est une analyse linéaire qui, au cours de la lecture du PS caractère par
caractère, permet l’élimination des espaces (blancs) et la formation des unités lexicales.
Exemple : Y := A*X**2 + B.
Les unités lexicales sont :
- L’identificateur Y ;
- Le symbole d’affectation := ;
- L’identificateur A ;
- L’opérateur de multiplication * ;
- L’identificateur X ;
- L’opérateur de puissance ** ;
- La constante 2 ;
- L’opérateur + ;
- L’identificateur B.

2. Analyse syntaxique est une analyse hiérarchique (parfois grammaticale) qui consiste à
regrouper les unités lexicales du PS en structures grammaticales (règles) afin de
synthétiser le résultat. Ces structures sont représentées par un arbre syntaxique après
la construction d’un arbre abstrait.
- Tout identificateur est une expression.
- Tout nombre est une expression.
- Si expression1 et expression2 et … et expressioni sont des expressions alors :
- Expression1 op expression2 op … op expressioni est une expression, telle que : op
est un opérateur (+, -, *, /, …).

Les règles de base a et b sont non récursives, tandis que la règle c définit des expressions
composées d’autres expressions.

Exemple : Y := A*X**2 + B.
:=

Y *

A **

X 2

B
Figure I.1. Arbre abstrait pour Y := A*X**2 + B.

2
I. Introduction à la Compilation. 2ème Cours.

Instruction d’affectation :=

Expression Expression
Identificateur (Y) (*)
Expression Expression
Identificateur (A) (**)
Expression Expression
Identificateur (X) Nombre (2)
Expression
(+)

Expression
Identificateur (B)

Figure I.2. Arbre syntaxique pour Y := A*X**2 + B.

L’arbre syntaxique est une représentation interne du programme source qui décompacte
l’arbre abstrait du même programme source, il est composé des nœuds internes (opérateurs)
et des fils du nœud (opérandes).

1. Analyse sémantique contrôle si le programme source contient des erreurs sémantiques


et collecte des informations de type pour produire le code objet. Elle identifie les
opérateurs, les opérandes des expressions et les instructions. Un contrôle important
dans cette analyse est la vérification du type, par exemple :
- Indicer un tableau par un nombre réel,
- Affecter un réel à un entier,
- Utiliser une variable non déclarée,
- … etc.

3
I. Introduction à la Compilation. 2ème Cours.

Exemple d’application :
Position := Initiale + Vitesse * 60

1- Analyse lexicale :
Id1 := Id2 + Id3 * 60
Position est le lexème de Id1.
Initiale est le lexème de Id2.
Vitesse est le lexème de Id3.

2- Analyse syntaxique : :=

Id1 +

Id2 *

Id3 60

3- Analyse sémantique : :=

Id1 +

Id2 *

Id3 EntierVersRéel

60
4- Générateur de code intermédiaire :
Temp1 := EntierVersRéel (60)
Temp2 := Id3 * Temp1
Temp3 := Id2 + Temp2
Id1 := Temp3

5- Optimiseur de code :
Temp1 := Id3 * 60.0
Id1 := Id2 + Temp1

6- Générateur de code :
MOVF Id3, R2
MULF #60.0, R2
MOVF Id2, R1
ADDF R2, R1
MOVF R1, Id1

4
I. Introduction à la Compilation. 2ème Cours.

Chaque langage de programmation peut être défini par une syntaxe basée souvent sur une
grammaire non contextuelle (BNF : Backus-Naur Form) qui peut diriger la traduction des
programmes sources, cette technique est appelée traduction dirigée par la syntaxe et par une
sémantique en utilisant des descriptions informelles et des exemples.

Dans une compilation à une passe, l’entrée est un flot de caractères et la sortie est une
représentation intermédiaire du programme source (voir figure suivante).

Flot de Flot d’Unités Représentation


Analyse Lexicale
Caractères Lexicales Analyse Syntaxique
Intermédiaire
Traduction dirigée par la syntaxe

Figure I.3. Compilation à une passe.

• La syntaxe d’un langage.


Elle est définie par une grammaire non contextuelle qui est un ensemble de règles de
production.
Exemple :
En PASCAL, on écrit : IF conditions THEN instructions [ELSE instructions]
[…] : Pour dénoter l’optionalité de cette partie.

Sa règle est : instruction → IF conditions THEN instructions [ELSE instructions]


Où :
→ Signifie : « peut avoir la forme ».
Les mots clés : IF, THEN et ELSE sont appelés unités lexicales (Symboles terminaux).
Les variables : instruction, conditions et instructions sont appelées non terminaux.

Notations :
- Les chiffres, les caractères spéciaux (=, >, !, …) et les chaines en gras comme IF sont
des terminaux.
- Un nom en italique dénote un non terminal.
- Tout nom ou symbole qui n’est pas en italique est supposé être unité lexicale.
- A gauche de la flèche (non terminal) est appelé partie gauche de la règle de
production, à droite de la flèche (non terminaux, unités lexicales) est appelé partie
droite de la règle.
- L’axiome est le commencement d’une grammaire.
- La chaine de zéro unité lexicale, notée ɛ, est appelée chaine vide.

• Arbre syntaxique.
Soit une grammaire non contextuelle, les propriétés d’un arbre syntaxique sont les
suivantes :
- L’axiome de la grammaire étiquette la racine.
- Chaque feuille est étiquetée par une unité lexicale ou par ɛ.
- Chaque nœud intérieur est étiqueté par un non terminal.
- Soit A un nœud intérieur avec ses nœuds fils X1, X2, …, Xn (de gauche à droite), on
aura la règle de production suivante : A→X1, X2, …, Xn (X1, X2, …, Xn peuvent être des
terminaux ou des non terminaux).

Vous aimerez peut-être aussi