Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Compilation Partie III

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 40

Compilation

Partie III

Traitement des grammaires


Analyse SLR
Plan
I- Traitement des grammaire
1- Éliminer la récursivité à gauche
2- Factorisation à gauche
II- Analyse avec la méthode SLR
Élimination de la récursivité à gauche
●Un symbole non terminal A d’une grammaire est dit
récursif si : avec
des symboles terminaux et non terminaux.
Si
● alors A est récursive à gauche.


Élimination de la récursivité à gauche
●La récursivité gauche pose divers problèmes en
analyse, et dans l’application de certains algorithmes
de transformation de grammaire.
●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 »
Élimination de la récursivité à gauche -
Procédure
●La démonstration de ce théorème, comme souvent en
pareil cas, repose sur un algorithme qui, étant donnée
une grammaire algébrique récursive gauche, produit
une grammaire non récursive gauche qui reconnait le
meme langage.
●Il faut procéder en deux temps : d’une part, on va
éliminer la récursivité directe (ou immédiate), puis
éliminer la récursivité indirecte.
Élimination de la récursivité à gauche -
Procédure
Élimination de la récursivité à gauche -
Procédure
Élimination de la récursivité à gauche –
Exercice
Soit la grammaire G : {S→S0|S1|0|1}

1- Donner une grammaire G1 sans récurivité à gauche.


●2- Donner la dérivation des deux mots 10100, 1001


avec la méthode LR avec les deux grammaires.
3- Expliquez

Élimination de la récursivité à gauche –
Exercice
Soit la grammaire G : des expressions arithmétiques

●1- Donner une grammaire G1 sans récursivité à


gauche.
2- Donner la dérivation des deux mots 14+5*3 avec la

méthode LR avec les deux grammaires.


3- Expliquez

Élimination de la récursivité à gauche –
Exercice
Soit la grammaire G : des entiers qui entiers pairs.

●1- Donner une grammaire G1 sans récursivité à


gauche.
●2- Donner la dérivation des deux mots 100, 106 avec
la méthode LR avec les deux grammaires.
3- Expliquez

Factorisation à gauche
●Nous cherchons à écrire des analyseurs prédictifs.
Cela veut dire qu'à tout moment le choix entre
productions qui ont le même membre gauche doit
pouvoir se faire, sans risque d'erreur.
●Certain grammaires peuvent poser un conflit pour le
choix des règles lors de la dérivation :
A → αβ1 | αβ2
Factorisation à gauche
●Une transformation simple, appelée factorisation à
gauche, corrige ce défaut (si les symboles susceptibles
de commencer une réécriture de β1 sont distincts de
ceux pouvant commencer une réécriture de β2) :
Alors la grammaire :

A → αβ1 | αβ2

devient :

Factorisation à gauche
Exemple : soit la grammaire :

●instr si → si expr alors instr | si expr alors instr sinon


instr
●Pour avoir un analyseur prédictif, il faudra opérer une
factorisation à gauche :
instr_si → si expr alors instr fin_instr_si

fin_instr_si → sinon instr | ε



Factorisation à gauche
Exercice
Soit la grammaire G : S→0S|1S|0T|1T, T→0|1

●Donner une grammaire G’ équivalente avec


factorisation à gauche.
●Donner la dérivation des mots suivants avec les deux
grammaires.
001, 10101.

Compilation
Partie III

TD 4
Compilation
Partie III

Calcule des suivants


Calcule des premiers
Calcule des premiers
Calcule des premiers
Calcule des premiers
Les Règles de constructions

Calcule des premiers
Les règles de construction - explication- :

A→ abB , a est un symbole non terminal alors


Premier(A) = a.
A→ Ba et B→bC , Premier(A) = Premier (B) = b.

●A→Ba , B→bC| epsilon. Dans ce cas la présence de


epsilon élimine l’utilisation de la deuxième règle ⇒
Premier(A) = Premier (A) + Premier(B-espsilon) =
Calcule des premiers
Exemple :

Calcule des premiers
Exercice :

Calculer l’ensemble des premiers des grammaires :



Calcule des suivants
Définition
●Pour tout les symboles non terminaux, on définit
suivant(S) comme étant : L’ensemble des terminaux
susceptible de suivre un mot dérivé de S.
Calcule des suivants
Règles

–Le suivant de A si c’est un terminal c’est le terminal.


–Le suivant de l’axiome est # plus les autres caractères
possibles.
–SiT est le dernier symbole non terminal dans une
production alors Suivant (T) = le suivant du symbole
non terminal à gauche de la production.
Calcule des suivants
Exemple :

Calcule des suivants
●Pour S il n’existe pas une production qui inclut S
donc :
Calcule des suivants
●Pour A on va se baser sur la première et la dernière
poduction :
Calcule des suivants
Pour B et C on va se baser sur la première production

Calcule des suivants
Exercice :

Calculer l’ensemble des suivants des grammaires :



Table d’analyse
●Après le traitement de la grammaire on peut
facilement analyser un mot sans besoin de gérer les
deux conflits importants ( réduction , décalage et entre
les réductions).
●Pour effectuer l’analyse d’une manière transparente et
simple on peut utiliser une structure simplifiée de la
grammaire intitulé table d’analyse.
Table d’analyse
Table d’analyse
●Pour S : les premier de S= {a,b,c,d} donc on cherche
les productions qui à partir de S nous donne {a,b,c,d}
Table d’analyse
●Pour A on doit faire la méme chose , toutefois Premier
(A) comporte epsilon, donc on passe au Suivant(A).
Table d’analyse
Pour B même règle que A.

Table d’analyse
Pour C :

Table d’analyse
●Il faut noter que la table d’analyse est calculé après
nettoyage de la grammaire c’est à dire enlever
l’élimination de la factorisation et la récursivité
●Dans l’exemple traité avec C nous avons retrouvé une
case avec plusieurs règles ⇒ que la grammaire n’est
pas nettoyée
⇒ on dit que la table n’est pas LL(1).

Calcule des suivants
Exercice :

●Calculer l’ensemble de la table d’analyse des


grammaires :
Exercice
●Soit le langage L des entiers qui acceptent la division
sur 5.
–Proposer G(L).
–Nettoyer G(L)
–Calculer les premiers.
–Calculer les suivants.
–Calculer la table d’analyse.
Exercice
Soit le langage L de l’affectation sous le langage C.

–Proposer G(L).
–Nettoyer G(L)
–Calculer les premiers.
–Calculer les suivants.
–Calculer la table d’analyse.
TD 5

Vous aimerez peut-être aussi