Compilation
Compilation
Compilation
2012-2013
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
2/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Objectif du cours
Comprendre le fonctionnement des gnrateurs de parser e e descendants : LL(1), ex antLR V1 LL(k), ex javaCC LL(*), ex antLR V3
3/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Analyse descendante
Lautomate ` pile sous-jacent : a eectue uniquement des lectures et des expansions ; construit un arbre en ordre prxe (idem aut. items) ; e part de laxiome (idem aut. items) ; construit une drivation gauche (idem aut. items). e
4/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Deux dirences fondamentales : e analyse dterministe dite prdictive ; e e plus ditems ni de rductions explicites. e
5/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Analyse dterministe e
` A chaque expansion lanalyseur sait choisir une production. Il ne revient jamais sur ce choix : en cas de succ`s le mot appartient au langage ; e en cas dchec on est sr que mot nappartient pas au langage. e u
6/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Analyse prdictive e
Lanalyseur prdit quelle production utiliser. . . e . . . en analysant les k prochains symboles sous la tte de lecture. e Consquences : e ne fonctionne quavec certaines grammaires, dites LL(k) ; tte de lecture toujours dnie : marqueur de n de mot #. e e NB : dans ce cours techniques pour k=1, on regarde uniquement la tte de lecture. e
7/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
S pile initiale
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Soit la grammaire G = {VT , VN , S, P} avec : VT = {a, b, d, e} ; VN = {S, A, B, D} ; P contient les productions : S AB | Da A aAb | B bB | D dD | e
10/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
a A A A b b b S B B B B abb# abb# abb# bb# bb# (1) (2) (3) (4) (5)
B b# (6)
b B b# (7)
B # (8)
# (9)
Comparer avec lautomates des items ! Drivation gauche, arbre en ordre prxe. e e
11/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Gnralisation e e
La conguration initiale est (m#, S) ; La conguration nale est (#, ) : acceptation par pile vide. On traite systmatiquement le sommet de pile. e
12/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Transition de lecture
Si le sommet de pile est un terminal a VT : on contrle que a est bien sous la tte de lecture (sinon o e chec) ; e on le consomme ; on le dpile. e Lecture de a : (am, z1 . . . zn a) (m, z1 . . . zn )
13/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Transition dexpansion
Si le sommet de pile est un non terminal X VN . . . . . . et que la tte de lecture est y VT {#}. . . e si Table[X , y ] contient X X1 . . . Xn : on dpile X ; e on empile ` sa place X1 . . . Xn , avec X1 au sommet. a (m, z1 . . . zn X ) sinon erreur.
14/119
(m, z1 . . . zn Xn . . . X1 )
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Expansion par X X1 . . . Xn : (m, z1 . . . zn X ) X1 sera trait en premier. e on assure ainsi la construction dune drivation gauche ; e (m, z1 . . . zn Xn . . . X1 )
15/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
on lui rajoute les ls X1 . . . Xn de la gauche vers la droite ; le prochain nud ` traiter devient X1 . a Transition de a-lecture : a est le prochain prxe) ; e nud ` traiter dans larbre (pour lordre a
on vrie que a concorde bien avec la tte de lecture ; e e et on passe au nud suivant.
16/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Mise en uvre
Les outils nimplantent pas un automate ` pile. a Ils utilisent une implmentation rcursive. e e Dans tous les cas, le choix de lexpansion est indiqu par une table e danalyse.
17/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
a b d e #
S S AB S AB S Da S Da S AB
18/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Denition
La table danalyse Table est un tableau ` deux dimensions tel que : a chaque colonne est indice par un non-terminal VN ; e chaque ligne est indice par un terminal VT ou # ; e chaque case contient une production P ou erreur. On verra plus tard comment remplir cette table.
19/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Interprtation de Table[a, X ] e
si le terminal a VT est sous la tte de lecture ; e et si le non-terminal en cours de traitement est X VN ; alors on consulte Table[a, X ]. Si Table[X , a] contient X alors on choisit une expansion par cette production ; erreur alors erreur de syntaxe : X et a ne saccordent pas.
20/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
21/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Exemple
Ecrire un analyseur syntaxique rcursif LL(1) Parser pour G : e S AB | Da A aAb | B bB | D dD | e ` A voir : criture de S(), A(), B(), D() ; e collaboration avec un analyseur lexical.
23/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
public void analyser() throws ScannerException, ParserExcep // positionnement tete de lecture this.teteLect = (Symbole) this.anLex.next_token(); this.S(); // je veux reconna^tre laxiome // et uniquement laxiome if (this.teteLect.getType() != TS.EOF) throw new ParserException(); }
Mirabelle Nebut Analyse descendante LL(k)
26/119
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Code de S()
La tte de lecture est dj` positionne sur le symbole de prdiction. e ea e e
private void S() throws ... { if (this.teteLect.getType() == TS.a) ... // S -> AB else if (this.teteLect.getType() == TS.b) ... // S -> AB else if (this.teteLect.getType() == TS.d) ... // S -> Da else if (this.teteLect.getType() == TS.e) ... // S -> Da else if (this.teteLect.getType() == TS.EOF) ... // S -> AB else throw new ParserException(); 27/119 }
Mirabelle Nebut Analyse descendante LL(k)
a b d e #
S S AB S AB S Da S Da S AB
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Code de S()
On factorise. private void S() throws ... { if (this.teteLect.getType() == TS.a || this.teteLect.getType() == TS.b || this.teteLect.getType() == TS.EOF) ... // S -> AB else if (this.teteLect.getType() == TS.d || this.teteLect.getType() == TS.e) ... // S -> Da else throw new ParserException(); }
28/119
a b d e #
S S AB S AB S Da S Da S AB
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Code pour S AB : je veux reconna A puis B ; tre A() ; B() ; Code pour S Da : je veux reconna D. . . tre . . . puis vrier que a est bien sous la tte de lecture ; e e et consommer a.
29/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
a b d e #
S S AB S AB S Da S Da S AB
Quand S() termine, pour un mot accept, la tte de lecture est sur e e TS.EOF.
31/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Code de A()
La tte de lecture est dj` positionne sur le symbole de prdiction. e ea e e A A aAb A erreur erreur A
private void A() throws ... { if (this.teteLect.getType() == TS.a) ... // A -> aAb else if (this.teteLect.getType() == TS.b || this.teteLect.getType() == TS.EOF) ... // A -> else // erreur throw new ParserException(); }
32/119
a b d e #
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
le mot vide est immdiatement reconnu ; e sans toucher ` la tte de lecture ; a e on ne fait rien.
33/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
a b d e #
private void A() throws ... { if (this.teteLect.getType() == TS.a) { // A -> aAb this.consommer(TS.a); A(); this.consommer(TS.b); } else if (this.teteLect.getType() == TS.b || this.teteLect.getType() == TS.EOF) // rien, A -> } else // erreur throw new ParserException(); }
Quand A() termine, pour un mot accept, la tte de lecture est e e positionne pour reconna un B ou lire un b. e tre
34/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
a b d e #
private void B() throws ... { if (this.teteLect.getType() == TS.b) { // B -> bB this.consommer(TS.b); B(); } else if (this.teteLect.getType() == TS.EOF) // rien, B -> } else // erreur throw new ParserException(); }
35/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
a b d e #
private void D() throws ... { if (this.teteLect.getType() == TS.d) { // D -> dD this.consommer(TS.d); D(); } else if (this.teteLect.getType() == TS.e) // D -> e this.consommer(TS.e); else // erreur throw new ParserException(); }
36/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Exemple dexcution e
37/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
38/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
39/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Comment choisir entre S AB et S Da ? Supposons que je sache que : AB ne permet de driver que des mots prxs par a ou par b ; e e e AB au et AB bu, pour u VT ; Da ne permet de driver que des mots prxs par d ou par e ; e e e Da du et Da eu, pour u VT .
40/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
a b d e #
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Denition
Soit une grammaire algbrique. On dnit : e e Premier : (VT VN ) P(VT ) {a VT | au, u VT }
42/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
S B A B B A
S B
b S D a
(VT VN )
Premier ()
Analyse descendante LL(k)
43/119
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
? ?
= X , X VN , (VN VT ) :
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
? ?
= X , X VN , (VN VT ) :
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Calcul de Premier (X ), X VN
Si lensemble des productions de membre gauche S est : S AB | Da alors on a : Premier (S) = Premier (AB) Premier (Da) Cas gnral : Si la grammaire contient les productions de membre e e gauche X : X 1 | . . . | n alorsPremier (X ) = {Premier (i ) | X i P}
Analyse descendante LL(k)
46/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
{Premier (i ) | X i P} ?
= X , X VN , (VN VT ) :
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
seacer X ?
ou non :
Si X
48/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
S D D d a e D
49/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Premier (AB) = Premier (A) Premier (B) Premier (ABS) = Premier (A) Premier (BS) Donc, si X
A a
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
On proc`de en deux tapes : e e 1. on pose un syst`me dquations pour Premier ; e e 2. on calcule par itration de point xe les plus petits ensembles e qui satisfont ces quations. e Pour le moment on suppose donn -Prod, lensemble des e -productifs.
52/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Exemple
S AB | Da A aAb | B bB | D dD | e -Prod = {A, B, S} Premier (S) = ? Premier (A) = ? Premier (B) = ? Premier (D) = ?
= :
= a, a VT : {a} = a, a VT , (VN VT ) : {a} = X , X VN : {Premier (i ) | X i P} = X , X VN \ -Prod, (VN VT ) : Premier (X ) = X , X VN -Prod, (VN VT ) : Premier (X ) Premier ()
53/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Exemple
Premier (S) = Premier (A) Premier (B) Premier (D) Premier (A) = {a} Premier (B) = {b} Premier (D) = {d, e} Do` u Premier (S) = {a, b, d, e} Premier (A) = {a} Premier (B) = {b} Premier (D) = {d, e} Premier (AB) = {a, b} Premier (Da) = {d, e} Premier (aAb) = {a} Premier (bB) = {b} Premier (dD) = {d} Premier (e) = {e} Premier ( ) =
54/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
a b d e #
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
a b d e #
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Premier (S) = Premier (A) Premier (B) Premier (D) Premier (A) = {a} Premier (B) = {b} Premier (D) = {d, e} Se rsoud sans itration de point xe : syst`me dquations non e e e e rcursif. e Ce nest pas toujours le cas.
57/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
stabilisation
58/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
59/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Exemple
S AB | Da A aAb | B bB | D dD | e -Prod ?
61/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
62/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Pour choisir entre S AB et S Da : si tte lecture {a, b} : choisir S AB ; e si tte lecture {d, e} : choisir S Da. e Et si la tte de lecture est # ? # Premier (AB) Premier (Da). e Comment choisir entre A aAb et A ? Premier ( ) = les ensembles Premier ne susent pas.
63/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
b Suivant(A)
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
a b d e #
65/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Pour (VT VN )+ , Suivant() contient lensemble des terminaux de VT susceptibles de suivre dans un mot de VT + driv de laxiome S. e e Si = , cet ensemble est vide. Par convention, Suivant(S) {#}.
66/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Denition
Suivant : (VT VN ) P(VT ) {a Premier () | S , pour , (VN VT ) }
67/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
S AB
S B
b
68/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Soit PX P lensemble des productions p dans lesquelles X appara en partie droite : t Suivant(X ) =
pPX
Suivant p (X )
69/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Pour laxiome, on ajoute le marqueur de n de mot : Suivant(S) = {#} Ex : pour X aXb | PX = {X aX b} Suivant(X ) = {#} Suivant(X )X aX b
pPS
Suivant p (S)
70/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Suivant(A) Suivant(S)
72/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
73/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Denition
(VN VT ) est -productif si . On dnit la fonction : e Eps : (VN VT ) {vrai, faux} est -productif On verra apr`s comment calculer Eps. e
74/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Suivant p (X ) = Premier ()
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Suivant p (X ) = Suivant(Y )
76/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Remarque - 1
Si X appara plusieurs fois en partie droite dune production, il t faut prendre en compte toutes ses occurrences dans le calcul de Suivant(X ). Ex : Y X aX aX c Suivant Y X aX aX c (X ) = {a, c}
78/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Remarque - 2
Pourquoi pas Suivant(X )Y X = Premier () Suivant() ? Parce que Suivant(Y ) Suivant(). Ex : S Y |Z Y X1 X2 X1 a X2 | b Z X2 c Suivant(S) = {#} Suivant(Y ) = Suivant(S) = {#} Suivant(Z ) = Suivant(S) = {#} Suivant(X2 ) = {c} Suivant(Y ) = {c, #} Suivant(X1 ) = Premier (X2 ) Suivant(Y )
79/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Suivant p (X )
avec : Suivant p (X ) = cas p = Y X : Suivant(Y ) p = Y X et Eps() = faux : Premier () p = Y X et Eps() = vrai : Premier () Suivant(Y ) ncas
80/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
On proc`de en deux tapes : e e on pose un syst`me dquations pour Suivant ; e e on calcule par itration de point xe les plus petits ensembles e qui satisfont ces quations. e avec initialement Suivant(S) = {#}, et pour les autres non-terminaux Suivant(X ) = .
81/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Exemple
S AB | Da A aAb | B bB | D dD | e Eps(B) = vrai Suivant ? # Suivant(axiome) Suivant(X ) = avec : cas p= p= p= ncas
82/119
pPX
Suivant p (X )
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
a b d e #
83/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
a b d e #
84/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Exemple
86/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
87/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
88/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Remplissage de la table
Entre : une gram. alg. G , ses ensembles Premier et Suivant e Sortie : la table danalyse Table pour toute production X P faire pour tout a Premier () faire ajouter X ` Table[X , a] fait a si Eps() = vrai alors pour tout b Suivant(X ) faire Table[X , b] = X fait finsi fait Ajouter erreur dans les entres de Table restes vides e e
89/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Exemple
S AB : Premier (AB) = {a, b} ; Eps(AB) = vrai ; Suivant(S) = {#}. S Da : Premier (Da) = {d, e} ; Eps(Da) = faux. Rien ` complter par erreur. a e
90/119
a b d e #
S S AB S AB S Da S Da S AB
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse
Exemple
A aAb : Premier (aAb) = {a} ; Eps(aAb) = faux. A : Premier ( ) = ; Eps( ) = vrai ; Suivant(A) = {b, #}. On compl`te par erreur. e
91/119
a b d e #
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
92/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Analyseur LL(1)
Un analyseur LL(1) est dterministe et pilot par le sommet de e e pile : si terminal a : lecture de a (ou erreur) ; si non terminal X avec a sous la tte de lecture : expansion e selon Table[X , a]. Et si Table[X , a] contient plus dune production ? Non-dterminisme : e la grammaire nest pas LL(1) ; on ne peut pas appliquer une analyse LL(1).
93/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
LL(1) et ambigu e t
Une grammaire LL(1) nest pas ambigu. e Une grammaire ambigu nest pas LL(1). e
95/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
non factorisation gauche : S aA | aB Solutions : : factorisation ` gauche (parfois) ; a suppression de la rcursivit gauche (parfois) ; e e utiliser un gnrateur de parser plus puissant ! e e
96/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
97/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
98/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Les listes didenticateur de Init : listeIdent IDENT | IDENT SEPVAR listeIdent On factorise IDENT et on obtient : listeIdent IDENT suiteListeIdent suiteListeIdent | SEPVAR listeIdent
99/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
X ab | abbX | abbbX Factorisation de ab : on prend le plus grand prxe commun. e X abY Y | bX | bbX Puis ` nouveau factorisation de b. a
100/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
102/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Rcursivit gauche : e e immdiate : production AA, (VT VN )+ ; e gnrale : il existe une drivation A A, (VT VN )+ . e e e Il est possible de supprimer les deux cas. On ne verra que la rcursivit immdiate. e e e
103/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
X 1 X | . . . | m X X 1 X | . . . | n X |
105/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
La grammaire ({a, b}, {S, A}, S, P) avec P = {S aSb | A, A aA | } nest pas ambigu ; e nest pas rcursive gauche ; e est factorise ` gauche ; e a mais elle nest pas LL(1).
106/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
La grammaire ({a, b}, {A, B}, A, P) avec P = {A abB | , B Aaa | b} nest pas LL(1). En eet Eps(A) = vrai et a Premier (A) Suivant(A).
107/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Principes Analyseur rcursif e Construction de la table danalyse Ensembles Premier Ensemble des -prod Ensembles Suivant Remplissage de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Factorisation ` gauche a Suppression de la rcursivit ` gauche e ea Analyseurs LL(k), LL(*)
108/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
P = {A abB | , B Aaa | b} Cette grammaire est LL(2) : Premier 2 (A) = {ab} Premier 2 (B) = {ab, aa, b} Suivant 2 (A) = {aa, #}
110/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
A B
111/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
112/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
method type ID [ args ] ; | type ID [ args ] { body } args unarg | unarg , args unarg INT ID ... Cette grammaire nest pas LL(k), mais est accepte par antLR. e
113/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Analyseurs LL(*)
Ne xent pas une taille de look-ahead a priori. Reprsentent par un AFD le langage de look-ahead, pourvu quil e soit rgulier. e
114/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Mme un analyseur LL(*) refuse la rcursivit gauche. e e e Fcheux pour les grammaires ` oprateurs ! a a e Solution : grammaires dites en forme eBNF. E T ( + T) * T F ( * T) * F ( E ) | id E E +T | T T F *T | F F ( E ) | id
115/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Grammaires algbriques avec facilits dcriture. e e e En partie droite de production : oprateurs ` la expression rguli`re e a e e Refus par Cup et tout gnrateur de parseur nacceptant pas les e e e eBNF Accept par la majorit des analyeurs LL(k). e e Semble plus simple, attention ` lattribution. a Ne pas utiliser en DS sauf si explicitement demand. e
116/119
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
Mirabelle Nebut
Principes Analyseur rcursif e Construction de la table danalyse Caractrisation dune grammaire LL(1) e Quand une grammaire nest pas LL(1) Analyseurs LL(k), LL(*)
AntLR
Outil tr`s riche. e Dcrit dans le mme formalisme eBNF les entits lexicales et la e e e syntaxe. Lit toute lentre avant de lancer lanalyse lexicale. e
120/119
Mirabelle Nebut