Académique Documents
Professionnel Documents
Culture Documents
Grammaire
non
contextuelle
Le mot ‘m’
Erreurs
syntaxiques
2. Grammaire non contextuelle (de type 2): (Voir cours de THL)
3. Dérivation :On appelle dérivation, l’application d’une ou plusieurs règles à partir d’une
chaîne de (T ∪ N) + . On note → une dérivation obtenue par l’application d’une seule règle de
production et on note →* une dérivation obtenue par l’application de plusieurs règles de
production.
S → aTb | c
T → cSS | S
5. Arbre abstrait
On appelle arbre abstrait une forme condensée d’arbre syntaxique qui est utilisée
dans les compilateurs. L’arbre abstrait est obtenu par des transformations simples de
l’arbre de dérivation. L’arbre syntaxique abstrait est plus compact que l’arbre
syntaxique concret et contient des informations sur la suite des actions effectuées
par un programme.
Dans un arbre abstrait, les opérateurs apparaissent comme des nœuds intérieurs et
les opérandes apparaissent comme des feuilles.
Exemple :
E→T|E+T
T→F|T*F
F → a | (E)
Les arbres syntaxiques (concret et abstrait) pour la chaîne a + a * a sont :
6. Grammaire ambiguë :Une grammaire est dite ambiguë s’il existe une chaine qui
admet plusieurs arbres de dérivation différents.
Exemple : Soit la grammaire G : E E + E | E * E | ( E ) | - E | id
La grammaire G est ambiguë car la chaine id + id *id admet deux arbres de
dérivations qui sont :
7. Récursivité à gauche :
• Un symbole non terminal A d’une grammaire est dit récursif à gauche si A→*Aβ avec
β ∈ (X ∪V )∗ .
• Une grammaire comportant au moins un symbole non terminal récursif à gauche est
dite récursive gauche.
• La récursivité gauche pose divers problèmes en analyse syntaxique. C’est la raison
pour laquelle on cherche à éliminer cette récursivité, ce qui est toujours possible, car
on dispose d’un théorème : Tout langage algébrique peut être généré par une
grammaire algébrique non récursive gauche.
Récursivité directe :
Cas simple : c’est qu’on a une règle de la forme suivante : A→ Aα / β
Comment la transformer en une règle équivalente mais pas récursive à gauche ?
A→ Aα / β devient
A→ β A’
A’→ α A’ /Ɛ
Devient
Devient
Exemple:
Transformée
Transformée
Conservée
devient
Récursivité indirecte : Une grammaire est dite récursive à gauche, de façon indirecte, s’il
existe des règles de la forme suivante :
Exemple :
A → B 0/ 1
B→ A 2B/ 3
Comment éliminer la récursivité indirecte ?
Deux étapes :
1) Faire apparaître la récursivité directe par substitution (remplacement).
2) Eliminer la récursivité directe comme vu précédemment.
Exemple :
A → B 0/ 1
B→ A 2B/ 3
La grammaire après substitution :
A→ A2B0
2B0 / 30/ 1 // En substituant B dans A
B→ A 2B/ 3
On aura une grammaire récursive à gauche directe, après transformation on obtient :
A→ 30 A’ / 1A’
A ′ → 2B0 A ′ / ε
B → A2B / 3
8. Factorisation à gauche:
La factorisation gauche est la réécriture d'une grammaire formelle pour éliminer des
productions commençant avec le même token.
Comment factoriser ?
Exemple :
→ܣAbܾ
Ab / ܽAbܣ
Ab / ܿ → AbA’
AbA’ / ܿ
devient
A’ →ܾ
ܾ/ܣ
En résumé :
Dans l'analyse top down, l'analyse se fait à partir du symbole de départ (l’axiome de la
grammaire) et atteindra la chaîne d'entrée donnée.
Exemple1 :
S
dérivation
c A d
a
Exemple2 :
L'arbre d'analyse de la chaine abde est construite en suivant les étapes suivantes :
S S S
a A B e a A B e a A B e
A b d
Etape 1 : S ->aABe
Résultat : S ->abde
La substitution commence par la variable la plus à gauche en premier, puis vers la prochaine
position à droite, etc. Par conséquent, il suit une méthode de dérivation la plus à gauche. De
plus, il est important de décider quelle règle de production choisir quand il y a une variable.
L'analyse ascendante se fait dans l'autre sens de bas en haut. L'analyse se déroule de la chaîne
d'entrée au symbole de départ qui l’axiome de la grammaire. Considérez les règles de
production de la grammaire suivantes et laissez la chaîne d'entrée w ɛ cad
Réduction
c a d
A A B A B
a b d e a b d e a b d e
S ->abbcde
La substitution commence par la variable la plus à droite en premier, puis passe à la position
de gauche suivante et ainsi de suite. Par conséquent, il suit une méthode de dérivation mot
gauche pour obtenir le symbole de départ S.
Quelle est la différence entre l'analyse syntaxique descendante et ascendante?
Les méthodes d’analyse descendantes et ascendantes peuvent être déterministes ou bien non
déterministes.
Un analyseur syntaxique est déterministe si une seule règle de production est applicable dans
chaque configuration de l'analyseur. Par extension, il ne peut alors y avoir qu'une seule
séquence de règles permettant d'analyser le texte dans sa totalité, et donc celui-ci ne peut être
syntaxiquement ambigu. Toutefois, il peut être fait usage de techniques telles que la pré-
vision pour déterminer quelle règle il faut appliquer à un point donné de l'analyse. Les
analyseurs LL et LR sont des exemples de méthodes d’analyse déterministes.
Le choix de la règle susceptible de correspondre n’est pas connu à l’avance, il faut donc
explorer les différentes possibilités. Les analyseurs basés sur les méthodes prédictives
avec retour arrière et les méthodes descendantes parallèles sont des exemples de ce type
d’analyseurs.
Dans la suite de ce cours nous allons nous intéresser aux méthodes suivantes :
Méthodesd’analysesyntaxiqu
es
Méthodesascendantes Méthodedescendantes