Filière : SMI – S5
3
Introduction
Définition:
La théorie de langage est une branche qui permet de comprendre le
fonctionnement des langages formels (un ensemble de mots) par un
modèle mathématique.
Objectif:
Représenter un langage
Savoir si un mot appartient (ou pas) à un langage
Applications pratiques:
La définition formelle de la syntaxe et sémantique de langages de
programmation
Construction de compilateurs
…
4
Introduction
Termes de base
Symbole :
Un symbole est une entité abstraite.
Exemples: Lettres, Chiffres, Symboles graphiques.
Alphabet :
Un alphabet (ou vocabulaire) noté Ω est un ensemble de symboles.
Exemples: Ω = {0 ,1} , Ω = {0; 1; 2; 3; 4; 5; 6; 7; 8; 9; .}, Ω = {a, b, …..z}.
Mot :
Un mot (ou bien une chaîne ou lexème) défini sur un alphabet Ω est
une suite finie de symboles juxtaposés (ou concaténés) de Ω.
Exemples: Le mot 1011 est défini sur l’alphabet {0, 1} ; le mot 1.23 est
défini sur l’alphabet {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, .}.
Remarque: Le mot vide est une suite vide de symboles. Il est noté ε.
5
Introduction
Définitions
Longueur d’un mot:
La longueur d’un mot m est le nombre de symboles qui le composent.
Elle est notée par |m|.
Exemples: |ababb| = 5 , |ε| = 0 .
Nombre d’occurrence:
2 3
6
Introduction
Concaténation:
Mots conjugués :
Deux mots m et m’ sont dits conjugués s’il existe deux mots u et v tels
que : m = uv et m’ = vu.
8
Introduction
Langage formel:
9
Introduction
Opération sur les langages:
10
Introduction
Opération sur les langages:
11
Introduction
Grammaire: Définition
Une grammaire est une notation utilisée pour la description de la syntaxe
d’un langage, c.à.d. la façon avec laquelle les mots de langage seront
organisés et utilisés.
Exemple:
Pour analyser une classe de phrases simples en français, on peut
supposer qu’une phrase est construite de la manière suivante :
PHRASE → ARTICLE SUJET VERBE COMPLEMENT
SUJET → "garçon" ou "fille"
VERBE → "voit" ou "mange" ou "porte"
COMPLEMENT → ARTICLE NOM ADJECTIF
ARTICLE → "un" ou "le" ou "une" ou "la"
NOM → "livre" ou "plat"
ADJECTIF → "bleu" ou "rouge" ou "vert"
12
Introduction
Grammaire: Définition formelle
On appelle grammaire le quadruplet G(VT, VN, R, S) tel que:
VT : Ensemble fini de symboles (ou des mots) dits terminaux, on l’appelle
également vocabulaire terminal. Exemple: VT ={garçon, fille, voit, mange,
porte, un, le, une, la, livre, plat, bleu, rouge, vert}.
VN : Ensemble fini de symboles (ou des mots) non terminaux qui représente
les noms attribués aux productions constituant la grammaire du
langage. Exemple: VN = {PHRASE, ARTICLE, SUJET, VERBE,
ARTICLE, COMPLEMENT}
R : Ensemble de règles de productions de la forme G→d tel que G(VTVN)+
et d(VTVN)* (Voir l’exemple précédent)
S : Symbole (ou Mot) non-terminal particulier appelé axiome (mot de départ
de la grammaire). Dans l’exemple précédent, l’axiome est: PHRASE.
Par convention, on utilisera les lettres majuscules pour les non-terminaux, et
les lettres minuscules pour représenter les terminaux.
13
Introduction
Grammaire: Propriétés sur les règles de production
14
Introduction
Grammaire: Arbre syntaxique
Soit une grammaire G=(VT ,VN ,R,S), les arbres de syntaxe de G sont des
arbres où les nœuds internes sont étiquetés par des symboles de VN , et les
feuilles étiquetées par des symboles de VT.
Exemple 1:
Soit la grammaire G = ({a, b}, {S, T}, {S → aS|aT, T → bT|b}, S). Elle génère
le mot aab selon la chaîne de dérivation S → aS → aaT → aab. Ce qui
donne donc l’arbre syntaxique suivant :
16
Introduction
Grammaire: Langage engendrée
Soit G=(VT ,VN ,R, S) une grammaire. Le langage défini par la grammaire G
appelé L(G) est l'ensemble des mots dérivés du symbole de départ :
Remarque importante :
Une grammaire définit un seul langage. Par contre, un même langage
peut être engendré par plusieurs grammaires différentes.
17
Introduction
Automate : Définition
Un automate est un modèle mathématique (ou une machine abstraite) qui
permet de lire un mot et de répondre à la question : "un mot m appartient à
un langage L ?" par oui ou non.
En général, un automate est composé de :
- Une bande d'entrée sur laquelle est écrit le mot à analyser. Elle est divisée
en case et le mot d’entrée est stocké à raison d’une lettre par case.
- Une tête de lecture : permet de lire le mot en entrée (parcourt les cases)
- Un organe de contrôle : caractérisée par l’ensemble des états dans
lesquels elle peut se trouver et par son programme, appelé fonction de
transition de l’automate, qui lui permet d’évoluer d’un état à un autre
18
Introduction
Automate : Définition
Formellement, un automate contient au minimum :
– Un alphabet pour les mots en entrée
– Un ensemble non vide d’états
– Un état initial
– Un ensemble non vide d’états finaux
– Une fonction de transition (permet d’évoluer d’un état à un autre).
Exemple: L’automate des mots contenant le facteur ab est le suivant:
Remarque: On dit qu’un mot est reconnu par un automate si, à partir d’un
état initial, on arrive à un état final à travers une succession d’états
intermédiaires . On dit aussi qu’un langage est reconnu par un automate
lorsque tous les mots de ce langage sont reconnus par l’automate.
19
Introduction
Automate : Classification de Chomsky
- Automate à états fini: Utilisé pour reconnaitre les langages de type 3.
- Automate à pile: Pour reconnaitre les langages de type 2.
- Automate à bornes linéaires: Pour reconnaitre les langages de type 1.
- Machine de Turing: Pour reconnaitre les langages de type 0.
20
Introduction
Exercice :
1. Trouvez les langages correspondants aux définitions suivantes:
Tous les mots sur {a, b} qui commencent par a.
Tous les mots sur {a, b, c} qui commencent par un a et finissent par un b.
Tous les mots sur {a, b} qui contiennent plus de a que de b.
21
Introduction
Exercice (suite) :
3. Définissez la fermeture de Kleene (L∗) pour chacun des langages suivants :
L = {ε}
L = {a, aa}.
4. Précisez le type de chacune des grammaires suivantes ainsi que les
types des langages qui en dérivent :
G = ({a, b}, {S, T}, {S → aabS | aT, T → bS | ε} , S);
G = ({a, b, c}, {S, T,U}, {S → bSTa | aTb, T → abS | cU, U → S | ε}, S) ;
G = ({0, 1, 2}, {S,C,Z,T}, {S →TZ, T→0T1C|ε, C1→1C, CZ→Z2, 1Z → 1}, S).
5. Donnez, sans démonstration, les langages générés par les grammaires
suivantes. Dites, à chaque fois, de quel type s’agit-il ? :
G = ({a, b}, {S}, {S → abS | b}, S)
G = ({a, b}, {S}, {S → aSa | bSb | ε}, S)
22
Introduction
Exercice :
Soit la grammaire G = (VT, VN, R, EXPR) tel que :
R={
}
1. Déterminez VT et VN?
Exemples:
a∗ : dénote le langage régulier an (n ≥ 0)
(a | b)∗ : dénote les mots dans lesquels le symbole a ou b se répètent un
nombre quelconque de fois. Elle dénote donc le langage de tous les
mots sur {a, b} ;
(a | b)∗ab(a | b)∗ : dénote tous les mots sur {a, b} contenant "ab".
26
Expressions régulières
Langages réguliers
Propriétés:
Soient L et L’ deux langages réguliers désignés respectivement par les
expressions régulières r et s, nous avons :
27
Expressions régulières
Exercice :
Démontrez que les deux langages suivants sont réguliers (l’alphabet
considéré est Ω = {0; 1}):
1. L’ensemble des mots composés d’un nombre arbitraire de 1, suivis de
01, suivis d’un nombre arbitraire de 0.
2. L’ensemble des nombres binaires impairs..
28
Expressions régulières
Lemme de pompe (ou de l’étoile, d’itération ou de gonflement)
Soit L un langage régulier défini sur l’alphabet Ω. Il existe alors un entier n tel
que pour tout mot m L de longueur |m| ≥ n, il existe x, z Ω∗ et y Ω+ tels
que :
– m = xyz
– |xy| ≤ n
29
Expressions régulières
Démonstration:
Soit A un automate fini reconnaissant L, soit n le nombre de ses états, e0 son
état initial, δ sa fonction de transition.
Soit m = c1 . . . cpL avec p ≥ n. L’état er est peut être défini par er=δ(er−1, cr),
donc ep est un état final de l’automate car ep = δ(ep−1, cp ).
On a ek=et=δ(ek, y), donc pour tout iIN, ek=et=δ(ek , yi), d’où ep=δ(e0, xyiz),
ce qui montre que le mot xyiz est encore reconnu par A donc appartient à L.
30
Expressions régulières
Exercice :
1- Montrer que le langage régulier akbl vérifié les critères de pompe.
2- Montrer que le langage anbn n’est pas régulier (ou irrégulier).
31
P lan
Théorie de langages
Introduction
Expressions régulières
Automates finis
Grammaires hors-contexte
Automates à pile
Compilation
Introduction
Analyse lexicale
Analyse syntaxique
Analyse sémantique
Génération et optimisation du code
Automates finis
Représentation d’un AF par un graphe de transition :
Un AF est représenté par un graphe (ou diagramme) orienté étiqueté, appelé
graphe de transition tel que :
- L’état initial est désigné par une flèche entrante au sommet correspondant
- Pour chaque état q, q Q, il existe un nœud étiqueté q.
- Pour chaque état q et chaque symbole a de V tel que δ(q; a) = p, il existe
un arc du nœud q vers le nœud p étiqueté a.
- Les nœuds correspondant aux états de satisfaction (états appartenant à
F) sont représentés par un cercle double..
Exemple : On considère le langage L = {akbr / k≥0 et r >0}
32
Automates finis
Représentation d’un AF par une table de transition :
Exemple 1:
La table de transition correspondante à l’AF de l’exemple précédent est :
33
Automates finis
Exemple 2:
On considère l’automate fini donné par la table de transition suivante :
1. Dessiner l’automate?
2. Montrer que les mots "aba" et "bbabba" sont reconnus?
3. Montrer que "baaaa" n’est pas reconnu?
34
Automates finis
Automate fini non déterministe (AFN) :
Un AFN est un AF tel que dans un état donné, il peut y avoir:
Plusieurs transitions correspondantes au même symbole sortant d’un
même état.
Des transitions sur le symbole ε (mot vide) : Changer d’état sans avancé
dans le mot d’entrée.
Exemple :
35
Automates finis
Exercice :
1. Construire un automate qui reconnaît les mots qui se terminent par bab?
2. Construire un automate qui reconnaît les mots qui commencent par aba?
3. Construire un automate qui reconnaît les mots qui se terminent
par bab ou qui commencent par aba?
Solution :
1) 2)
3)
36
Automates finis
Automate fini déterministe (AFD) :
Un AFD est un cas particulier des AFN tel que:
Aucun état n’a de ε transition.
Pour chaque état q et chaque symbole a, il existe au plus un arc
d’étiquette a partant de q.
Exemple :
37
Automates finis
Automate fini déterministe complet (AFDC) :
38
Automates finis
Transformation de l’AFD en AFDC :
Tout AFD peut être transformé en un AFDC reconnaissant le même langage
par l’algorithme suivant:
Rajouter à l’AFD un nouvel état P non final (« P est appelé état poubelle
ou état erreur »).
Rajouter les transitions d’étiquettes manquantes en les dirigeant toutes
vers cet état poubelle P; ne pas oublier les transitions de P vers lui-même.
Exemple :
38
Automates finis
Théorème de Rabin et Scott :
Tout langage accepté par un AFN est également accepté par un AFD.
Proposition
Tout AFN (avec ou sans ε-transition) peut être transformé en un AFD.
39
Automates finis
Transformation d’un AFN sans ε-transition en AFD :
Exemple :
AFN AFD
40
Automates finis
Transformation d’un AFN avec ε-transition en AFD :
Soit A = (Q, V, δ, q0, F) un AFN et s V, q Q et T Q on note par:
- ε-fermeture(q): L’ensemble des états de l’AFN accessible depuis q par
des ε-transition (q appartient aussi à cet ensemble).
- ε-transition: La transition sur le symbole ε.
- ε-fermeture(T)= 𝑇∈𝑞ڂε−fermeture(q)
- Transition(T, s)= 𝑇∈𝑞ڂTransition(q,s) = 𝑇∈𝑞ڂδ(q,s)
Exemple :
41
Automates finis
Transformation d’un AFN avec ε-transition en AFD :
42
Automates finis
Transformation d’un AFN avec ε-transition en AFD :
Exemple 1:
AFN
AFD
43
Automates finis
Transformation d’un AFN avec ε-transition en AFD :
Exemple 2:
44
Automates finis
Exercice :
Transformer en AFD les automates suivants :
1)
2)
3)
45
Automates finis
TP :
45
Automates finis
Théorème de Kleene :
Soient:
EGR : l’ensemble des langages réguliers générés par des GR.
EER : l’ensemble des langages décrits par toutes les ER.
EAF : l’ensemble de tous les langages reconnus par les AF.
46
Automates finis
Passage de l’AF (D ou N) vers l’ER :
Soit A=(Q, V, δ, q0, F) un automate à états fini quelconque.
On note par Li le langage reconnu par l’automate si son état initial était qi.
Par conséquent, trouver le langage reconnu par l’automate revient à trouver
L0 étant donné que la reconnaissance commence à partir de q0.
L’automate permet d’établir un système d’équations aux langages de la
manière suivante:
- Si δ(qi, a)=qj alors on écrit : Li = aLj
- Si qi F, alors on écrit: Li = ε.
- Si Li = α et Li = β alors on écrit Li = α|β
Il suffit ensuite de résoudre le système en précédant à des substitutions et
en utilisant la règle suivante: La solution de l’équation L= αL|β est le
langage L=α*β.
47
Automates finis
Exercice :
Construisez l’expression régulière qui correspond à l’automate suivants :
48
Automates finis
Passage de l’ER vers l’AFN :
Regle3: Les AFN des expressions régulières E1|E2, E1.E2, (E1)+ et (E2)*
(où E1 et E2 sont deux expressions régulières d’AFN correspondants
AFN(E1) et AFN(E2)) sont :
49
Automates finis
Passage de l’ER vers l’AFN :
51
Automates finis
Passage de l’AF (D ou N) vers la GR :
Soit A=(Q,V,δ,q0 ,F) un AF, la grammaire qui génère le langage reconnu
par A est G=(VT ,VN ,R,S) :
– VT = V
– Associer à chaque état de Q un non terminal
– L’axiome S est le non-terminal associé à l’état initial
– Soit B le non terminal associé à qi et C le non-terminal associé à qj, si
δ(qi, a)=qj alors la grammaire possède la règle de production: B → aC
– Si qi est final et B est le non-terminal associé à qi alors la grammaire
possède la règle de production : B → ε.
52
Automates finis
Exercice :
Trouvez la grammaire régulière reconnaissant le langage généré par
l’automate suivant:
53
P lan
Théorie de langages
Introduction
Expressions régulières
Automates finis
Grammaires hors-contexte
Automates à pile
Compilation
Introduction
Analyse lexicale
Analyse syntaxique
Analyse sémantique
Génération et optimisation du code
Grammaires hors-contexte
Rappel :
Soit G=(VT ,VN ,R, S) une grammaire quelconque. G est dite hors-contexte
ou de type 2 si toutes les règles de production sont de la forme: x→y tel
que x VN et y (VT VN )∗ .
Remarques :
- Le langage généré par une GHC est appelé un langage hors-contexte (ou
algébrique).
- La plus part des langages de programmation sont des langages hors-
contextes.
Exemple :
54
Grammaires hors-contexte
Exercice :
Trouver la GHC générant le langage :
1. anbn (n≥0)
2. mmR tel que m (a|b)∗
3. 0i1n2n avec n, i > 0
4. 0n1n2i avec n, i > 0
55
Grammaires hors-contexte
Grammaires hors-contextes propres (GHCP) :
Définition :
Une grammaire hors-contexte G = (VT, VN, R, S) est dite propre si elle vérifie:
– A → u R : S ne figure pas dans u
– A → u R : u ≠ ε ou A = S
– A → u R : u VN
– Tous les non terminaux sont utiles, c’est-à-dire qu’ils vérifient :
• AVN \{S} : A est atteignable depuis S: , (VTVN\{S})* :
• A VN : A est productif :
Propriété :
Il est toujours possible de trouver une grammaire propre pour toute
grammaire hors-contexte.
56
Grammaires hors-contexte
Transformation d’une GHC vers une GHCP :
1. Rajouter une nouvelle règle S′ → S tel que S′ est le nouvel axiome
2. Éliminer les règles A → ε :
– Calculer l’ensemble E = {AVN {S′} | A→ε}
– Pour tout AE, pour toute règle B → αAβ de R
– Rajouter la règle B → αβ
– Enlever les règles A → ε
3. Eliminer les règles A→B:
– Calculer toutes les paires (A, B) telle que A→B
– Pour chaque paire (A, B) trouvée
– Pour chaque règle B → u1 |...|un, rajouter la règle A → u1|...|un
– Enlever toutes les règles A → B
4. Supprimer tous les non-terminaux non-atteignables.
5. Supprimer tous les non-terminaux non-productifs.
57
Grammaires hors-contexte
Formes Normales de Chomsky (FNC) d’une GHC :
Définition :
Soit G=(VT, VN, R, S) une grammaire hors-contexte. On dit que G est sous
forme normale de Chomsky si les règles de G sont toutes de l’une des
formes suivantes :
Propriété :
Il est toujours possible de transformer n’importe quelle grammaire hors-
contexte pour qu’elle soit sous la forme normale de Chomsky.
Remarque :
Si la grammaire est propre, alors la procédure de transformation sera très
facile.
58
Grammaires hors-contexte
Transformation d’une GHC vers sa FNC :
On suppose que la grammaire HC a été rendue propre. Donc toutes les
règles sont sous l’une des formes suivantes :
S → ε , A → w avec w VT+ , A → w avec w ((VN \{S}) U VT)+
1. La deuxième forme peut être facilement transformée en A → BC. En
effet, si w = au, u VT+, alors il suffit de remplacer la règle par les trois
règles A → A1A2 , A1 → a et A2 → u. Ensuite, il faudra transformer la
dernière règle de manière récursive tant que |u| > 1.
2. Il reste alors à transformer la troisième forme.
Supposons que : w = w1A1w2A2 ...wnAnwn+1 avec wi VT* et Ai(VN\{S})
Si w1≠ε, alors il suffit de transformer cette règle en : A → B1B2, B1→w1,
B2 → A1w2A2 ...wnAnwn+1
Sinon, elle sera transformée en : A → A1B, B → w2A2 ...wnAnwn+1
Cette transformation est appliquée de manière récursive jusqu’à ce
que toutes les règles soient des règles normalisées.
59
Grammaires hors-contexte
Exercice :
Soit G une grammaire HC dont les règles de production sont :
S → aSbS | bSaS | ε
1. Transformer G en GHCP.
2. Transformer G à sa forme normale de Chomsky
60
Grammaires hors-contexte
Formes Normales de Greibach (FNG) d’une GHC :
Définition :
Soit G=(VT ,VN ,R,S) une grammaire hors-contexte. On dit que G est sous
forme normale de Greibach si les règles de G sont toutes de l’une des
formes suivantes :
A → aA1A2 ... An , a VT , Ai VN \{S}
A → a , A VN , a VT
S→ε
Propriété :
Il est toujours possible de transformer n’importe quelle grammaire
hors-contexte pour qu’elle soit sous la forme normale de Greibach.
61
Grammaires hors-contexte
Transformation d’une GHC vers sa FNG :
Lemme1 :
Soient Y→β1|…|βr les règles de Y. Le langage (engendré par la grammaire)
n’est pas changé si la règle X→ αYα’ est remplacée par les règles
X→αβ1α’|…|αβrα’.
62
Grammaires hors-contexte
Exercice :
Soit G une grammaire HC dont les règles de production sont :
S → Ssa | b
63
P lan
Théorie de langages
Introduction
Expressions régulières
Automates finis
Grammaires hors-contexte
Automates à pile
Compilation
Introduction
Analyse lexicale
Analyse syntaxique
Analyse sémantique
Génération et optimisation du code
Automates à pile
Définition :
Le langage L= {anbn /nIN} est non régulier donc n’est pas reconnu par un
automate fini (voir l’exercice de la diapo 31).
Il existe une grammaire HC qui permet de générer L, donc L est reconnu
par un automate de type 2 ou automate à pile (voir l’exercice de la diapo 55).
Alors dans ce cas, on peut dire que la pile est une mémoire qui est
ajoutée à l’automate pour compter le nombre de a du début du mot puis
de décompter exactement le même nombre de b.
64
Automates à pile
Définition :
Un automate à pile est défini par A=(Q, π, V, δ, Z0, q0, F) où:
(Q, V, q0, F) sont, respectivement, l’ensemble d’états, l’alphabet, l’état
initiale et l’ensemble d’états finaux.
π est l’ensemble des symboles utilisés pour écrire dans la pile (l’alphabet
de la pile). Cet alphabet doit forcément inclure le symbole signifiant
que la pile est vide.
Z0 est le contenu initial de la pile.
δ est la fonction de transition définie par :
avec δ(qi, a, B) = (qj, C) où B est le sommet de la pile et C indique le
nouveau contenu de la pile.
Remarque
Si la pile est vide au départ, l’AP est défini par A=(Q, π, V, δ, q0, F).
65
Automates à pile
Interprétation des transitions :
66
Automates à pile
Mode de reconnaissance :
Il existe deux modes de reconnaissance pour les automates à pile:
1- Reconnaissance par état final : Un mot m est accepté par un AP si
après avoir lu tout le mot m, l’automate se trouve dans un état final quelque
soit le contenu de la pile.
2- Reconnaissance sur pile vide : Un mot m est accepté par un AP si
après avoir lu tout le mot m, la pile est vide quelque soit l’état de l’automate.
Remarques:
Ces deux modes sont équivalents, donc, dans ce qui suit, on accepte un mot
si le ruban vide (après avoir lu tout le mot), on est sur l‘état final et la pile vide
Un mot m est rejeté par un AP si:
- Aucune transition n’est possible (l’automate n’a pas pu lire tout le mot)
- L’automate se trouve dans un état non final.
- La pile est non vide.
- Une opération incorrecte est menée sur la pile : Dépiler alors que la pile
est vide.
67
Automates à pile
Exemple :
68
Automates à pile
Automate à pile déterministe :
Remarque :
Malheureusement, nous ne pouvons pas transformer tout automate à pile
non déterministe en un automate déterministe
69
Automates à pile
Grammaire hors-contexte vers un automate à pile :
Pour tout langage généré par une grammaire hors-contexte, il existe un
automate à pile (déterministe ou non) qui le reconnaît. Réciproquement,
pour tout langage reconnu par un automate à pile, il existe une grammaire
hors-contexte qui le génère.
70
Automates à pile
Exercice :
1- Construire l’automate à pile du langage suivant :
mcmR tel que m(a|b)*.
2- Construire l’automate à pile du langage suivant :
mmR tel que m(a|b)*.
71
Compilation
P lan
Théorie de langages
Introduction
Expressions régulières
Automates finis
Grammaires hors-contexte
Automates à pile
Compilation
Introduction
Analyse lexicale
Analyse syntaxique
Analyse sémantique
Génération et optimisation du code
Introduction
Langages haut niveau
74
Introduction
Compilateur / interpréteur
75
Introduction
Compilateur - Détail
Un compilateur est un outil qui lit un programme source écrit dans un
langage donné et le traduit en un programme correspondant écrit dans un
autre langage tout en signalant les erreurs du programme source.
77
Introduction
Phases d’un compilateur :
78
Introduction
Phases d’un compilateur :
79
Introduction
Phases d’un compilateur :
80
Introduction
Phases d’un compilateur :
81
Introduction
Environnement d’un compilateur:
La création d’un programme cible exécutable requiert en fait plusieurs
programmes en plus du strict compilateur.
82
Introduction
Outils pour la construction d’un compilateur:
83
P lan
Théorie de langages
Introduction
Expressions régulières
Automates finis
Grammaires hors-contexte
Automates à pile
Compilation
Introduction
Analyse lexicale
Analyse syntaxique
Analyse sémantique
Génération et optimisation du code
Analyse lexicale
Définition :
À partir du programme source, qui se présente comme un flot de
qui sont les mots que l'analyseur syntaxique va ensuite les utiliser.
85
Analyse lexicale
Remarques:
À partir du programme source, qui se présente comme un flot de
caractères, l'analyse lexicale permet de reconnaitre des unités lexicales,
qui sont les mots que l'analyseur syntaxique va ensuite les utiliser.
1. Les unités lexicales seront stockées au fur et à mesure dans la table
de symboles.
2. L’opération du lecture du texte source doit s’accompagner avec des
tâches supplémentaires: Eliminer les blancs, les commentaires, fin
de lignes, gérer les numéros des lignes pour l’utiliser dans le cas
d’une erreur rencontrée, …..
3. L’analyseur lexical doit signaler chaque présence d’erreur dans le
texte d’entrée.
86
Analyse lexicale
Lexème, unité lexicale:
Lexème (ou Token): est une chaîne de caractères qui constitue une
seule entité tirée à partir du texte source.
Exemple: dans l’instruction suivante: aire := base * hauteur / 2, l’analyseur
lexical reconnaît les lexèmes suivants.
Unité lexicale: est un type de lexème qui est un symbole terminal qui
rentre dans la construction du langage source. Pour l’exemple
précédent, on trouve:
87
Analyse lexicale
Modèle :
Modèle: Est une règle décrivant les lexèmes qui correspondent à une
unité lexicale particulière. Nous utilisons les expressions régulières ou
les automates finis pour représenter les modèles des unités lexicales.
88
Exercice
89
Analyse lexicale
Construction de l’analyseur lexical:
1. Implémenter tous les modèles (automates) représentants les
unités lexicales du langage traité (Identificateurs, Mots clés,
Nombres, ...).
2. Traiter le programme source caractère par caractère pour :
Extraire les lexèmes reconnus par leur automates et les
enregistrer dans une table des symboles avec d’autres attributs.
Gérer les erreurs pour les lexèmes non reconnus.
Table des
symboles :
Instruction
x:=y+30
90
Analyse lexicale
Construction de l’analyseur lexical:
1. Implémentation des automates
Pour chaque automate représentant une unité lexicale du langage
source, implémenter une méthode booléenne portant le même nom que
l’unité lexicale traitée.
Exemple: Automate d’un identificateur
91
Analyse lexicale
Construction de l’analyseur lexical:
1. Implémentation des automates : Méthode AFD
92
Analyse lexicale
Construction de l’analyseur lexical:
2. Traitement du programme source
93
Analyse lexicale
Construction de l’analyseur lexical:
2. Traitement du programme source : Algorithme
Remarque:
Toutes les instructions du bloc (Répéter….jusqu’à la fin du tampon)
peuvent être implémentées dans une seule fonction getlex().
94
Analyse lexicale
Construction de l’analyseur lexical:
2. Traitement du programme source : Méthode getlex()
95
Analyse lexicale
Gestionnaire de la table de symboles (GTS):
C’est une structure de données contenant des informations sur chaque
lexème utilisé dans le code source en cours d’analyse. La table de symboles
est considérée comme un intermédiaire entre toutes les phases d’un
compilateur pour échanger les informations sur les lexèmes enregistrés.
96
Analyse lexicale
Gestionnaire de la table de symboles (GTS):
Remarque:
A chaque fois que l’analyseur lexical rencontre une unité lexicale pour
la première fois, le GTS doit enregistrer les informations (attributs)
actuellement disponibles (nom , unilex). Les autres informations seront
enregistrées lors du traitement des autres phases d’analyse.
97
Analyse lexicale
Erreurs lexicales :
Un analyseur lexical doit détecter la présence d’une erreur et la signaler,
un bon analyseur lexical ne doit pas s’arrêter devant la 1ère occurrence
d’une erreur rencontrée.
Exemples:
- Un caractère n’appartient pas à l’alphabet.
- Un commentaire non fermé.
- Un mot clé non terminé.
98
P lan
Théorie de langages
Introduction
Expressions régulières
Automates finis
Grammaires hors-contexte
Automates à pile
Compilation
Introduction
Analyse lexicale
Analyse syntaxique
Analyse sémantique
Génération et optimisation du code
Analyse syntaxique
Définition :
L'analyse syntaxique (ASy) est un processus qui permet de vérifier si les
éléments proviennent de l’analyseur lexical (par getlex()) forment une
chaine d’unité lexicale acceptée par la grammaire du langage.
101
Analyse syntaxique
Méthode de construction de l’ASy
2- Analyse ascendante (bottom-up):
Construction d’un arbre d’analyse à partir des feuilles (chaine d’entrée)
vers l’axiome par des dérivation à droite: On prend la phrase à analyser
(constituée au départ uniquement de symboles terminaux) et on identifie
des parties droites de règles pour transformer la phrase en chaines de plus
en plus constituées par de non-terminaux jusqu’à arriver à l’axiome.
Exemple :
102
Analyse syntaxique
Construction d’analyseur syntaxique descendant
Il existe deux algorithmes pour construire l’ASyD :
103
Analyse syntaxique
Analyse par descente récursive
Pour construire cet analyseur, on peut suivre les étapes suivantes:
1- Associer à chaque non terminal N de la grammaire une fonction
booléenne N() portant le même nom que N.
104
Analyse syntaxique
Analyse par descente récursive
Exemple :
105
Analyse syntaxique
Analyse par descente récursive
Problème :
L’analyse par descente récursive nécessite par fois des rebroussements
(retour en arrière) ce qui n’est pas toujours facile à implanter.
Exemple:
S → cAd
A → ab|a
La chaine d’entrée w = cad
Solution:
Analyseur prédictif sans rebroussement.
106
Analyse syntaxique
Analyse prédictive
L’analyseur prédictif est un analyseur par descente récursive ou non
sans rebroussement (déterministe) qui permet de déterminer laquelle
des alternatives à prendre à partir des productions de la forme:
A → β1 |β2 | ……|βn.
107
Analyse syntaxique
Analyse prédictive : First et Follow
Définition :
Soit G = (VT ,VN, R, S) une grammaire hors-contexte
Soit A→β une production de R. On définit les deux ensembles First(β) (ou
Premier(β)) et Follow(A) (ou Suivant(A)) par:
First (β)={a VT / β aY avec Y (VT VN)*}
Follow (A)={b VT / S XAY et b First(Y) avec X, Y (VT VN)* }.
Remarque :
Les deux ensembles First et Follow peuvent être calculés pour tous les
symboles X avec X (VT VN)+.
108
Analyse syntaxique
Analyse prédictive : First et Follow
Exemple :
S → ABC ; A → ab | a ; B → bc | ac ; C → d.
First(S) = {a} ; First(A) = {a} ; First(B) = {a, b} ; First(C) = {d}.
Follow(A) = {a, b} ; Follow(B) = {d}.
Comment calculer Follow(S) et Follow(C)? (Voir l’algorithme qui calcule le
Follow)
109
Analyse syntaxique
Analyse prédictive : Calcul de First
Soit un symbole X ∈ (VT∪VN)* , pour calculer les firsts de X on applique la
fonction First(X) suivante:
110
Analyse syntaxique
Analyse prédictive : Calcul de Follow
Soit un symbole X ∈ (VT∪VN)* , pour calculer les follows de X on applique
la fonction Follow(X) suivante:
111
Exercice
VT =(+, *, (, ), nbr)
2- Calculer les deux ensembles First et Follow pour les éléments de VN.
112
Analyse syntaxique
Analyse prédictive : Grammaire LL(1)
Définition :
Soit G=(VT , VN, R, S) une grammaire hors-contexte
La grammaire G est de type LL(1) si et seulement si pour toutes les
productions de la forme A → β1 |β2 |……|βn :
- i≠j First(βi) ∩ First(βj)=Φ
- Si i tel que βi ε alors Follow(A)∩First(βj)=Φ j (ce cas se produit
lorsque A est dans la partie droite d’une production X →α1Aα2)
- Si i tel que βi ε alors j≠i , βj ε
113
Analyse syntaxique
Analyse prédictive : Grammaire LL(1)
114
Analyse syntaxique
Analyse prédictive : Suppression de la récursivité à gauche
Grammaire récursive à gauche (GRG):
Une grammaire est récursive à gauche si elle contient un non-terminal A
telle qu‘elle existe une dérivation A Aα, ou α est une chaîne quelconque.
Une grammaire récursive qui contient les deux règles suivantes: A→Aα|β
est non LL(1) (Démontrer cette propriété)
Factorisation de G
116
Analyse syntaxique
Analyse prédictive : Factorisation
Grammaire nécessite une substitution:
On dit qu’une grammaire G nécessite une substitution à gauche si G
comporte les productions suivantes : A→B|C, B→wX|α1, C→wY|α2 . G est
non LL(1) (Démontrer cette propriété).
Substitution de G
117
Exercice
118
Analyse syntaxique
Construction de l’analyseur prédictif récursif
119
Analyse syntaxique
Construction de l’analyseur prédictif non récursif
Cet analyseur est construit par un tampon d’entrée, une pile et une table de
transition TA qui a une entrée pour chaque non terminal N et chaque
terminal de prévision t tel que TA [N, t] = production à déclencher.
120
Analyse syntaxique
Construction de l’analyseur prédictif non récursif
Tampon: Contient successivement les unités lexicales en provenance de
l’analyseur lexical terminé par le symbole $.
122
Analyse syntaxique
Construction de l’analyseur prédictif non récursif
La construction de cet analyseur est donnée par l’algorithme suivant::
124