Académique Documents
Professionnel Documents
Culture Documents
d’analyseurs lexico-syntaxiques
2023-2024
Avec des
résultats
mixtes!!
Dr. Mohamed Dhouioui
5
ANALYSE DES PHRASES
Analyse lexicale: identification de mots formés de caractères
• Les mots sont classifiés en plusieurs catégories: articles, noms,
verbes, adjectifs, prépositions, pronoms…
Analyse Lexicale
Analyse Syntaxique
Analyse Sémantique
Générateur du Code
Intermédiaire
Optimiseur du Code
Générateur du Code
Commençons…
ANALYSE LEXICALE
token
Lexical Syntax
Source Analyser Analyser
Program (scanner) (parser)
Get next token
Lexemes Tokens
Index variable
= equal_sign
2 int_literal
* multi_op
Count variable
+ plus_op
17 int_literal
; semicolon
Dr. Mohamed Dhouioui
27
ERREURS LEXICALES
Peu d’erreurs sont perceptibles au niveau lexical seul
• L’analyseur lexical possède une vue localisée du programme
ressource
[A-Za-z][A-Za-z0-9]*
NFA:
DFA:
53
Dr. Mohamed Dhouioui
SECTION 3
Plusieurs exemples….
AB A B
1 2 3
A* ε A ε
1 2 3 4
ε
Dr. Mohamed Dhouioui
57
EXEMPLES DE CRÉATION
DE AFN
x | yz
Selon les règles de précédence, ceci est
équivalent à:
A
2 3
x | (yz) ε ε
ε
ε
Donc, (x | y)*:
x
3 4 ε
ε
ε ε
1 2 7 8
ε ε
5 6
y
59
ε Dr. Mohamed Dhouioui
EXEMPLES DE CRÉATION
DE AFN
abb
ε a ε b b
1 2 3 4 5 6
a
2 3
ε ε
ε ε b c
0 1 6 7 8 9
ε ε
4 5
b
a
2 3
ε ε
ε ε b c
0 1 6 7 8 9
ε ε
4 5 a b c
b
0 3 5,8 -
ε
1 3 5 -
2 3 - -
3 3 5,8 -
4 - 5 -
5 3 5,8 -
6 3 5,8 -
8 - - 9
9 - - -
Dr. Mohamed Dhouioui
63
CONVERSION D’UN AFN EN
UN AFD
L’algorithme de construction de sous-ensembles est utile
pour simuler un AFN à partir d’un programme d’ordinateur
Operation Definition
ε-closure(s) Ensembles des états dans N qui peuvent être atteints
de l’état s avec des transitions ε
ε-closure(T) Ensembles des états dans N qui peuvent être atteints
de l’ensemble des états T avec des transitions ε
move(T,a) Ensembles des états dans N qui peuvent être atteints
de l’ensemble des états T avec une seule transition a
États D={A,B,C}, où
• A = (1,2,3,5,8) x y
• B = (2,3,4,5,7,8) A B C
• C = (2,3,5,6,7,8) B B C
C B C
x B
A y x
x y
A B C
y C
B B C
C B C
y
Dr. Mohamed Dhouioui
70
AUTRE EXEMPLE DE
CONVERSION
Expression Régulière:
(a | b)*abb
c a a a a
A B C D E
b b b
b
A A
A, B, C, D, E
Π= B, C, D, E B, C, D, E
F F F
a
c
1 2
Réponse:
\w*
Réponse:
\W*
+
⇒ veut dire “dérive en une ou plusieurs étapes.”
Un langage qui peut être généré par une grammaire est connu comme étant
un langage non-contextuel
• Si deux grammaires génèrent le même langage, les grammaires sont
connues comme étant équivalentes
expr op expr
Grammaire:
〈expr〉::=〈expr〉〈op〉〈expr〉| id | num
〈op〉::= + | - | * | /
Dr. Mohamed Dhouioui
107
DEUX ARBRES
SYNTAXIQUES
Considérons encore une fois l’expression arithmétique de
grammaire.
La phrase id + id * id possède deux dérivations à gauche
distinctes:
〈expr〉 ⇒ 〈expr〉〈op〉〈expr〉 〈expr〉 ⇒〈expr〉〈op〉〈expr〉
⇒ id 〈op〉〈expr〉 ⇒〈expr〉〈op〉〈expr〉〈op〉〈expr〉
⇒ id +〈expr〉 ⇒ id〈op〉〈expr〉〈op〉〈expr〉
⇒ id +〈expr〉〈op〉〈expr〉 ⇒ id +〈expr〉〈op〉〈expr〉
⇒ id + id〈op〉〈expr〉 ⇒ id + id〈op〉〈expr〉
⇒ id + id *〈expr〉 ⇒ id + id *〈expr〉
⇒ id + id * id ⇒ id + id * id
Grammaire:
〈expr〉::=〈expr〉〈op〉〈expr〉| id | num
〈op〉::= + | - | * | /
Dr. Mohamed Dhouioui
108
DEUX ARBRES
SYNTAXIQUES
expr expr
id +
expr op expr expr op expr * id
id * id id + id
Equivalent à: Equivalent à:
id+(id*id) (id+id)*id
Grammaire:
〈expr〉::=〈expr〉〈op〉〈expr〉| id | num
〈op〉::= + | - | * | /
Dr. Mohamed Dhouioui
109
PRÉCÉDENCE
L’exemple précédent surligne un problème dans la
grammaire:
• Il n’impose pas la précédence
• Il n’implique pas l’ordre d’évaluation
On peut améliorer les règles de production pour ajouter la
précédence
id id
Grammaire:
〈expr〉 ::=〈expr〉+ 〈term〉|〈expr〉- 〈term〉| 〈term〉
〈term〉 ::=〈term〉*〈factor〉| 〈term〉/〈factor〉|〈factor〉
〈factor〉 ::= num | id
Dr. Mohamed Dhouioui
111
AMBIGUÏTÉ
Une grammaire qui produit plus qu’un arbre syntaxique pour
une phrase est connue comme étant ambiguë.
Exemple:
umatched
if ( expr ) stmnt
matched
stmnt
matched
Grammaire:
<S> ::= c<A>d
<A> ::= ab | a
Chaîne de données
cad
On a besoin de reculer!
Reference Grammar
122Mohamed Dhouioui
Dr.
EXEMPLE
Une autre analyse syntaxique possible pour id – num * id
Elimination de
Grammaire Elimination Factorisation Grammaire
Non-Contextuelle
récursivité LL(1)
d’ambiguïté à gauche
gauche
133
dans une grammaire Dr. Mohamed Dhouioui
ÉLIMINER LA
RÉCURSIVITÉ GAUCHE
Considérez le fragment de grammaire:
Où 〈bar〉est un non-terminal
Ce fragment ne contient aucune récursivité gauche
*
w ∈ FIRST(α) iff α ⇒wz
Dr. Mohamed Dhouioui
135
FACTORISATION GAUCHE
Maintenant, retournons à nos deux productions:
Aα et Aβ, on veut:
FIRST(α) ∩ FIRST(β) = φ
Elimination de
Grammaire Elimination Factorisation Grammaire
récursivité
Non-Contextuelle d’ambiguïté à gauche LL(1)
gauche
FIRST(S) = FIRST(A)
= {a} (on applique la 3e règle)
2. Si A αB:
FOLLOW(B) FOLLOW(A)
FOLLOW(A) = FIRST(B)
= {b} (3e règle)
FOLLOW(expr’)=FOLLOW(expr)={$}
“Règles” de FOLLOW
1) FOLLOW(S){$}
2) Si A αB:
FOLLOW(B) FOLLOW(A)
2) Si A αB:
FOLLOW(term’)= FOLLOW(term) FOLLOW(B) FOLLOW(A)
= {+, -, $}
3) Si AαBC, et la règle Cε N’EXISTE
PAS:
FOLLOW(B)FIRST(C)
num id + - * / $
expr
expr’
term
term’
factor
Dr. Mohamed Dhouioui
152
TABLEAU SYNTAXIQUE
FIRST Sets FOLLOW Sets Grammar
FIRST(expr)= {num, id} FOLLOW(expr)={$}
FIRST(expr’)= {+, -, ε} FOLLOW(expr’)={$}
FIRST(term)= {num, id} FOLLOW(term)= {+, -, $}
FIRST(term’)= {*, /, ε} FOLLOW(term’)= {+, -, $}
FIRST(factor)= {num, id} FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
term
term’
factor
Dr. Mohamed Dhouioui
153
TABLEAU SYNTAXIQUE
FIRST Sets FOLLOW Sets Grammar
FIRST(expr)= {num, id} FOLLOW(expr)={$}
FIRST(expr’)= {+, -, ε} FOLLOW(expr’)={$}
FIRST(term)= {num, id} FOLLOW(term)= {+, -, $}
FIRST(term’)= {*, /, ε} FOLLOW(term’)= {+, -, $}
FIRST(factor)= {num, id} FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
term
term’
factor
Dr. Mohamed Dhouioui
154
TABLEAU SYNTAXIQUE
FIRST Sets FOLLOW Sets Grammar
FIRST(expr)= {num, id} FOLLOW(expr)={$}
FIRST(expr’)= {+, -, ε} FOLLOW(expr’)={$}
FIRST(term)= {num, id} FOLLOW(term)= {+, -, $}
FIRST(term’)= {*, /, ε} FOLLOW(term’)= {+, -, $}
FIRST(factor)= {num, id} FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
term’
factor
Dr. Mohamed Dhouioui
155
TABLEAU SYNTAXIQUE
FIRST Sets FOLLOW Sets Grammar
FIRST(expr)= {num, id} FOLLOW(expr)={$}
FIRST(expr’)= {+, -, ε} FOLLOW(expr’)={$}
FIRST(term)= {num, id} FOLLOW(term)= {+, -, $}
FIRST(term’)= {*, /, ε} FOLLOW(term’)= {+, -, $}
FIRST(factor)= {num, id} FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
term’
factor
Dr. Mohamed Dhouioui
156
TABLEAU SYNTAXIQUE
FIRST Sets FOLLOW Sets Grammar
FIRST(expr)= {num, id} FOLLOW(expr)={$}
FIRST(expr’)= {+, -, ε} FOLLOW(expr’)={$}
FIRST(term)= {num, id} FOLLOW(term)= {+, -, $}
FIRST(term’)= {*, /, ε} FOLLOW(term’)= {+, -, $}
FIRST(factor)= {num, id} FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
term’
factor
Dr. Mohamed Dhouioui
157
TABLEAU SYNTAXIQUE
FIRST Sets FOLLOW Sets Grammar
FIRST(expr)= {num, id} FOLLOW(expr)={$}
FIRST(expr’)= {+, -, ε} FOLLOW(expr’)={$}
FIRST(term)= {num, id} FOLLOW(term)= {+, -, $}
FIRST(term’)= {*, /, ε} FOLLOW(term’)= {+, -, $}
FIRST(factor)= {num, id} FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
term’
factor
Dr. Mohamed Dhouioui
158
TABLEAU SYNTAXIQUE
FIRST Sets FOLLOW Sets Grammar
FIRST(expr)= {num, id} FOLLOW(expr)={$}
FIRST(expr’)= {+, -, ε} FOLLOW(expr’)={$}
FIRST(term)= {num, id} FOLLOW(term)= {+, -, $}
FIRST(term’)= {*, /, ε} FOLLOW(term’)= {+, -, $}
FIRST(factor)= {num, id} FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
factor
Dr. Mohamed Dhouioui
159
TABLEAU SYNTAXIQUE
FIRST Sets FOLLOW Sets Grammar
FIRST(expr)= {num, id} FOLLOW(expr)={$}
FIRST(expr’)= {+, -, ε} FOLLOW(expr’)={$}
FIRST(term)= {num, id} FOLLOW(term)= {+, -, $}
FIRST(term’)= {*, /, ε} FOLLOW(term’)= {+, -, $}
FIRST(factor)= {num, id} FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
factor
Dr. Mohamed Dhouioui
160
TABLEAU SYNTAXIQUE
FIRST Sets FOLLOW Sets Grammar
FIRST(expr)= {num, id} FOLLOW(expr)={$}
FIRST(expr’)= {+, -, ε} FOLLOW(expr’)={$}
FIRST(term)= {num, id} FOLLOW(term)= {+, -, $}
FIRST(term’)= {*, /, ε} FOLLOW(term’)= {+, -, $}
FIRST(factor)= {num, id} FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
Table Syntaxique
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
id expr <expr>
<term><expr'>
<expr>
<term><expr'>
- - - - -
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
* expr <expr>
<term><expr'>
<expr>
<term><expr'>
- - - - -
num id + - * / $
num id + - * / $
num id + - * / $
id expr <expr>
<term><expr'>
<expr>
<term><expr'>
- - - - -
num id + - * / $
num id + - * / $
num id + - * / $
Recouvrement d’erreur
Analyseur LL(k)
Note: Ceci est une grammaire partielle (utilisée pour démontrer un concept), c’est la raison pour
laquelle on n’a pas spécifié les règles de production associée avec expr. Conséquemment, ses
ensembles FIRST et FOLLOW ne seront pas calculés.
if then else $
stmt
stmt’
Dr. Mohamed Dhouioui
195
GRAMMAIRE NON LL(1)
FIRST(stmt) = {if} FOLLOW(stmt) = {$, else}
FIRST(stmt’)={else, ε} FOLLOW(stmt’)={$, else}
… …
if then else $
stmt <stmt>
if <expr> then
- - -
<stmt><stmt’>
stmt’
Dr. Mohamed Dhouioui
196
GRAMMAIRE NON LL(1)
FIRST(stmt) = {if} FOLLOW(stmt) = {$, else}
FIRST(stmt’)={else, ε} FOLLOW(stmt’)={$, else}
… …
if then else $
stmt <stmt>
if <expr> then
- - -
<stmt><stmt’>
stmt’ <stmt’>
else <stmt>
Dr. Mohamed Dhouioui
197
GRAMMAIRE NON LL(1)
FIRST(stmt) = {if} FOLLOW(stmt) = {$, else}
FIRST(stmt’)={else, ε} FOLLOW(stmt’)={$, else}
… …
if then else $
stmt <stmt>
if <expr> then
- - -
<stmt><stmt’>
stmt’ <stmt’>
else <stmt>
<stmt’> ε
Dr. Mohamed Dhouioui
198
GRAMMAIRE NON LL(1)
FIRST(stmt) = {if} FOLLOW(stmt) = {$, else}
FIRST(stmt’)={else, ε} FOLLOW(stmt’)={$, else}
… …
if then else $
stmt <stmt>
if <expr> then
- - -
<stmt><stmt’>
stmt’ - - <stmt’>
else <stmt>,
<stmt’> ε
Dr. Mohamed Dhouioui
199 <stmt’> ε
GRAMMAIRE NON LL(1)
On envisage un problème parce que, pour un token d’entrée
else et un sommet de pile de stmt, on ne sait pas quelle
production choisir:
• <stmt’>else <stmt>
• <stmt’>ε
if then else $
stmt <stmt>
if <expr> then
- - -
<stmt><stmt’>
stmt’ - - <stmt’>
else <stmt>,
<stmt’> ε
Dr. Mohamed Dhouioui
200 <stmt’> ε
RECOUVREMENT
D’ERREUR LL(1)
Qu’est-ce qui arrive lorsque l’analyseur syntaxique découvre
une erreur?
• Approche 1: arrêter toute activité d’analyse syntaxique et
afficher un message d’erreur
num id + - * / $
num id + - * / $
Chaînes
d’erreurs
num id + - * / $
num id + - * / $
num id + - * / $
expr (s)
factor <expr>
<term><expr'>
<expr>
<term><expr'>
- - - -
num id + - * / $
expr (s)
id <expr>
<term><expr'>
<expr>
<term><expr'>
- - - -
num id + - * / $
num id + - * / $
expr (s)
* <expr>
<term><expr'>
<expr>
<term><expr'>
- - - -
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
expr (s)
factor <expr>
<term><expr'>
<expr>
<term><expr'>
- - - -
num id + - * / $
expr (s)
num <expr>
<term><expr'>
<expr>
<term><expr'>
- - - -
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
num id + - * / $
expr (s)
factor <expr>
<term><expr'>
<expr>
<term><expr'>
- - - -
num id + - * / $
expr (s)
id <expr>
<term><expr'>
<expr>
<term><expr'>
- - - -
num id + - * / $
num id + - * / $
num id + - * / $
a b c $
a b c $
X Xa XbYc - -
a b c $
X Xa XbYc - -
a b c $
X Xa XbYc - -
Z Za ZXYZ - -
Zab
ANALYSE SYNTAXIQUE LR
Dérivation à Droite
Analyseurs Syntaxiques LR
Et la chaîne de donnée:
B
acdcdb
a c d c d b
On a atteint le symbole
Et la même chaîne de de départ trop tôt!
donnée: A On n’a pas effectuer le
restant de la chaîne…
acdcdb
a c d c d b
a A b c d
marqueur
a A b c d
Propriétés du « handle »:
1. Doit matcher le côté droit d’une production
2. Nous permet éventuellement d’atteindre le symbole de
départ
Chaîne de donnée:
id*id+id
INTRODUCTION À LA CONCURRENCE
Concepts de la concurrence
Sémaphores
Valeur de Total = 3 4 6
Tache A
Cherche Ajoute 1 Stocke
Total Total
Tache B
Cherche Multiplie Stocke
Total par 2 Total
Temps
Semaphore aSemaphore;
P(aSemaphore);
Critical section();
V(aSemaphore);
wait(aSemaphore);
release(aSemaphore);
PRÉPARATION EXAMEN
QUESTIONS?