Diapo Compilation Smi
Diapo Compilation Smi
FS Agadir SMI5-LPII
Sommaire Objectifs
Définition et concepts généraux
Comprendre les concepts et les notions de l'analyse lexicale 1 : Les langages de programmation
Expressions régulières Définition d’un traducteur
Comprendre les concepts et les notions de l'analyse lexicale 2 : Les Schéma simple d'un traducteur
automates Chapitre 1 Structure de principe d'un compilateur
Analyse lexicale : Transformation de l'expression régulière en automate
Comprendre les concepts et les notions de l'analyse lexicale 4 : Définitions et concepts généraux Analyse lexicale : lexèmes
Transformation AFND AFD Analyse syntaxique
Analyse syntaxique 1 Analyse sémantique
Grammaire et dérivations Contexte d’un compilateur : pré -processeurs, assembleur,
Arbre syntaxique et approches d'analyse éditeur de liens
Analyse prédictive et Grammaire LL Compilateur croisé
Analyse Ascendante
4 6
Les raisons d'être du cours Processus simplifié de traduction Objectifs d'un traducteur
– Architecture des ordinateurs (structure de processeur) & programmation Début de l'informatique
assembleur Programmation par langage machine
– Programmation avec des langages de haut niveau (VB, C)
Manipulation de code numérique binaire ou hexadécimal
– Lien entre les deux ?
Un langage de programmation sert à créer des programmes destinés au
Programmation très difficile, fastidieuse et présente beaucoup
processeur
d'inconvénients.
Processeur ne comprend que le binaire
Besoin de traducteurs
7 8 9
1
Inconvénients de la programmation machine Programmation assembleur Programme assembleur
Représentation du code numérique par des symboles mnémonique plus expressifs. Programme qui traduit des instructions écrites en langage
- Forte exposée aux erreurs
mov,add… d'assemblage en code machine.
- Difficulté à détecter les erreurs Mais, la machine ne comprend que le langage machine.
- Difficulté de comprendre le programme Naissance de traducteur : programme assembleur.
- Maintenance de programme très difficile
- Nbre de programmeurs très limité
- Manque de structures de contrôle et structures de données
- Manque de portabilité
10 11 12
FS Agadir SMI5-LPII
Limite de la programmation assembleur Classification des langages évolués Langages de haut niveau ou langages évolués
- Non portable Cette classification est due à la manière d’écrire des programmes dans Ce type de langages présentent beaucoup d'avantages
ces langages. - Portabilité
- Absence de structures de contrôles
- Langages procéduraux
- Manque de structures de données - Utilisation des mots proches du langage humain
- Langages à base objets
- Utilisation des structures de contrôle et structures de données
- etc. - Langages orientés objets
- Facile à apprendre
Naissance des langages de haut niveau ou langage évolué - Langages orientés objets pilotés par les événements
- Langages de programmation déclarative
- Présente un aspect modulaire (moins de couplage entre les
modules)
- Langages de programmation fonctionnelle
- Maintenance facile
13 14 15
Naissance de traducteurs
Définition d’un traducteur Schéma simple d'un traducteur
Programme écrit en LHN ne peut être exécuté
par un processeur. Un traducteur est un programme qui
Nécessité de traducteurs= compilateurs prend en entrée un programme écrit dans un langage A (dit
langage source : S)
et le traduit en un autre programme écrit dans un autre
langage B (dit langage cible C).
PcB doit être équivalent à PsA
16 17 18
2
Remarque Langages source Langages cible
- Langage source d'un traducteur est un langage de Langage cible : langage de programmation qlq,
- Au cours de cette traduction, le traducteur doit détecter les programmation évolué ou langage intermédiaire :
erreurs dans le programme source. - pascal, C,
- Assembleur
- Le traducteur doit conserver le sens (la sémantique) du - Assembleur - Langage binaire…
programme source. - Arbre
19 20 21
FS Agadir SMI5-LPII
Langage du traducteur
22 23 24
25 26 27
3
Exercice 2
Réponse Réponse
On suppose qu'on dispose d'un traducteur de la forme
PAss | TAssAssMachine TPascalCMachine|TCMachineMachine= TPascalMachineMachine
TCMachineMachine
et on veut écrire un traducteur en langage machine pour
convertir un programme pascal en programme machine.
Expliquer comment peut-on faire pour réaliser ce traducteur
(quel est le traducteur à combiner avec celui en haut pour
obtenir TPascal Machine Machine )
28 29 30
FS Agadir SMI5-LPII
31 32 33
34 35 36
4
Analyse lexicale Exemple Exercice
Extraire les mots du texte du programme à partir d'une suite pour le texte Quels sont les lexèmes pour le texte suivant :
de caractères.
a=b+1 while (i>=1)
Ces mots sont dits lexèmes (instances d’unités lexicales).
on a les lexèmes suivants
a, = , b, + , 1.
37 38 39
FS Agadir SMI5-LPII
Exemple
Chercher les lexèmes (instances d'unités lexicales) dans Analyse syntaxique Considérons la définition d'expression suivante (grammaire):
for i= 1 to n Dans cette analyse, le traducteur regroupe les unités lexicales obtenues - Tout nombre est une expression,
de l'analyse lexicale et vérifie si elles représentent des expressions
j=j+i syntaxiquement correctes ou non (construit un arbre syntaxique
- Tout identificateur est une expression,
next i d’analyse ou arbre d’analyse). - Si a et b sont des expressions alors
a + b est une expression,
- Si a et b sont des expressions alors
a * b est une expression.
40 41 42
43 44 45
5
Analyse sémantique Exemple Génération de code intermédiaire
Dans cette phase d'analyse le traducteur vérifie par exemple le int a,b=2,c=1; - Arbre abstrait (une représentation hiérarchique d’une expression)
type de données des variables mises en jeu dans une a=b+c; - Code à trois adresses
opération.
46 47 48
FS Agadir SMI5-LPII
Exemple de code à trois adresses Exercices donner le code à trois adresses de Exemple d’arbre abstrait
La formule La formule
a=b+3*c+1;
a=b*3+c; a+3
devient d=h*2+d*3
possède l’arbre abstrait
x=b*3;
a=x+c;
49 50 51
52 53 54
6
Génération de code Interpréteur Exemples
Code écrit en langage d'assemblage. Traducteur qui ne génère pas de code machine ( programme - php
exe).
add, move… - javascript
add r1, r2, r3
mul r4, r1, r2
55 56 57
FS Agadir SMI5-LPII
58 59
61 62 63
7
Phase de lecture Phase d'analyse lexicale Schéma analyseur lexical
Extraction des caractères + suppression des blancs, fin de Reconnaissance des mots ou des lexèmes en utilisant
ligne, des tabulations , des commentaires = phase des modèles ou des spécifications
préliminaire
64 65 66
FS Agadir SMI5-LPII
67 68 69
70 71 72
8
Longueur de chaîne Exemple Exercice
Longueur de chaîne = Le nombre d'occurrences Alphabet : A={a,c,d}
de symboles de l'alphabet dans la chaîne. Chercher la longueur des chaînes suivantes:
Chaîne : S=acda
- Notation - A={a,b,c,d,1,2} , S=ab
|S|=4
|ch| donne la longueur de ch. - A={ab,c,k,d}, S=abckd
73 74 75
FS Agadir SMI5-LPII
76 77 78
79 80 81
9
Exemples Exercice Exercice
Alphabet : A={0,1} A={0,1} A={0,1,2…9}
L={0,1,11,10} L=langage? L=langage?
82 83 84
FS Agadir SMI5-LPII
85 86 87
88 89 90
10
Union des langages Exemple Fermeture d'un langage
Soit L1 et L2 deux langages alors Nous donnons L1={a,b} et L2={a,c} Soit L un langage, la fermeture de L est donnée par
l'union de L1 et L2 notée Chercher L1 U L2. L*= U Li avec i=0,1…
L1 U L2 est donnée par
L1 U L2={X/ X de L1 ou X de L2}
91 92 93
FS Agadir SMI5-LPII
94 95 96
97 98 99
11
Exercices Exercice Réponse
- Chercher L+ sachant que L={ab} Soit A et L des langages / ID={id/ id de LA*}
- Chercher L+ sachant que L={a,b} A={lettres, chiffres} et L={lettres}
Donner l'expression du langage ID représentant les
identificateurs.
FS Agadir SMI5-LPII
12
Expressions régulières E.R.(description des mots du langage) Expressions régulières E.R.(description des mots du langage)
Définition
Exercice Objectifs Soit A un alphabet, une expression régulière est donnée par :
Chercher les lexèmes et les unités lexicales dans Une E.R. est une notation utilisée pour spécifier ou décrire un - ε est une E.R. qui désigne le langage {ε}
langage.
le programme suivant : - si a est un élément de A alors a est une E.R. qui désigne {a}
Une E.R. est donnée à base d'un alphabet. - si X est une E.R. qui désigne L alors (X)* est une E.R. qui désigne L*
int max(int i,int j) Une E.R. décrit les unités lexicales d'un langage. - si X est une E.R. qui désigne L alors (X)+ est une E.R. qui désigne L+
{ - si X et Y sont des E.R. qui désignent Lx et Ly alors (X)|(Y) désigne Lx u Ly.
- si X et Y sont des E.R. qui désignent Lx et Ly alors (X)(Y) désigne LxLy
return i>j?i:j;
}
FS Agadir SMI5-LPII
Exemples Chercher les langages désignés par chacune des E.R. suivantes : Réponses
Soit A={a,b} un alphabet - a* - a* L={ε, a, aa, aaa, …}
- a(a)* - a(a)* L={a, aa, aaa, …}
- (a|b)*
- a|b - a|b L={a, b}
- (a*|b*)*
- a|ba* - a|ba* L={a, b, ba, baa, …}
- (a)|((b)*(c))=a|b*c - (aa)*a - (aa)*a L={a, aaa, aaaaa, …}
13
Opérations sur les E.R. Écrire une expression régulière qui décrit les Réponses
Soit X, Y, Z des E. R. alors on a les propriétés lexèmes suivants, nous prenons A={a,b}: 1) b(a|b)*
algébriques suivantes: : 1) les mots qui commencent par b. 2) (b|a)*a
- X|Y=Y|X 3) (b|a)a+
2) les mots qui se terminent par a.
- X|(Y|Z)=(X|Y)|Z 4) (b|a)*b(aa)+
- X(YZ)=(XY)Z 3) les mots qui se terminent par un nombre qlq de a. 5) b*ab*ab*
- X(Y|Z)=XY|XZ 4) les mots qui se terminent par un nombre pair de a. 6) (a|b)*a(a|b)*a (a|b)*
- (X|Y)Z=XZ|YZ 5) les mots contenant exactement 2a.
- Xε= εX=X 6) les mots contenant au moins 2a.
FS Agadir SMI5-LPII
14
Exercices
Réponse Remarques
1) Chercher l'expression régulière étendue pour les
1) [0-9] Dans l'écriture des expressions régulières, on doit
identificateurs.
2) [A-Z]
2) Chercher l'expression régulière étendue pour les prendre en considération la priorité et
3) [a-zA-Z] nombres entiers. l'associativité (à droite) des opérateurs
- *, +
- ?
- |
FS Agadir SMI5-LPII
Objectifs
Résumé
Objectifs de l’analyse lexicale Automate
Analyse préliminaire Automate fini déterministe
Chapitre 3
Alphabet et langage Implémentation d'un automate
Comprendre les concepts et les notions de l'analyse
Opérations sur les langages lexicale 2
Les unités lexicales, lexèmes et modèles Les automates
Les expressions régulières
Opérations des expressions régulières
133 135
15
Liens automate/E.R./langage
Exemple Nous considérons le schéma suivant
Les automates finis A.F.
Soit L un langage défini par une E.R. Langage des identificateurs est défini par la
Soit x une chaîne. définition régulière ID donnée par
Est ce que x appartient à L? ID Lettre(Lettre|Chiffre)+
Est ce que les chaînes suivantes font partie du
Moyen pour reconnaître les chaînes de L?
lexique de ID?
Automates finis =A.F.
- surface
- x1
- 1y
FS Agadir SMI5-LPII
Automate fini : AF
AF = 5-uplets (E, A, T, I, F), avec Exemple
Représentation graphique d’un automate
- E=ensemble fini d'éléments appelés des états; - E={e1, e2, e3} =ensemble composé de 3 états État initial : 3 façons
- A=ensemble de symboles qui forment les mots ou les - A={a1, a2} =alphabet avec 2 symboles
chaînes=Alphabet; - I={e1} est l'état initial Nom état initial
- T=fonction de transitions qui associe à chaque paire de E x A - La fonction de transitions est définie par
un élément de E T(e1, a1)= {e2} 0
T: E x A E T(e1,a2)={e3}
- I=état initial appartenant à E (début de l'automate);
- F={e2,e3} ensembles des états terminaux. i
- F=ensemble non vide des états terminaux ou finaux
(terminaison de l'automate).
Nom intermédiaire
16
Remarque
Exemple de représentation graphique Donner la représentation graphique de l'automate
l'automate suivant : suivant :
-E={e1, e2, e3} =ensemble composé de 3 états
-A={a1, a2} =alphabet avec 2 symboles -E={e1, e2, e3} =ensemble composé de 3 états
-I={e1} est l'état initial -A={a, b} =alphabet avec 2 symboles
-I={e1} est l'état initial
-La fonction de transitions est définie par -La fonction de transitions est définie par
T(e1,a1)= {e2} T(e1, a) = {e2}
T(e1,a2)={e3} T(e1,b) = {e3}
-F={e2,e3} ensembles des états terminaux T(e2,b) = {e3}
Représentation graphique permet de reconnaître les chaînes a1 et a2. -F={e2,e3} ensembles des états terminaux.
Quelles sont les chaînes reconnues par cet
automate?
FS Agadir SMI5-LPII
Donner la représentation graphique de l'automate suivant : Donner la représentation graphique de l'automate suivant :
Donner la représentation graphique de l'automate -E={e1, e2, e3} =ensemble composé de 3 états -E={e1, e2, e3} =ensemble composé de 3 états
suivant : -A={a, b} =alphabet avec 2 symboles -A={a, b} =alphabet avec 2 symboles
-I={e1} est l'état initial -I={e1} est l'état initial
-E={e1, e2, e3} =ensemble composé de 3 états -La fonction de transitions est définie par -La fonction de transitions est définie par
-A={a, b} =alphabet avec 2 symboles T(e1, a) = {e2} T(e1, a) = {e2}
T(e1,b) = {e3} T(e1,b) = {e3}
-I={e1} est l'état initial T(e2,b) = {e3}
-La fonction de transitions est définie par
T(e1, a) = {e2}
Donner la représentation graphique de l'automate suivant : Donner la représentation graphique de l'automate suivant : Donner la représentation graphique de l'automate suivant :
-E={1, 2, 3} =ensemble composé de 3 états -E={1, 2, 3} =ensemble composé de 3 états -E={1, 2, 3} =ensemble composé de 3 états
-A={a, b} =alphabet avec 2 symboles -A={a, b} =alphabet avec 2 symboles -A={a, b} =alphabet avec 2 symboles
-I={1} est l'état initial -I={1} est l'état initial -I={1} est l'état initial
-La fonction de transitions est définie par -La fonction de transitions est définie par -La fonction de transitions est définie par
T(1, a) = {2} T(1, a) = {2} T(1, a) = {2}
T(1,b) = {3} T(2,b) = {3} T(2,b) = {3}
T(3,b) = {3} T(3,b) = {3} T(3,a) = {2}
-F={2,3} états terminaux. -F={3} état terminal. -F={3} état terminal.
Quelles sont les chaînes reconnues par cet automate? Quelles sont les chaînes reconnues par cet automate? Quelles sont les chaînes reconnues par cet automate?
17
Donner la représentation graphique de l'automate suivant :
FS Agadir SMI5-LPII
blanc
buffer=&Buffer[0];
while(1) {
Cas d'un entier c = lireChar();
switch(etat){
Implémentation d'un A.F. case: 0
switch(type(c)){
chiffre - Programme buffer*=c;buffer++;
case ALPHA: etat=1;break;
- Matrice de transitions case NUMER: etat=2;break;
case OPARITH-{/}: etat=3; break;
chiffre 1 case '<': etat=4; break;
case '>': etat=6; break;
0 case '=': etat=8; break;
case ':': etat=9; break;
blanc case ';': etat=11; break;
case '/': etat=12; break;
default: erreur;
}
break;
case 1:
if (type(c) == ALPHA ou type(c) == NUMER) {
buffer*=c;buffer++;
etat=1;
}
else {
buffer*='\0'; remettreCar();
return(ajouter_token(Buffer,TYPE_IDENT));
}
break;
160 161 162
18
break; Automate avec un programme
case 2:
if (type(c) == NUMER){ Cas d'une matrice de transitions buffer=&Buffer[0];
buffer*=c;buffer++; while(1) {
etat=2; a e2 c = lireChar();
} switch(etat){
e1
else { case: 0
b e3
buffer*='\0';remettreCar(); switch(c){
return(ajouter_token(Buffer,TYPE_NUMER));
} case 'a': etat=1;break;
break; case 'b': etat=2;break;
case 3: états a b default: erreur;
return(ajouter_token(Buffer,TYPE_OPER)); break; }
case 4:
if (c == '=') {
e1 e2 e3 break;
case 1:
buffer*=c;buffer++;
etat = 5; e2 return(ajouter_token("a"));
} else {
remettreCar(); case 2:
return(est-dans("<")); e3 return(ajouter_token("b"));
} …
…
163 164 165
FS Agadir SMI5-LPII
Résumé
Objectifs
Automate
Automate fini déterministe
Automate fini déterministe
Automate fini non déterministe
Implémentation d'un automate Chapitre 4
Transformation d'une expression
Transformation de l'expression régulière en
régulière en automate fini non
automate
déterministe
19
Exercice
Contre-exemple (AFND) Exemple ((a|b)*cb) Chercher un automate pour
b (a|b)*abb
c 1 b
b
0 2
a 1 b
0 2 a
FS Agadir SMI5-LPII
N(Y) N(X) f
N(X) f i ε ε
i
Construire pour l'expression X|Y l'automate défini par ε
fin algo.
ε N(X) ε
i f
ε N(Y) ε
20
ou bien pour X*
ε
Exercices Exercices
- Construire un AFND correspondant à l'ER - Construire un automate fini pour le langage
i ε N(X) f X=abb. binaire.
fin algo. ε - Construire AFND pour l'ER a|b. - Chercher un automate qui décrit l'E.R. (ab|ba)*
- Chercher l’AFND de a+ - Chercher un automate qui décrit l'E.R. (ab|ba)+
- Construire AFND pour l'ER Y=(a|b)*. - Chercher un automate pour les nombres
- Construire AFND pour l'ER Z=XY. binaires où chaque 1 est suivi directement de 0;
FS Agadir SMI5-LPII
Résumé
Travail à faire
Automate fini déterministe
Suite du micro compilateur de C: Automate fini non déterministe
Reconnaissance des id , des constantes Transformation d'une expression régulière en automate Chapitre 5
numériques (commencer par les constantes fini non déterministe
entières) et des opérateurs. Comprendre les concepts et les notions de l'analyse
lexicale 4
Transformation AFND AFD
184 185
Rappel
Objectifs
Transformation d'automate non déterministe en automate AFD & AFND
déterministe Comment peut-on passer d’un AFND à un AFD?
Générateur d’analyseur lexical Notion de ε-fermeture
Soit x0 un état
ε-fermeture(x0) est l'ensemble des états que l'on peut atteindre à
partir de x0 en utilisant des transitions ε.
x0 peut être composé de plusieurs états.
21
Exemple 1 Exemple 1(réponse) Exemple 2
b b b
ε 1 b ε 1 b ε 1 b
0 2 0 2 0 2
ε
a a a
FS Agadir SMI5-LPII
Résumé
Exemple Transformation d'automate non déterministe en automate
Transformer l'AFND en AFD Réponse déterministe
ε 2 a S2 b
Générateur d’analyseur lexical
1 5 S1 a S3
a b a b
a
a a
3 4 S4
b
22
Objectifs Définition de la syntaxe(rappel)
Analyse syntaxique L'analyse syntaxique (parsing) est une tâche fondamentale d'un
Grammaire non contextuelle compilateur, ses objectifs incluent:
Terminaux - Réception des mots (lexèmes) fournis par l’analyseur lexical
Non Terminaux - Rassemblement de ces mots en phrases (instructions) ;
Chapitre 6 Productions - Vérification de la syntaxe de ces phrases ;
Analyse syntaxique 1 Axiome - Construction des représentations de ces phrases (paires d'unités lexicales
et lexèmes) correctes en termes d'arbres syntaxiques ou arbres d'analyse.
200 201
FS Agadir SMI5-LPII
+ a 1
expression expression
ID INT
a 1
23
Objectifs d'une grammaire Pourquoi une grammaire? (1/3) Pourquoi une grammaire?(2/3)
Une grammaire est un ensemble de règles pour décrire la manière de (1) Spécification
former des phrases (instructions) et des programmes dans un langage.
(1) Spécification
et
- Spécification précise de la syntaxe du langage de programmation
(2) Reconnaissance
- Spécification compréhensible et claire de la syntaxe du langage de
programmation
FS Agadir SMI5-LPII
24
Exemple Remarque Exercice
Dans la grammaire suivante : Dans une grammaire les terminaux ne figurent pas à gauche Préciser les terminaux de la grammaire suivante :
expr→ expr + expr des règles. S → (L) | a
expr→ expr - expr L → L,S | S
expr→ expr * expr
expr→ ID
expr→ INT
les terminaux sont :
T = {+, - , *, ID, INT}
FS Agadir SMI5-LPII
25
- Grammaire hors contexte (GHC) (4)
Utilisation des règles Exemples de règles
- La règle : expr→ expr + expr
s → s1 s2 s3… expr→ ID Terminaux(T), Non-Terminaux(NT),
Signifie que, pour produire la syntaxe s il faut expr→ INT Production(P) et Axiomes (S)
avoir ou produire s1 suivi de s2…
- Axiome (S)=Symbole de départ non terminal
- On peut aussi dire que s se dérive (de gauche à droire) en s1 s2…
représentant le langage (figurant à gauche de la
- ou encore
première production) =S
s1 s2 s3 … se réduit (de droite à gauche) en s
FS Agadir SMI5-LPII
Exercice de GHC Exemple de GHC(suite) Une autre façon de représenter les productions
Considérons la grammaire définie par les productions La représentation suivante, par
T={ ID, NB, +, -, *}
expr→expr + expr factorisation de expr:
NT={expr} expr→ expr+expr | expr – expr | expr*expr | ID | INT
expr→expr - expr
expr→expr * expr S={expr} remplace
expr→ID
expr→expr + expr
expr→INT expr→expr - expr
expr→expr * expr
Chercher les T,NT et S. expr→ID
expr→INT
26
Résumé Objectifs
Analyse syntaxique Analyseur syntaxique et grammaire
Grammaire non contextuelle Dérivations
Terminaux Sentence
Non Terminaux Chapitre 7 Forme sententielle
Productions Grammaire et dérivations
Axiome
235 237
FS Agadir SMI5-LPII
27
Exemple de dérivation Exemple Exemple
Considérons la grammaire Considérons la grammaire Considérons la grammaire
expr→-expr|(expr)|expr+expr|expr–expr|expr*expr |ident |nbre expr→-expr|(expr)|expr+expr|expr–expr|expr*expr |id|int expr→-expr|(expr)|expr+expr|expr–expr|expr*expr |ID |INT
A partir des productions ci-dessus, on peut faire la dérivation suivante : A partir des productions ci-dessus, on peut faire la dérivation suivante : A partir des productions ci-dessus, on peut faire la dérivation suivante :
expr ═> -(id) ? expr ═> ID+INT ?
expr ═> (expr) car car
expr ═> -expr expr ═> expr+expr
═> -(expr) ═> ID+expr
═> -(id) ═> ID+INT
FS Agadir SMI5-LPII
28
Exemple de forme sententielle : FS Remarque Dérivation la plus à gauche et la plus à droite
expr ═> expr+expr FS X une est chaîne en FS si S ═ >+ X et X peut contenir des éléments de Processus de dérivation
═>ID+expr FS NT U T. présence peut être de plus d'un symbole non terminal.
═> ID+INT S choix du symbole à développer
Les expressions en couleur verte sont des formes sententielles le plus à gauche ou le plus à droite.
- Choix du symbole le plus à gauche dérivation la plus à gauche.
- Choix du symbole le plus à droite
dérivation la plus à droite.
FS Agadir SMI5-LPII
29
Objectifs
Arbre syntaxique ou de dérivation (parse tree)
Arbre syntaxique
Définition
Analyse ascendante
Arbre syntaxique est un arbre
Analyse descendante
- de racine axiome,
Chapitre 8 Factorisation de grammaire
Arbre syntaxique et approches d'analyse - de feuilles des symbole grammaticaux
Grammaire récursive (terminaux) ou ε .
- de nœuds des non terminaux.
263 264
FS Agadir SMI5-LPII
Exemple
Exemple d’arbre syntaxique Arbre syntaxique ou de dérivation (parse tree)
Soit la grammaire :
expr→ expr+expr | expr – expr | expr*expr | ID | INT Objectifs : liste→liste+liste|liste-liste|0|1…|9
L’expression ID + INT obtenue par les dérivations :
Donner l'arbre syntaxique de 2+6-1 relativement à cette grammaire.
expr ═> expr+expr ═> ID+expr ═> ID+INT
(1) Montre comment un axiome se dérive en une phrase ou
a l’arbre syntaxique
instruction du langage.
expr (axiome)
ID(T) INT(T)
Exemple Exercice 1
Réponse Réponse (suite) Soit la grammaire suivante :
On commence par faire les dérivations de l’axiome liste jusqu’à liste s → s s + |s s* | a
obtenir la phrase 2 + 6 -1
Donner l'arbre de syntaxe de la chaîne
liste ═> liste-liste liste aa+a*
═> liste+liste -liste
liste
liste liste
═> 2+liste-liste
═> 2+6-liste
nbre nbre nbre
═> 2+6-1
L'arbre syntaxique de cette expression est 2 + 6 - 1
30
Exercice 2 Processus d'analyse syntaxique Analyse descendante
Soit la grammaire : Deux approches: On construit l'arbre syntaxique en partant de l'axiome
expr→-expr|(expr)|expr+expr|expr–expr|expr*expr |ID |INT - Analyse syntaxique descendante jusqu'aux feuilles en utilisant des dérivations.
Donner l'arbre syntaxique de la chaîne INT*INT+INT. - Analyse syntaxique ascendante
FS Agadir SMI5-LPII
═> 2+liste-liste
═> 2+6-liste liste
page suivante.
31
Analyse syntaxique descendante (top-down) Analyse descendante & backtracking Analyse descendante & backtracking(suite)
Une chaîne d'unités lexicales w respecte la syntaxe du - Exemple
langage L(S) si on les dérivations suivantes : Soit la grammaire G définie par :
s s
(1) S → cAd
(2) A → ab|a ═> échec
S ═> A1 c
Soit l'ensemble des terminaux T={c, d, a, b}. c
A d A d
═> A2
Montrons que la chaîne "cad" est une phrase du langage défini par
… G. a b
═> w
═> backtracking
FS Agadir SMI5-LPII
32
Réponse Récursivité à gauche Exemple de récursivité gauche
Donner la dérivation gauche cad dans cette grammaire. Soit G une grammaire. Soit la grammaire G définie par
G est dite récursive à gauche si elle contient un non terminal A tel que
S → cAd (1) l → l+chiffre
A =>+ A C
A → aB (2) l → chiffre
La récursivité à gauche peut entraîner une boucle infinie.
B→ b|ε (3) chiffre→0|1|2…
La dérivation s'obtient par Cherchons à dériver la chaîne suivante :
S ═> cAd 2+3+1
═>caBd
═>cad
FS Agadir SMI5-LPII
33
Dérivations de nbre*nbre+nbre Exercice Réponse (exercice )
Éliminer la récursivité gauche de la grammaire E→TE'
E → nbre E' suivante E'→+TE'|ε
E' → op nbre E' | ε E → E+T T→FT'
op → + | - | * | / E→T T'→*FT'|ε
E => nbre E' T → T*F F→(E) | nbre|id
=> nbre op nbre E' T→F
=>nbre * nbre E' F →(E)|nbre|id
=>nbre * nbre op nbre E'
=>nbre * nbre + nbre E'
=> nbre * nbre + nbre
298 299 300
FS Agadir SMI5-LPII
34
Exercice Résumé
Éliminer la récursivité gauche de la grammaire suivante: Arbre syntaxique
A→ Ac | Aad | bd
Analyse ascendante
Analyse descendante
Factorisation de grammaire Chapitre 9
Grammaire récursive Analyse prédictive et Grammaire LL
FS Agadir SMI5-LPII
35
Exemple 2 Réponse Exemple 3
Calcul de premier de A premier(A)={c, ε} Calcul de premier de S
S→Ab S→AB
A→cd|ε A→cd|ε
B→b|ε
S=>AB=>cdB;
S=>AB=>εB=B
S=>AB=>εB=ε
FS Agadir SMI5-LPII
si X є NT alors
premier (S) comprend premier(A) premier(X)=Ø;
si X→aA est une prod alors premier(X)={a} u premier(X)
si X→a est une prod alors premier(X)={a} u premier(X)
si X→ε est une prod alors premier(X)={ε} u premier(X)
si X→Y1Y2…YK est une prod (appliquée aussi à une chaîne) alors
premier(X)=(premier(Y1)-{ε}) u premier(X)
si ε є premier(Yi) i=1→ k-1 alors
premier(X)=(premier (Yi+1)-{ε}) u premier(X)
si ε є premier(Yk) alors
premier(X)={ε} u premier(X)
fin.
319 320 321
36
Exercice Réponse symbole premier
Réponse symbole premier Chercher premier pour les symboles de la grammaire S→aSe
S→ABc suivante: S a, b, c, d
a {a} S→B
A→a | ε S→aSe B b, c, d
b {b}
B→bBe
B→b | ε S→B
B→C C c, d
Exercice c {c} B→bBe
C→cCe
Calculer premier(Bc). A {a,ε} B→C
C→d
Réponse B {b,ε}
C→cCe
premier(Bc)={b,c} C→d
S {a,b,c}
FS Agadir SMI5-LPII
37
Réponse Algorithme de calcul de suivant
Exemple d’application
suivant(X)
suivant(A)={d,c}. début Chercher suivant(X) pour la grammaire suivante :
si X=S(axiome) alors S→ABc
suivant(X)={ε} //initialisation A→a | ε
sinon B→b | ε
suivant(X)=Ø //initialisation
si A→…XB est une prod alors
suivant(X)=suivant(X) u premier(B)
si A→…X est une prod alors
suivant(X)=suivant(X) u suivant(A)
Fin.
334 335 336
FS Agadir SMI5-LPII
Exemple d’application
Réponse symbole suivant Chercher suivant(X) pour la grammaire suivante : Réponse symbole suivant
S→ABc A b, c S→ABC S→ABC A b, c, ε
A→a | ε A→a | ε A→a | ε
B c B c, ε
B→b | ε B→b | ε B→b | ε
S ε C→c | ε C→ c | ε S ε
C ε
38
Exemple de calcul de la table d’analyse M
Exemple symbole premier suivant M[NT][t]="NT→X1X2…" si t є prédic on(NT→X1…)
(1) S→ABc A a,ε b,c Calcul de la table d’analyse M
NT/T a b c
(2) A→a M[NT][t]=ordre(NT→X1X2…) si t є prédic on(NT→X1…)
B b,ε c S S→ABc S→ABc S→ABc
(3) A→ε
S a,b,c ε ou bien A A→a A→ε A→ε
(4) B→b (5) B →ε
B B→b B →ε
production prédiction M[NT][t]="NT→X1X2…" si t є prédic on(NT→X1…) prod prédiction
(1) S→ABc premier(ABc)={a,b,c}
(1) S→ABc premier(ABc)={a,b,c}
(2) A→a premier(a)={a}
(2) A→a premier(a)={a}
(3) A→ε (premier(ε)-{ε}) u suivant(A)=suivant(A)={b,c}
(3) A→ε (premier(ε)-{ε}) u suivant(A)=suivant(A)={b,c}
(4) B→b premier(b)={b}
(4) B→b premier(b)={b}
(5) B →ε (premier(ε)-{ε}) u suivant(B)=suivant(B)={c} (5) B →ε (premier(ε)-{ε}) u suivant(B)=suivant(B)={c}
343 344 345
FS Agadir SMI5-LPII
39
Exercice Les symboles lookahead Les grammaires LL(1)
Analyser les chaînes Le choix d'une production pour avancer dans L= left to right scanning
- ac l'analyse de la chaîne d'entrée exige un L=leftmost derivation
- bc symbole de cette chaîne d'entrée. 1=un seul symbole d’entrée pour la prévision à
Ces symboles sont appelés des lookahead. chaque étape.
Puisqu’on se contente d’un seul symbole, on une grammaire de type LL(1) a une table
parle de lookahead (1) d’analyse sans entrée multiple.
FS Agadir SMI5-LPII
Caractéristiques des grammaires LL(1) Caractéristiques des grammaires LL(1) Caractéristiques des grammaires LL(1)
- Une grammaire RAG n’est pas LL(1). - Une grammaire RAG n’est pas LL(1). - Une grammaire ambiguë n’est pas LL(1).
- Une grammaire ambiguë n’est pas LL(1). Liste Liste +Nb S S + S
- Une grammaire est LL(1) SI Liste Nb S S * S
pour toute A→B|C Nb [0-9] S a
- B et C ne se dérivent pas tous les deux en Dérivation de la chaîne a*a+a
chaînes commençant par un même terminal a.
- Soit B, soit C se dérive en ε
- Si B=>*ε alors C ne se dérive pas en une chaîne
commençant par un terminal de suivant(A).
Caractéristiques des grammaires LL(1) Caractéristiques des grammaires LL(1) Caractéristiques des grammaires LL(1)
- Une grammaire est LL(1) SI - Une grammaire RAG n’est pas LL(1). - Une grammaire est LL(1) SI
pour toute A→B|C - Une grammaire ambiguë n’est pas LL(1). pour toute A→B|C
- B et C ne se dérivent pas tous les deux en - Une grammaire est LL(1) SI - Soit B, soit C se dérive en ε
chaînes commençant par un même terminal a. pour toute A→B|C S A|B
- B et C ne se dérivent pas tous les deux en AbA|Ɛ
S aA|a chaînes commençant par un même terminal a. BƐ
AbA|b - Soit B, soit C se dérive en ε
- Si B=>*ε alors C ne se dérive pas en une chaîne
commençant par un terminal de suivant(A).
40
Caractéristiques des grammaires LL(1) Exercice
- Une grammaire est LL(1) SI Exercice
La grammaire suivante est-elle LL(1)? La grammaire suivante est-elle LL(1)?
pour toute A→B|C
S→Ab S→Ab
- Si B=>*ε alors C ne se dérive pas en une chaîne
commençant par un terminal de suivant(A). A→a A→a
Aε|c
A→aB A→B
AaAc A→ε
A→ε
B→b B→b
B→ε. B→ε.
FS Agadir SMI5-LPII
41
Objectifs Exemple
Analyse ascendante
Analyse ascendante Considérons la grammaire suivante :
On part des feuilles de l’arbre syntaxique pour listeliste+liste|liste-liste|0|1…|9
Décalage et réduction retrouver la racine=axiome. Faisons l'analyse ascendante de 2+6-1.
Analyse LR Comment? 2+6-1
Schéma d'analyseur LR Remplacer la partie droite d’une production par sa liste+6-1
Tabla action et successeur partie gauche. liste+liste-1
liste-1
liste-liste
liste (axiome).
Analyse décalage-réduction ou shift-reduce
FS Agadir SMI5-LPII
42
Recherche des productions lors du processus de Schéma d’un analyseur syntaxique LR
Analyse LR(0) reconnaissance de phrases
- L : lecture de gauche à droite de la chaîne (Left to right scan) Comme dans l’analyse LL(1), nous avons besoin d’un moyen
Table Table
- R: construction d’une dérivation droite inverse (Reverse- pour choisir les productions à utiliser pour avancer l’analyse. action successeur
Rightmost derivation) Table action et table goto ou successeur.
- Pas de symbole de prévision (lookahead). Entrée$ Programme moteur Arbre
syntaxique ou
Cette analyse est appelée aussi shift-reduce parsing. erreur
P
i
Composée d’états
l
e
FS Agadir SMI5-LPII
Structure de la table Action Structure de la table Successeur ou Branchement Exemple de table action et successeur
Action[état][T] prend l’une des valeurs suivantes Soit la grammaire suivante
Successeur[état][NT] prend l’une des valeurs suivantes
- di : décaler(dans entrée) et empiler l’état i (1)EE+T
- état à empiler
(2)ET
- ri : réduire en utilisant la production i - vide pour indiquer erreur
(3)TT*F
- vide pour indiquer erreur
(4)TF
- accepter(la chaîne est correcte et fin d'analyse)
(5)F(E)
(6)Fid
les tables action et successeur de cette grammaire sont données par
la suite.
43
T Entrée$ S P A E Action Suc
T Entrée$ S P A
0 id*id+id$ 0 d5 id + * ( ) $ ET F
0 id*id+id$ 0 d5
E Action Suc Remarque
5 *id+id$ 0,5 r6 0 d5 d4 1 2 3
(1)EE+T 5 *id+id$ 0,5 r6
id + * ( ) $ ET F
La partie s de la table de reconnaissance contient les
3 *id+id$ 6 0,3 r4 1 d6 ac
(2)ET 0 d5 d4 1 2 3
2 *id+id$ 6,4 0,2 d7 2 r2 d7 r2 r2
(3)TT*F
3 *id+id$ 6 0,3 r4
1 d6 ac productions du processus de dérivation droite inversée.
7 Id+id$ 6,4 0,2,7 d5 3 r4 r4 r4 r4 2 *id+id$ 6,4 0,2 d7
FS Agadir SMI5-LPII
44
Fermeture d’un ensemble d’items
Réponse Considérons l’ensemble d’items suivant :
Chercher les items relatifs à la production suivante : I={E E+.T}
Remarque
E E* T La fermeture de I noté fermeture(I) est l'ensemble d’items
l’item associé à la production A ε est obtenu comme suit :
Les items associés à E E+T
A. i. initialiser fermeture(I) par I={EE+.T}
E .E+T
ii. rechercher les productions avec partie gauche contenant
E E.+T T, par exemple T0|1;
E E+.T iii. ajouter les items T.0 et T.1 à fermeture(I);
E E+T. iv. répéter les op ii) et iii) avec les items ajoutés à
fermeture(I) jusqu’aucun item ne soit ajouté (ensemble
fermé).
FS Agadir SMI5-LPII
45
Exemple Transitions entre les ensembles d’items
Soit la grammaire G Grammaire G’ augmentée Les ensembles d’items forment les états d’un automate fini dont les
Grammaire augmentée (0)S E transitions sont étiquetées par les terminaux et les non terminaux.
(1)E E+T
Soit G une grammaire d’axiome E. (1)E E+T Automate fini état initial
A partir de la grammaire G on développe une autre grammaire G’ dite
(2)E E*T (2)E E*T
état initial i=fermeture({S.E}).
grammaire augmentée, en lui ajoutant (3)E T (3)E T
la production : S E. (4)T 0
(4)T 0 (5)T1
S représente l’axiome de la nouvelle grammaire(G’).
(5) T1
FS Agadir SMI5-LPII
46
Exercice 2 Recherche d’autres états Recherche d’autres états
Prenons l’état i défini par
Si on prend les ensembles des items (états) obtenus: Si on prend les ensembles des items (états) obtenus:
i=fermeture({S .E})= {S .E, E .E+T,E .E*T,E.T,
T(i,0)={T 0.}=état 1 T(i,0)={T 0.}=état 1
T.0, T.1} T(i,1)={T1.} =état 2
T(i,1)={T1.} =état 2
et T(i,E)={S E., EE.+T, EE.*T}=état 3
T(i,E)={S E., EE.+T, EE.*T}=état 3
calculons T(i,E)=fermeture({S E., EE.+T, EE.*T}) T(i,T)={E T.}=état 4
T(i,T)={E T.}=état 4
={S E., EE.+T, EE.*T} Recherchons des états à partir de 3:
T(i,E) désigne un état nommée par exemple 3 à ajouter à C. T(3,+)=fermeture({EE+.T})=
{EE+.T, T.0, T.1}=état 5 à ajouter à C.
FS Agadir SMI5-LPII
Exemple
Construction des tables d’analyse action et successeur i= {S .E, E +T,E.E*T,E.T, T.0,
Algorithme Exemple T.1}=état 0 é * + 0 1 $ E T
entrée : grammaire augmentée G’
sortie : tables action et successeur i= {S .E, E.E+T,E.E*T,E.T, T.0, T.1}=état 0 T(i,0)={T 0.}=état 1
d1 d2 3 4
T(i,1)={T1.} =état 2 0
début T(i,0)={T 0.}=état 1
construire une matrice M vérifiant : T(i,E)={S E., EE.+T, EE.*T}=état 3 1 r4 r4 r4 r4 r4
la première colonne est formé des états de C avec état 0 formé à partir de fermeture({S.E}) T(i,1)={T1.} =état 2
T(i,T)={E T.}=état 4 r5 r5 r5 r5 r5
la première ligne est composée : T(i,E)={S E., EE.+T, EE.*T}=état 3 2
T(3,+)={E E+.T,T.0, T.1}=état 5
- des symboles terminaux + $ pour action d6 d5 a
T(i,T)={E T.}=état 4 3
- Et des symboles non terminaux pour successeur. T(3,*) = {EE*.T, T.0,T.1}=état 6
Pour action T(3,+)={E E+.T,T.0, T.1}=état 5 4 r3 r3 r3 r3 r3
T(5,T)={EE+T.}=état 7
Si T(i,a)=ek alors M(i,a)=dK T(3,*)= {EE*.T, T.0,T.1}=état 6 T(6,T)={EE*T.}=état 8 5 d1 d2 7
Si un état i contient A d. alors M(i,a)=rk (pour tout a) avec k=ordre(Ad) pour A <> S.
Si un état i contient SE. alors M(i,$)=acc. T(5,T)={EE+T.}=état 7 T(6,T)={EE*T.}=état 8 (0)S E d1 d2 8
Pour successeur (1)E E+T 6
Si T(i,A)=ej alors M(i,A)=j (2)E E*T 7 r1 r1 r1 r1 r1
fin
(3)E T 8 r2 r2 r2 r2 r2
(4)T 0
(5)T1
421 422 423
47
Recherche des états
Exercice Réponse état 0
Soit la grammaire G suivante : état 0= fermeture({S.E})={S.E, E.E+T, E.T, T.id, T.(E)}.
(0)S E
état 1=T(0,E)=ferm({SE., E E.+T})=
EE+T
(1)EE+T {SE., E E.+T}
E T état 2=T(1,+)=ferm({EE+.T})
Tid (2)E T ={EE+.T, T.id, T.(E)}
T(E) (3)Tid état 3=T(2,T)=ferm({EE+T.})={EE+T.}
état 4=T(2,id)=ferm({Tid.})={Tid.}
1)Donner la grammaire G’ augmentée associée à G. (4)T(E) état 5=T(2,()=ferm({T(.E)})={T(.E),E.E+T,
2)Chercher la collection C des ensembles d’items. E.T, T.id, T.(id)}
3)Donner les tables d’analyse. état 6 =T(5,E)=ferm({T(E.),EE.+T})={T(E.),EE.+T}
état 7=T(6,))=ferm({T(E).})={T(E).}
état 8=T(5,T)=ferm({E T.})={ET.}
FS Agadir SMI5-LPII
48