Anda di halaman 1dari 162

Rappel : Langages et Grammaires

Analyse Syntaxique

Techniques de compilation
Analyse Syntaxique

R. EZZAHIR1
1 Dpartement d'Informatique
cole Nationale des Sciences Appliques
ENSA-Agadir
Universit Ibn Zohr

21 avril 2014

R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Plan

1 Rappel : Langages et Grammaires


2 Analyse Syntaxique

Principe
Analyse descendante rcursive
Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Grammaires de rcriture

Une grammaire de rcriture est un 4-uplet (N , , S , P ) :


N est un ensemble de symboles non terminaux, appel l'alphabet
non terminal nots A, B, etc.
est un ensemble de symboles terminaux, appel l'alphabet
terminal, tel que N et soient disjoints. Les symboles terminaux
sont typiquement les lexmes produits par l'analyseur syntaxique
nots a, b, etc.
S est le symbole de dpart, appel axiome, est un lment de N ;
P est un sous ensemble ni de :
(N ) (N )

un lment (, ) de P, que l'on note , 6= est appel une


rgle de production ou rgle de rcriture.
est appel partie gauche de la rgle
est appel partie droite de la rgle
R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Grammaires de rcriture

Une grammaire de rcriture est un 4-uplet (N , , S , P ) :


N est un ensemble de symboles non terminaux, appel l'alphabet
non terminal nots A, B, etc.
est un ensemble de symboles terminaux, appel l'alphabet
terminal, tel que N et soient disjoints. Les symboles terminaux
sont typiquement les lexmes produits par l'analyseur syntaxique
nots a, b, etc.
S est le symbole de dpart, appel axiome, est un lment de N ;
P est un sous ensemble ni de :
(N ) (N )

un lment (, ) de P, que l'on note , 6= est appel une


rgle de production ou rgle de rcriture.
est appel partie gauche de la rgle
est appel partie droite de la rgle
R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Grammaires de rcriture

Une grammaire de rcriture est un 4-uplet (N , , S , P ) :


N est un ensemble de symboles non terminaux, appel l'alphabet
non terminal nots A, B, etc.
est un ensemble de symboles terminaux, appel l'alphabet
terminal, tel que N et soient disjoints. Les symboles terminaux
sont typiquement les lexmes produits par l'analyseur syntaxique
nots a, b, etc.
S est le symbole de dpart, appel axiome, est un lment de N ;
P est un sous ensemble ni de :
(N ) (N )

un lment (, ) de P, que l'on note , 6= est appel une


rgle de production ou rgle de rcriture.
est appel partie gauche de la rgle
est appel partie droite de la rgle
R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Grammaires de rcriture

Une grammaire de rcriture est un 4-uplet (N , , S , P ) :


N est un ensemble de symboles non terminaux, appel l'alphabet
non terminal nots A, B, etc.
est un ensemble de symboles terminaux, appel l'alphabet
terminal, tel que N et soient disjoints. Les symboles terminaux
sont typiquement les lexmes produits par l'analyseur syntaxique
nots a, b, etc.
S est le symbole de dpart, appel axiome, est un lment de N ;
P est un sous ensemble ni de :
(N ) (N )

un lment (, ) de P, que l'on note , 6= est appel une


rgle de production ou rgle de rcriture.
est appel partie gauche de la rgle
est appel partie droite de la rgle
R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Forme de Backus-Naur
Les Grammaires sont souvent crits dans la Forme de Backus-Naur (BNF)

Exemple
1
2
3
4
5
6

< >

but : :=
expr

< >
op

< >
< >< >< >
expr

: :=

expr

op

expr

| num
| id

: := +
| -

| *

| /

Celui-ci dcrit les expressions simples sur les nombres et les identicateurs.
Dans un BNF, nous reprsentons

1
2
3

non-terminaux par des chevrons 

<>

 ou majuscules

terminaux, avec les caractres minuscules ou souligner


productions comme dans l'exemple

EBNF : Extended BNF ( ?, {}, [],...).


R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Langage engendr par une grammaire


Dfinition

tant donn une grammaire G, le langage L(G) engendr par G est dni par
l'ensemble des mots engendrs par drivation partir du symbole de dpart S :
L(G) = {

m * | S G m}

Exemple

Soit la grammaire donne par les rgles :


S aSa|bSb|a|b| Nous obtenons, par exemple, les drivations Suivantes :
Sa
Sb
S aSa aaa
S aSa aba
S aSa aaSaa aaaaa
S aSa aaSaa aabaa etc..
Le langage gnr est donc L={a,b,aaa,aba,aaaaa,aabaa, ...} il s'agit du
langage des palindromes sur {a,b}
R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Langage engendr par une grammaire


Dfinition

tant donn une grammaire G, le langage L(G) engendr par G est dni par
l'ensemble des mots engendrs par drivation partir du symbole de dpart S :
L(G) = {

m * | S G m}

Exemple

Soit la grammaire donne par les rgles :


S aSa|bSb|a|b| Nous obtenons, par exemple, les drivations Suivantes :
Sa
Sb
S aSa aaa
S aSa aba
S aSa aaSaa aaaaa
S aSa aaSaa aabaa etc..
Le langage gnr est donc L={a,b,aaa,aba,aaaaa,aabaa, ...} il s'agit du
langage des palindromes sur {a,b}
R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Drivation gauche/droite

La drivation gauche : le non-terminal le plus gauche est remplac


chaque tape
La drivation droite : le non-terminal le plus droite est remplac
chaque tape
Ex. Grammaire sur = {a, b }, mot =

aaab

S AaB|  ;
A Sa| ;
B Sb|
Drivation gauche : S AaB SaaB aaB aaSb aaab
Drivation droite : S AaB AaSb Aab Saab Saaab aaab

R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Une grammaire, pour quoi faire ?

Une grammaire denit un langage, un ensemble de mots :


Par exemple, int, ou int + int, ou int * ( int + int ), etc.
De plus, une grammaire attribue a chacun de ces mots (au moins) une
structure, sous forme d'un arbre de production.

R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Arbres de drivation

On peut prfrer parler de drivation en termes d'arbres et non en termes


de mots par exemple :
Ex. Une grammaire pour les expressions arithmtiques

= {int, (, ), +, -, *, /}, N = {E}, S = E

E
E

E+E
E*E

E
E

E-E
E/E

R. EZZAHIR

(E)
 int

E
E

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Arbres de drivation (ou arbre syntaxique)

Un arbre de drivation pour G (G = N, , P, S ) est un arbre ordonn et


tiquet dont les tiquettes appartiennent l'ensemble N {} . Si
un nud de l'arbre est tiquet par le non terminal A et ses ls sont
tiquet X1 , X2 , ..., Xn alors la rgle A X1 , X2 , ..., Xn appartient P.
Racine = l'axiome S,
Feuilles = symboles terminaux {},
Nuds = symboles de N ;
Les ls d'un nud A sont les Xi tels que A X1 X2 ...Xn est une rgle
si w est le mot rsultant de la concatnation des feuilles,
alors S w

Exemple

Avec les rgles


{S aSc ,

S b}, aabcc

est un mot du langage, qui a


pour arbre de drivation
R. EZZAHIR

b
Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Arbres de drivation (ou arbre syntaxique)

Un arbre de drivation pour G (G = N, , P, S ) est un arbre ordonn et


tiquet dont les tiquettes appartiennent l'ensemble N {} . Si
un nud de l'arbre est tiquet par le non terminal A et ses ls sont
tiquet X1 , X2 , ..., Xn alors la rgle A X1 , X2 , ..., Xn appartient P.
Racine = l'axiome S,
Feuilles = symboles terminaux {},
Nuds = symboles de N ;
Les ls d'un nud A sont les Xi tels que A X1 X2 ...Xn est une rgle
si w est le mot rsultant de la concatnation des feuilles,
alors S w

Exemple

Avec les rgles


{S aSc ,

S b}, aabcc

est un mot du langage, qui a


pour arbre de drivation
R. EZZAHIR

b
Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Arbres de drivation (ou arbre syntaxique)

Un arbre de drivation pour G (G = N, , P, S ) est un arbre ordonn et


tiquet dont les tiquettes appartiennent l'ensemble N {} . Si
un nud de l'arbre est tiquet par le non terminal A et ses ls sont
tiquet X1 , X2 , ..., Xn alors la rgle A X1 , X2 , ..., Xn appartient P.
Racine = l'axiome S,
Feuilles = symboles terminaux {},
Nuds = symboles de N ;
Les ls d'un nud A sont les Xi tels que A X1 X2 ...Xn est une rgle
si w est le mot rsultant de la concatnation des feuilles,
alors S w

Exemple

Avec les rgles


{S aSc ,

S b}, aabcc

est un mot du langage, qui a


pour arbre de drivation
R. EZZAHIR

b
Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Ambigut

L'existence de plus d'un arbre de drivation pour un mme mot signie


que la grammaire est ambigu.
Le problme du if-else de nombreux langages

if <cond> if <cond> <instr> else <instr> (2 drivations possibles)


if condition
if condition
instruction
else
instruction

if condition
if condition
instruction
else
instruction

R. EZZAHIR

Techniques de compilation

Rappel : Langages et Grammaires


Analyse Syntaxique

Eviter l'ambigut : exemple

Le langage des expressions arithmetiques peut tre d'ecrit par une autre
grammaire.
On se donne trois non-terminaux E, T, et F, pour expressions, termes et
facteurs :
E E+T
T T/F
E E-T
T F
E T
F (E)
T T*F
F int
Cette dcomposition en niveaux, qui permet de reter des rgles de
priorit et d'associativit, est une technique classique.











R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Lignes directrices

1 Rappel : Langages et Grammaires


2 Analyse Syntaxique

Principe
Analyse descendante rcursive
Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Principe de l'analyse syntaxique

tant donn un mot terminal, dterminer s'il est ou non engendr par la
grammaire ; si oui, en donner un arbre d'analyse.
Entre : un mot qui consiste d'une suite d'units lexicales ou tokens
(jetons dj reconnus par l'analyseur lexical).
Objectif : Recherche d'un arbre de drivation syntaxique pour ce
mot.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Principe de l'analyse syntaxique

Mthodes :

Mthode ascendante :
on parcourt le mot en empilant
les symboles identis.

Donnes
lecture

ascendante

On parcourt le mot en appelant


des procdures pour chaque
non-terminal (analyse descente
rcursive), sauvant les
terminaux sont utilis pour
prdire les drivations (analyse
descente prdictive).

descendante

Mthode descendante : une procdure par non-terminal

Donnes

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Principe de l'analyse syntaxique

Mthodes :

Mthode ascendante :
on parcourt le mot en empilant
les symboles identis.

Donnes
lecture

ascendante

On parcourt le mot en appelant


des procdures pour chaque
non-terminal (analyse descente
rcursive), sauvant les
terminaux sont utilis pour
prdire les drivations (analyse
descente prdictive).

descendante

Mthode descendante : une procdure par non-terminal

Donnes

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Lignes directrices

1 Rappel : Langages et Grammaires


2 Analyse Syntaxique

Principe
Analyse descendante rcursive
Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Grammaire vers un programme non


dterministe

Une grammaire peut tre lue comme un programme non dterministe :


Exemple : Grammaire des exprssions arithmtiques
E () = E() ; consommer(+) ; T() ;
| E() ; consommer(-) ; T() ;
| T()

T () = T() ; consommer(*) ; F() ;


| T() ; consommer(/) ; F() ;
| F() ;

F() = consommer(() ; E() ; consommer(() ;


| consommer(int)
Les fonctions E(), T(), et F() consomment et renvoient () ou
lancent une exception.
Elles consomment la partie de l'entree qu'elles ont reconnue.
R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

Techniques de compilation

int +

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante (Exemple)

S
E

S E$
ET
ET+E
F int
T (E)
Analyser le mot :
w = int + (int + int)

E
T
E
T

E
T

int +
R. EZZAHIR

int +

Techniques de compilation

int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Les dfis d'analyse descendante

Commence du haut avec pratiquement aucune informations.


Dbut avec juste le symbole de dpart, ce qui correspond chaque
programme.
Comment pouvons-nous savoir quelles productions appliquer ? En
gnral, nous ne pouvons pas.
Il y a quelques grammaires pour lesquelles la meilleur chose que nous
pouvons faire est d'essayer et de revenir en arrire en cas d'chec.
Dans un tel cas, comment faire pour deviner ?

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse par recherche graphique

Ide : traiter l'analyse comme une recherche graphique (BFS, DFS).


Chaque nud correspond une phrase (une chane de terminaux et
non-terminaux). Il y a une arte d'un nud l'autre si il y a une
rgle de production de la premire phrase la seconde.
...

T$
S

...

(T)$

int$

(T + E)$

(E)$

T + T + E$

E$
T + E$

T + (E)$

int + T$

...
R. EZZAHIR

...

int + T + E$

T + T$

int + E$

...

int + (E)$
int + int$

Techniques de compilation

...

...
...

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse par recherche graphique

Ide : traiter l'analyse comme une recherche graphique (BFS, DFS).


Chaque nud correspond une phrase (une chane de terminaux et
non-terminaux). Il y a une arte d'un nud l'autre si il y a une
rgle de production de la premire phrase la seconde.
...

T$
S

...

(T)$

int$

(T + E)$

(E)$

T + T + E$

E$
T + E$

T + (E)$

int + T$

...
R. EZZAHIR

...

int + T + E$

T + T$

int + E$

...

int + (E)$
int + int$

Techniques de compilation

...

...
...

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

BFS est lente

Ide : utilisation de la recherche en largeur d'abord.


normment de temps et d'utilisation de la mmoire :
Beaucoup d'eorts gaspills :
Gnre un grand nombre de phrases qui ne pouvaient pas adapt
avec le mot reconnatre.
Mais, en gnral, il est extrmement dicile de dire si une phrase
peut correspondre ou non.
c'est le travail de l'analyse !

Facteur de branchement :
Chaque phrase peut se rcrire (potentiellement) en plusieurs faons
pour chaque non-terminal qu'elle contient.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Rduction de complexit (Leftmost BFS)

Supposons que nous essayons de faire correspondre une chane de


terminaux w.
Exemple : w = baaaaa

Supposons que nous avons la rgle v xy, o x est une chane de


terminaux et y est une chane de terminaux et non-terminaux.
Exemple : v abay ; y = bAb

Si x n'est pas un prxe de w, alors w ne peut pas driver de v.


Si nous pouvons trouver un moyen pour obtenir l'avant un prxe
de terminaux de nos phrase de production, alors nous pouvons
laguer les options impossibles.
Utiliser la drivation gauche (Leftmost derivation) pour rduire le
facteur de branche ainsi l'eort gaspill.
Problme du Leftmost BFS

toujours temps et mmoire exponentiels


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Rduction de complexit (Leftmost BFS)

Supposons que nous essayons de faire correspondre une chane de


terminaux w.
Exemple : w = baaaaa

Supposons que nous avons la rgle v xy, o x est une chane de


terminaux et y est une chane de terminaux et non-terminaux.
Exemple : v abay ; y = bAb

Si x n'est pas un prxe de w, alors w ne peut pas driver de v.


Si nous pouvons trouver un moyen pour obtenir l'avant un prxe
de terminaux de nos phrase de production, alors nous pouvons
laguer les options impossibles.
Utiliser la drivation gauche (Leftmost derivation) pour rduire le
facteur de branche ainsi l'eort gaspill.
Problme du Leftmost BFS

toujours temps et mmoire exponentiels


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Rduction de complexit (Leftmost BFS)

Supposons que nous essayons de faire correspondre une chane de


terminaux w.
Exemple : w = baaaaa

Supposons que nous avons la rgle v xy, o x est une chane de


terminaux et y est une chane de terminaux et non-terminaux.
Exemple : v abay ; y = bAb

Si x n'est pas un prxe de w, alors w ne peut pas driver de v.


Si nous pouvons trouver un moyen pour obtenir l'avant un prxe
de terminaux de nos phrase de production, alors nous pouvons
laguer les options impossibles.
Utiliser la drivation gauche (Leftmost derivation) pour rduire le
facteur de branche ainsi l'eort gaspill.
Problme du Leftmost BFS

toujours temps et mmoire exponentiels


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

Ide : utilisation de la recherche en profondeur d'abord.


Les Avantages :
utilisation faible de la mmoire : considre seulement une branche
la fois.
Haute performance : Sur plusieurs grammaires, fonctionne trs
rapidement.
Facile mettre en uvre : Peut tre crit comme un ensemble de
fonctions mutuellement rcursives.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$
:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$
:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
E$

S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$

:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
E$
T$

S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$

:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
E$
T$
int$

S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$

:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
E$
T$
int$

S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$

:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
E$
T$
(E)$

S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$

:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
E$
T$
(E)$

S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$

:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
E$
T$

S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$

:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
E$
T+E$

S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$

:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
E$
T+E$
int+E$

S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$

:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
E$
T+E$
int+E$
int+T$

S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$

:-)

""

R. EZZAHIR

ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Leftmost DFS

S
E$
T+E$
int+E$
int+T$
int+int$

S E$
ET
ET+E
T int
T (E)
Analyser le mot :
w = int + int$

R. EZZAHIR

"ok
"
:-)

:-)

" "!
Ok

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Problme de Leftmost DFS

Grammaire rcursive gauche.


S A$
A Aa
Ac
Analyser le mot :
w = c$

Problme$

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Problme de Leftmost DFS

Grammaire rcursive gauche.


S A$
A Aa
Ac
Analyser le mot :
w = c$

Problme$

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Problme de Leftmost DFS

Grammaire rcursive gauche.


S A$
A Aa
Ac

S
A$

Analyser le mot :
w = c$
Problme$

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Problme de Leftmost DFS

Grammaire rcursive gauche.


S A$
A Aa
Ac

S
A$
Aa$

Analyser le mot :
w = c$
Problme$

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Problme de Leftmost DFS

Grammaire rcursive gauche.


S A$
A Aa
Ac
Analyser le mot :
w = c$

S
A$
Aa$
Aaa$

Problme$

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Problme de Leftmost DFS

Grammaire rcursive gauche.


S A$
A Aa
Ac
Analyser le mot :
w = c$

S
A$
Aa$
Aaa$
Aaaa$
Problme$

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Problme de Leftmost DFS

Grammaire rcursive gauche.


S A$
A Aa
Ac
Analyser le mot :
w = c$

R. EZZAHIR

S
A$
Aa$
Aaa$
Aaaa$
Aaaaa$
Problme$

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Problme de Leftmost DFS

Grammaire rcursive gauche.


S A$
A Aa
Ac
Analyser le mot :
w = c$

R. EZZAHIR

S
A$
Aa$
Aaa$
Aaaa$
Aaaaa$
Problme$

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Problme de Leftmost DFS

Grammaire rcursive gauche.


S A$
A Aa
Ac
Analyser le mot :
w = c$
Et si la grammaire et rcursive
droite : A aA au lieu de A
Aa.

R. EZZAHIR

S
A$
Aa$
Aaa$
Aaaa$
Aaaaa$
Problme$

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

La rcursivit gauche

Un non-terminal A est dit rcursive gauche si A * Aw


Pour certains chane de terminaux et de non-terminaux w,
Leftmost DFS peut chouer sur les grammaires rcursives gauche .
Heureusement, dans de nombreux cas il est possible de d'liminer la
rcursivit gauche (HW : comment ?).

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Rsum de Leftmost DFS/BFS

Leftmost BFS fonctionne sur tous les grammaires.


le pire des cas d'excution est exponentielle.
le pire des cas de la mmoire utilise est exponentielle.
Rarement utilis dans la pratique.

Leftmost DFS fonctionne sur les grammaires sans rcursion gauche.


le pire des cas d'excution est exponentielle.
le pire des cas de l'utilisation de la mmoire est linaire.
Souvent utilis en sa forme limit comme analyseur descendant
rcursif.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Rsum de Leftmost DFS/BFS

Leftmost BFS fonctionne sur tous les grammaires.


le pire des cas d'excution est exponentielle.
le pire des cas de la mmoire utilise est exponentielle.
Rarement utilis dans la pratique.

Leftmost DFS fonctionne sur les grammaires sans rcursion gauche.


le pire des cas d'excution est exponentielle.
le pire des cas de l'utilisation de la mmoire est linaire.
Souvent utilis en sa forme limit comme analyseur descendant
rcursif.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Lignes directrices

1 Rappel : Langages et Grammaires


2 Analyse Syntaxique

Principe
Analyse descendante rcursive
Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse prdictive

Leftmost DFS/BFS sont des algorithmes avec retour arrire.


Deviner la production utiliser, puis la sauvegarder si elle ne
fonctionne pas.
Essayer de faire correspondre un prxe par coup de chance pure.

Il y a une autre classe d'algorithmes d'analyse appel algorithmes


prdictifs.
Bass sur l'entre restante, ils prdisent (sans retour en arrire) la
production utiliser.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Compromis dans la prvision

Les analyseurs prdictifs sont rapides.


De nombreux algorithmes prdictifs peuvent tre faites pour
fonctionner en temps linaire.
Souvent peuvent tre dtermins par des tables pour des
performances supplmentaires.

Les analyseurs prdictifs sont faibles.


Pas toutes les grammaires peuvent tre acceptes par les analyseurs
prdictive.

Leur commercialisation est explique par leur rapidit.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Compromis dans la prvision

Les analyseurs prdictifs sont rapides.


De nombreux algorithmes prdictifs peuvent tre faites pour
fonctionner en temps linaire.
Souvent peuvent tre dtermins par des tables pour des
performances supplmentaires.

Les analyseurs prdictifs sont faibles.


Pas toutes les grammaires peuvent tre acceptes par les analyseurs
prdictive.

Leur commercialisation est explique par leur rapidit.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Compromis dans la prvision

Les analyseurs prdictifs sont rapides.


De nombreux algorithmes prdictifs peuvent tre faites pour
fonctionner en temps linaire.
Souvent peuvent tre dtermins par des tables pour des
performances supplmentaires.

Les analyseurs prdictifs sont faibles.


Pas toutes les grammaires peuvent tre acceptes par les analyseurs
prdictive.

Leur commercialisation est explique par leur rapidit.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Exploiter l'anticipation

Compte tenu de tout symbole de dpart, comment choisir les productions


utiliser pour obtenir l'entre du programme ?
Ide : jetons d'anticipation.
Utiliser les connaissances des terminaux qui doivent tre adapt pour
choisir la bonne production utiliser.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Exploiter l'anticipation

Compte tenu de tout symbole de dpart, comment choisir les productions


utiliser pour obtenir l'entre du programme ?
Ide : jetons d'anticipation.
Utiliser les connaissances des terminaux qui doivent tre adapt pour
choisir la bonne production utiliser.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Lignes directrices

1 Rappel : Langages et Grammaires


2 Analyse Syntaxique

Principe
Analyse descendante rcursive
Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Premier analyseur prdictif : LL (1)

Analyse descendante prdictive LL(1) :


L : (Left-to-right) balayage des jetons de gauche droite.
L : (Leftmost derivation) drivation la plus gauche.
(1) : Un seul jeton est utiliser pour l'anticipation
Construire une drivation gauche pour la squence de jetons.
Lors de l'expansion d'un non-terminal, l'analyseur prdit la
production utiliser en en analysant le prochain symbole sous la tte
de lecture. La dcision est forc.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Table d'analyse LL(1)

Contient toute l'intelligence de l'analyseur.

table d'analyse pour la

Dfinition

C'est un tableau a deux dimensions tel

que :
chaque colonne est indice par un
non-terminal

N;

grammaire :







E$
int
(E Op E)

Op

Op

Table d'analyse

int

E$

E$

int

(E Op E)

chaque ligne est indice par un


terminal

ou $ ;

chaque case contient une production

P ou erreur.

Op

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Table d'analyse LL(1)

Contient toute l'intelligence de l'analyseur.

table d'analyse pour la

Dfinition

C'est un tableau a deux dimensions tel

que :
chaque colonne est indice par un
non-terminal

N;

grammaire :







E$
int
(E Op E)

Op

Op

Table d'analyse

int

E$

E$

int

(E Op E)

chaque ligne est indice par un


terminal

ou $ ;

chaque case contient une production

P ou erreur.

Op

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive


S

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

(int + (int * int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive


1

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

(int + (int * int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive


1

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

Op E)$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

+ (int * int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

Op E)$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

+ (int * int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

(int * int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

(int * int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

int Op E))$

int * int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

int Op E))$

int * int))$

Op E))$
4

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

* int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

5
4

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

int Op E))$

int * int))$

Op E))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

* int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

5
4

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

int Op E))$

int * int))$

Op E))$

* int))$

* E))$

* int))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

5
4

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

int Op E))$

int * int))$

Op E))$

* int))$

* E))$

* int))$

E))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

5
4

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

int Op E))$

int * int))$

Op E))$

* int))$

* E))$

* int))$

E))$

(int + (int * int))$ ?


R. EZZAHIR

Techniques de compilation

int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

5
4

(int + (int * int))$ ?


R. EZZAHIR

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

int Op E))$

int * int))$

Op E))$

* int))$

* E))$

* int))$

E))$

int))$

int))$

int))$

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

5
4

(int + (int * int))$ ?

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

int Op E))$

int * int))$

Op E))$

* int))$

* E))$

* int))$

E))$

int))$

int))$

int))$

))$

R. EZZAHIR

Techniques de compilation

))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

5
4

(int + (int * int))$ ?


R. EZZAHIR

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

int Op E))$

int * int))$

Op E))$

* int))$

* E))$

* int))$

E))$

int))$

int))$

int))$

))$

))$

)$

)$

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *







(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

2
int

Op

$
5

(int + (int * int))$ ?


R. EZZAHIR

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

int Op E))$

int * int))$

Op E))$

* int))$

* E))$

* int))$

E))$

int))$

int))$

int))$

))$

))$

)$

)$

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse descendante prdictive

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int + (int * int))$

E$

(int + (int * int))$

(E Op E)$

(int + (int * int))$

E Op E)$

int + (int * int))$

int Op E)$

int + (int * int))$

5
4

:-)

(int + (int * int))$ ?


" " ok
R. EZZAHIR

Op E)$

+ (int * int))$

+ E)$

+ (int * int))$

E)$

(int * int))$

(E Op E))$

(int * int))$

E Op E))$

int * int))$

int Op E))$

int * int))$

Op E))$

* int))$

* E))$

* int))$

E))$

int))$

int))$

int))$

))$

))$

)$

)$

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Analyse prdictive LL(1), Exercice- 1

S AB |Da
A aAb | 
B bB | 
D dD | e

abb$ ?

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int (int))$ ?
R. EZZAHIR

Techniques de compilation

(int (int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int (int))$ ?
R. EZZAHIR

Techniques de compilation

(int (int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int (int))$

E$

(int (int))$

(int (int))$ ?
R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int (int))$

E$

(int (int))$

(int (int))$ ?
R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int (int))$

E$

(int (int))$

(E Op E)$

(int (int))$

(int (int))$ ?
R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int (int))$

E$

(int (int))$

(E Op E)$

(int (int))$

(int (int))$ ?
R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int (int))$

E$

(int (int))$

(E Op E)$

(int (int))$

E Op E)$

int (int))$

(int (int))$ ?
R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int (int))$

E$

(int (int))$

(E Op E)$

(int (int))$

E Op E)$

int (int))$

(int (int))$ ?
R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int (int))$

E$

(int (int))$

(E Op E)$

(int (int))$

E Op E)$

int (int))$

int Op E)$

int (int))$

(int (int))$ ?
R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *






int

Op

(int (int))$

E$

(int (int))$

(E Op E)$

(int (int))$

E Op E)$

int (int))$

int Op E)$

int (int))$

(int (int))$ ?
R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *







(int (int))$

E$

(int (int))$

(E Op E)$

(int (int))$

E Op E)$

int (int))$

int Op E)$

int (int))$

2
int

Op

Op E)$

(int (int))$ ?
R. EZZAHIR

Techniques de compilation

(int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Dtection d'erreurs

Grammaire :
1. S E$
2. E int
3. E (E Op E)
4. Op +
5. Op *







(int (int))$

E Op E)$

int (int))$
int (int))$

int Op E)$

Op E)$

Op

(int (int))$

(E Op E)$
1
2

(int (int))$

E$

3
int
S

(int (int))$ ?
" "
:-(

Non !

R. EZZAHIR

Techniques de compilation

(int))$

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Algorithme LL (1)

Compte tenu d'un table d'analyse LL(1) T et l'entre w :


Initialiser une pile contenant S.
Rptez jusqu' ce que le sommet de la pile devient $ :
c et le caractre Suivant de w
Si le sommet de la pile est un terminal t :
Si c et t ne correspondent pas, signaler une erreur.
Sinon, consommer le caractre c et dpiler t de la pile.

Dans le cas contraire, le sommet de la pile est un non-terminal A :


Si T [A, c] est indni, signaler une erreur.
Replacer e sommet de la pile par T [A, c].

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Lignes directrices

1 Rappel : Langages et Grammaires


2 Analyse Syntaxique

Principe
Analyse descendante rcursive
Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

R. EZZAHIR

not

++

Techniques de compilation

id

const

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

R. EZZAHIR

not

++

Techniques de compilation

id

const

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

R. EZZAHIR

not

++

Techniques de compilation

id

const

10

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

R. EZZAHIR

not

++

Techniques de compilation

id

const

10

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

not

++

R. EZZAHIR

Techniques de compilation

id

const

10

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

not

++

R. EZZAHIR

Techniques de compilation

id

const

10

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

not

++

R. EZZAHIR

Techniques de compilation

id

const

4
9

4
10

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

not

++

R. EZZAHIR

Techniques de compilation

id

const

4
9

4
10

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

not

++

R. EZZAHIR

Techniques de compilation

id

const

4
9

4
10

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

not

++

R. EZZAHIR

Techniques de compilation

id

const

4
9

4
10

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

R. EZZAHIR

3
5

not

3
6

++

3
7

3
8

Techniques de compilation

id

const

4
9

4
10

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

R. EZZAHIR

3
5

not

3
6

++

3
7

3
8

Techniques de compilation

id

const

4
9

4
10

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Construction de la table d'analyse LL

if EXPR then STMT


| while EXPR do STMT
| EXPR ;
EXPR
TERM id
| zero TERM
| not EXPR
| ++ id
| id
TERM id
| constant
STMT

(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)

STMT
EXPR
TERM

if

then

while

do

zero

R. EZZAHIR

3
5

not

3
6

++

3
7

3
8

Techniques de compilation

id

3
4
9

const

3
4
10

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Fonctions Premier et Suivant

Premier(x) = ensemble des terminaux pouvant apparatre au dbut


d'une drivation de x :
Premier(x) = {a |

x a , }

Suivant(x) = ensemble des terminaux pouvant suivre x dans une


drivation. C'est--dire t Suivant(x) s'il y a une drivation qui
contient xt :
Suivant(x) ={a | S xa , pour , N }
Suivant(x)={a Premier ( ) |S x pour , N }

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Premier sur les arbres syntaxiques

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

calcul de Premier

Soit N * :
cas
=  :?
= a, a : ?
= a , a , N : ?
= X, X N : ?
= X , X N , N : ?
n-cas

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

calcul de Premier

Soit N * :
cas
=:
= a, a : {a}
= a , a , N : {a}
= X, X N : ?
= X , X N , N : ?
n-cas

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Calcul de Premier (X), X

Si l'ensemble des productions de membre gauche S est :


S AB | Da alors on a :
Premier (S) = Premier (AB) Premier (Da)

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Calcul de Premier (X), X

Si l'ensemble des productions de membre gauche S est :


S AB | Da alors on a :
Premier (S) = Premier (AB) Premier (Da)
Gnralisation

Si la grammaire contient les productions de membre gauche X : X


1 |...|n

Premier (X) = {Premier ( i ) | X i P }


R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

calcul de Premier

Soit N * :
cas
=:
= a, a : {a}
= a , a , N : {a}
= X, X N : {Premier ( i ) | X i P }
= X , X N , N : ?
n-cas

R. EZZAHIR

Techniques de compilation

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Calcul des Premier

= X , X

Si X n'est pas annulable


(X
/ -Prod ou X 
/P):

Premier() = Premier(X)
Exemple

D dD | e
alors Premier(Da) = Premier(D)
R. EZZAHIR

Exemple

A aAb |  alors

Premier(AB) = Premier(A) Premier (B)


Techniques de compilation

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Calcul des Premier

= X , X

Si X n'est pas annulable


(X
/ -Prod ou X 
/P):

Premier() = Premier(X)
Exemple

D dD | e
alors Premier(Da) = Premier(D)
R. EZZAHIR

Exemple

A aAb |  alors

Premier(AB) = Premier(A) Premier (B)


Techniques de compilation

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Calcul des Premier

Si X n'est pas annulable


(X
/ -Prod ou X 
/P):

= X , X

Si X est annulable ( X-Prod ou


X  / P ) :

Premier() =
Premier(X) Premier ( )

Premier() = Premier(X)
Exemple

D dD | e
alors Premier(Da) = Premier(D)
R. EZZAHIR

Exemple

A aAb |  alors

Premier(AB) = Premier(A) Premier (B)


Techniques de compilation

Principe
Analyse descendante rcursive

Rappel : Langages et Grammaires

Analyse syntaxique prdictive

Analyse Syntaxique

Analyseur LL(1)
Table d'analyse

Calcul des Premier

Si X n'est pas annulable


(X
/ -Prod ou X 
/P):

= X , X

Si X est annulable ( X-Prod ou


X  / P ) :

Premier() =
Premier(X) Premier ( )

Premier() = Premier(X)
Exemple

D dD | e
alors Premier(Da) = Premier(D)
R. EZZAHIR

Exemple

A aAb |  alors

Premier(AB) = Premier(A) Premier (B)


Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

calcul de Premier

Soit N * :
cas
=:
= a, a : {a}
= a , a , N : {a}
= X, X N : {Premier ( i ) | X i P }
= X , X N , N :
X
/ -Prod : Premier(X)
X-Prod : Premier(X) Premier ( )

n-cas

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Exercice

S AB | Da
A aAb | 
B bB | 
D dD | e
Calculer :
-Prod = ?
Premier(S) = ?
Premier(A) = ?
Premier(B) = ?
Premier(D) = ?

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Exercice

S AB | Da
A aAb | 
B bB | 
D dD | e
Calculer :
-Prod = {A,B,S}
Premier(S) = Premier (A) Premier (B ) Premier (D )
Premier(A) = {a}
Premier(B) = {b}
Premier(D) = {d,e}

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

calcul de Premier (Mthode 2)

On construit un graphe entre tous les symboles.


Flche de X vers y ssi X
y , et est annulable.
Ici, ne peut contenir que des variables, est quelconque.
Premier(X) = { a terminal | il existe un chemin de X a } ;
si X est annulable, il faut y ajouter .

Exemple de la grammaire ci-contre : Annulables : G et U


Graphe :
S
E
T
F
(
G
+
U
*

   
&

S
E
G
T
U
F

int

Premier(A) = Premier(E) = Premier(T) = Premier(F) = { (, int }


Premier(G) = {+,  } Premier(U) = { *,  }
R. EZZAHIR

Techniques de compilation

 E$
 TG
 +TG | 
 FU
 *FU | 
 (E) | int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Ensemble Suivant

Quand appliquer A 

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Ensemble Suivant

Quand appliquer A 
Quand la tte de lecture correspond a un terminal qui peut suivre A.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Ensemble Suivant

$ Suivant(axiome)
Soit P X P l'ensemble des productions P dans lesquelles X apparat en
partie droite :
Suivant(X) = pP X Suivantp (X )

avec : Suivantp (X ) =
cas
p=Y
p=Y
p=Y

ncas

 X : Suivant(Y )
 X et Eps( ) = faux : Premier ( )
 X et Eps( ) = vrai : Premier ( ) Suivant(Y )

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Calcul de Suivant

On construit un graphe entre tous les symboles.


Flche de X vers y ssi ou bien
il existe Z  X , y est terminal et y Premier( ) ;
il existe y  X et est annulable.
Ici, et sont quelconques, mme vides, et y 6= .
Suivant(X) = { a terminal | il existe un chemin de X a }.
S
E
G
T
U
F

R. EZZAHIR

Techniques de compilation

 E$
 TG
 +TG | 
 FU
 *FU | 
 (E) | int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Calcul de Suivant

On construit un graphe entre tous les symboles.


Flche de X vers y ssi ou bien
il existe Z  X , y est terminal et y Premier( ) ;
il existe y  X et est annulable.
Ici, et sont quelconques, mme vides, et y 6= .
Suivant(X) = { a terminal | il existe un chemin de X a }.
S
E
G
T
U
F

Suivant n'a pas de sens pour l'axiome S.


Suivant(G) = Suivant(E) = { $, ) }
Suivant(U) = Suivant(T) = { +, $, ) }
Suivant(F) = { *, +, $, ) }
R. EZZAHIR

Techniques de compilation

 E$
 TG
 +TG | 
 FU
 *FU | 
 (E) | int

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Algorithme final de table LL(1)

Calculer Premier(A) et Suivant(A) pour tout non-terminal A.


Pour chaque rgle A w faire :

pour chaque terminal t en Premier (w) faire :


T [A, t] = w.
Notez que  n'est pas un terminal !

Pour chaque rgle A

 w avec  dans le Premier(w)

pour chaque t dans Suivant(A) faire :


T [A, t] = w.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Caractriser les grammaires LL(1)

Si non annulable, rgle X  applique lorsque a Premier() ;


Si annulable, rgle X  applique lorsque a Suivant(X).
La grammaire est LL(1) lorsqu' chaque tape, une seule rgle
satisfait aux critres prcdents.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Caractriser les grammaires LL(1)

Caractrisation par contre-exemple :


une grammaire n'est pas e LL(1) s'il existe 2 productions X et
X telles que :
1 soit Premier () Premier ( ) = ;
Ex : S aS | A, A a

2 soit Eps() = vrai et Premier () Suivant(X ) = ;


Ex : S aS | Ab, A  | b

3 soit Eps() = vrai et Eps( ) = vrai (la grammaire est ambigu)


Ex : S A | B, A , B 

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Cas classiques non LL(1)

Dans les cas suivants, la grammaire n'est pas LL(1) :


ambigu ;
rcursive gauche : A Aa |  ;

intuitivement rcursivit innie de A().

non factorisation gauche : S

 aA | aB

On peut parfois arranger a :


factorisation gauche ;
suppression de la rcursivit gauche.

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Factorisation a gauche : exemple - 1

Les listes d'identicateur :


listeIdent

 IDENT | IDENT SEPVAR listeIdent

On factorise IDENT et on obtient :

 IDENT suiteListeIdent
suiteListeIdent   | SEPVAR listeIdent
listeIdent

R. EZZAHIR

Techniques de compilation

Principe
Rappel : Langages et Grammaires
Analyse Syntaxique

Analyse descendante rcursive


Analyse syntaxique prdictive
Analyseur LL(1)
Table d'analyse

Factorisation gauche : exemple - 2

 ab | abbX | abbbX

Factorisation de ab : on prend le plus grand prxe commun.

 abY
Y  | bX | bbX
X

Puis nouveau factorisation de b.

R. EZZAHIR

Techniques de compilation