Vous êtes sur la page 1sur 58

Grammaires hors-contexte

Une grammaire hors-contexte est un 4-uplet N, , P, S o` : u

N est un ensemble de symboles non terminaux, appel lalphabet e non terminal. est un ensemble de symboles terminaux, appel lalphabet e terminal, tel que N et soient disjoints. P est un sous ensemble ni de : N (N ) e un lment (, ) de P, que lon note est appel une r`gle ee e de production ou r`gle de rcriture. e ee est appel partie gauche de la r`gle e e est appel partie droite de la r`gle e e S est un lment de N appel laxiome de la grammaire. ee e

Alexis Nasr

Compilation

1 / 58

Automate ` pile a

Un automate ` pile est un 6-uplet Q, , , , q0 , F a


Q est lensemble des tats e est lalphabet dentre e est lalphabet de symboles de pile est la fonction de transition : : Q ( {}) (Q )

q0 Q est ltat initial e F Q est lensemble des tats dacceptation e

Alexis Nasr

Compilation

2 / 58

Grammaires hors-contexte Automate ` pile a


Un langage est hors-contexte si et seulement si il existe un automate ` a pile qui le reconna t.

Si un langage est hors-contexte alors il existe un automate a pile ` qui le reconna t. Si un langage est reconnu par un automate ` pile alors il est a hors-contexte.

Alexis Nasr

Compilation

3 / 58

Grammaires hors-contexte Automate ` pile a

Soit G = N, , P, S une grammaire hors-contexte, on construit un automate ` pile A qui accepte un mot m sil existe une a + drivation pour m dans G (S m). e

A est conu de telle sorte ` dterminer une drivation conduisant c a e e de S ` m. a Ide clef : crire dans la pile de A les proto-phrases qui e e constituent la drivation recherche. e e

Alexis Nasr

Compilation

4 / 58

Principe

1 2

Empiler laxiome S Remplacer S par la partie droite dune r`gle de la forme S de e telle sorte que le premier symbole x de se trouve en sommet de pile.

Si x est un terminal alors on le compare avec le caract`re se e trouvant sous la tte de lecture. Sils sont gaux alors on dpile. e e e Si x est un non terminal alors on le remplace par la partie droite dune r`gle de P de la forme x . e

Alexis Nasr

Compilation

5 / 58

Exemple
Reconnaissance du mot : a+aa avec la grammaire : ET +E | T T FT | F F (E) | a
T + E a F + E a a + E a + E + F * T a a * T a * T *

E a

E a

T a

T a

a a

Alexis Nasr

Compilation

6 / 58

Non dterminisme e

Lorsquun non terminal X doit tre remplac au sommet de la e e pile, il peut ltre par la partie droite dune r`gle de la forme e e X .

Plusieurs r`gles de cette forme peuvent exister dans la grammaire. e Lautomate correspondant est gnralement non dterministe. e e e

Alexis Nasr

Compilation

7 / 58

Automate correspondant ` la grammaire a G = N, , P, S

, Ni i, pour toute regle Ni i de P

0
, S$

1
, $

x, x x

Alexis Nasr

Compilation

8 / 58

Construction de lautomate
Automate ` pile A correspondant ` la grammaire G = N, , P, S : a a A = {0, 1, 2}, , N {$}, , 0, {2} La fonction de transition est dnie de la faon suivante : e c

(1, a, a) = {(1, ) | avec a } Si le mme symbole terminal occupe le sommet de la pile et la e case courante de la bande dentre, on dpile. e e

(0, , $) = {(1, S$)} On empile laxiome. (1, , Ni ) = {(1, i ) | avec Ni i P} Si un symbole non terminal Ni occupe le sommet de la pile, on le remplace par la partie droite i dune r`gle Ni i . e

(1, , $) = {(2, $)} Si le mot en entre a t reconnu et que la pile ne contient que le e ee symbole de fond de pile, on passe ` ltat dacceptation. a e

Alexis Nasr

Compilation

9 / 58

Exemple
Grammaire : {E, T, F}, {a, +, , (, )}, P, E avec : P = {E T + E | T , T F T | F , F (E) | a}

Automate :

A1 = {0, 1, 2}, {a, +, , (, )}, {a, +, , (, ), E, T, F, $}, , 0, $, {2} avec : (0, , $) (1, , E) (1, , T ) (1, , F) (1, , $) = = = = = {(1, E$, )} {(1, E + T ), (1, T )} {(1, T F), (1, F)} {(1, (E)), (1, a)} {(2, $)} (1, +, +) (1, , ) (1, (, () (1, a, a) = = = = {(1, )} {(1, )} {(1, )} {(1, )}

Alexis Nasr

Compilation

10 / 58

Analyse syntaxique

Etant donn m et G = , N, P, A , analyser m consiste ` e a trouver pour m son (et ventuellement ses) arbre de drivation. e e
E

r r rr E T + E|T T F T |F F (E)|a
T F a F a + E T

r r
* T F a

Alexis Nasr

Compilation

11 / 58

Sens danalyse

Analyse descendante Larbre de drivation est construit depuis la racine vers les feuilles e Squence de drivations gauches ` partir de laxiome e e a E T +E F+Ea+Ea+T a+FT a+aT a+aF a+aa Analyse ascendante Larbre de drivation est construit des feuilles vers la racine e Squence de drivation telle que la squence inverse soit une e e e drivation droite de m. e a+aa F+aa T +aa T +Fa T +FF T +FT T +EE

Alexis Nasr

Compilation

12 / 58

Transducteurs ` pile a

BANDE DENTREE

TETE DE LECTURE

UNITE DE CONTROLE PILE

BANDE DE SORTIE

Un transducteur ` pile est un automate ` pile qui met, ` chaque a a e a dplacement, un suite nie de symboles de sortie. e Une conguration dun transducteur ` pile est un quadruplet a (q, w, , y) o` y est une squence de symboles de sortie. u e

Alexis Nasr

Compilation

13 / 58

Transducteur ` pile : dnition a e


Un transducteur ` pile est un 8-uplet a Q, , , , , q0 , F

Q est lensemble des tats e est lalphabet dentre e est lalphabet de symboles de pile est lalphabet de sortie est la fonction de transition : Q ( {}) (Q )

q0 Q est ltat initial e

F Q est lensemble des tats dacceptation e

Alexis Nasr

Compilation

14 / 58

Analyseur gauche

Drivation gauche de a + a a : e 1 4 6 2 E T +E F+Ea+Ea+T a+aa Analyse gauche : 14623646

1 ET +E 3 T FT 5 F (E)

2ET 4T F 6Fa

Alexis Nasr

Compilation

15 / 58

Analyseur gauche

Soit une CFG G dont les r`gles ont t numrotes de 1 ` p. On e ee e e a appelle un analyseur gauche de G, un transducteur ` pile non a g dterministe TG qui produit pour un mot m L(G), une drivation e e gauche de m. Performances : Espace : O(|m|)

Temps : O(c|m| )

Alexis Nasr

Compilation

16 / 58

Analyseur gauche : Exemple


, E T, 2 , E T + E, 1 , T F T, 3 , T F, 4 , F (E), 5 , F a

0
, E$

1
, $

x, x , avec x {a, +, , (, )}

(0, a + a a, $) (1, a + a a, E$) (1, a + a a, T + E$, 1) (1, a + a a, F + E$, 14) (1, a + a a, a + E$, 146) (1, +a a, +E$, 146) (1, a a, E$, 146) (1, a a, T $, 1462) (1, a a, F T $, 14623) (1, a a, a T $, 146236) (1, a, T $, 146236) (1, a, T $, 1462364) (1, a, F$, 14623646) (1, a, a$, 14623646) (1, , $, 14623646) (2, , , 14623646)

Alexis Nasr

Compilation

17 / 58

Analyse descendante prdictive : ide gnrale e e e e

Rendre dterministe un analyseur gauche en sautorisant a e ` regarder les k symboles suivant le caract`re courant dans le mot ` e a analyser. Une grammaire dont lanalyseur gauche peut tre rendu e dterministe en regardant les k symboles suivant le caract`re e e courant est dite LL(k). Certaines grammaires hors contexte ne sont pas LL(k), en particulier :

les grammaires ambigus. e les grammaires rcursives ` gauche, e a certaines grammaires non factorises ` gauche, e a

Alexis Nasr

Compilation

18 / 58

Probl`me de la rcursivit ` gauche e e ea

Si la grammaire poss`de une r`gle de la forme A A, lautomate ` e e a pile ou lanalyseur gauche correspondant bouclera ! A

Alexis Nasr

Compilation

19 / 58

Rcursivit ` gauche e ea

Un symbole non terminal A est dit rcursif si A A avec e , (N ) .


Si = , A est dit rcursif ` gauche. e a Si = , A est dit rcursif ` droite. e a

Une grammaire comportant au moins un symbole rcursif ` e a e a gauche est dite grammaire rcursive ` gauche. Une grammaire comportant au moins un symbole rcursif ` e a droite est dite grammaire rcursive ` droite. e a

Alexis Nasr

Compilation

20 / 58

Rcursivit ` gauche e ea

rcursivit gauche directe : la rcursivit ` gauche appara ` e e e ea t a lissue dune seule drivation. e Exemple : application de la r`gle A AB au symbole A : e rcursivit gauche indirecte : la rcursivit ` gauche appara e e e ea t apr`s plusieurs drivations. e e Exemple : application sucessive des deux r`gles A BC et e B AE ` A : a A BC AEC A AB

Alexis Nasr

Compilation

21 / 58

Bonne nouvelle !

Tout langage hors-contexte peut tre gnr par une grammaire e e e e hors-contexte non rcursive ` gauche. e a Ide gnrale : e e e A A a|aA bA |

A Ab|a

Alexis Nasr

Compilation

22 / 58

Elimination de la rcursivit ` gauche directe e ea


Soit G = N, , P, S une grammaire hors contexte, et soit A A1 | A2 | . . . | Am | 1 | 2 | . . . | n

toutes les r`gle de P ayant A pour partie gauche. e G gn`re le mme langage que la grammaire G dnie de la faon e e e e c suivante : G = N {A }, , P , S o` P est gale ` P avec les r`gles ayant A pour partie gauche u e a e remplaces par : e A 1 | 2 | . . . | n | 1 A | 2 A | . . . | n A

A 1 | 2 | . . . | m | 1 A | 2 A | . . . | m A
Alexis Nasr Compilation 23 / 58

Exemple

E T F

E+T | T T F | F (E) | a

E E T T F

T | TE +T | + TE F | FT F | FT (E) | a

Alexis Nasr

Compilation

24 / 58

Elimination de la rcursivit ` gauche e ea

Puis on traite les r`gles de la forme A2 et ainsi de suite, e jusqu` avoir transform toute la grammaire. a e

Principe : On proc`de de mani`re incrmentale en considrant e e e e des ensembles de r`gles de plus en plus important, jusqu` avoir e a trait toute les r`gles. e e On ordonne les non terminaux de la grammaire : A1 , . . . , An et on commence par liminer la rcursivit directe des r`gles de la e e e e forme A1 .

Alexis Nasr

Compilation

25 / 58

Elimination de la rcursivit ` gauche e ea


Entre : une grammaire G = N, , P, S e Sortie : une grammaire G non rcursive ` gauche e a Mthode : e

Numroter les non terminaux de G : N = {A1 , . . . , An } e liminer les rcursivits ` gauche directes des r`gles ayant A1 e e e a e pour partie gauche. Pour i = 2 ` n faire a

pour j = 1 ` i 1 faire a
1 remplacer chaque r`gle de la forme Ai Aj par les r`gles e e

Ai 1 | .. . | k , o` Aj 1 | .. . | k sont toutes les r`gles u e ayant Aj pour partie gauche. 2 liminer les rcursivits a gauche directes des r`gles ayant Ai pour e e e ` e partie gauche.

Alexis Nasr

Compilation

26 / 58

Elimination de la rcursivit ` gauche e ea

Il en rsulte qu` litration suivante dans la boucle interne (en j), e a e les remplacements successifs de Aj dans les r`gles de la forme e Ai Aj va avoir pour consquence que les r`gles de la forme e e Ai Al seront telles que l i et llimination de la rcursivit e e e directe sur Ai va faire que l > i.

La raison pour laquelle lalgorithme ci-dessus produit leet voulu est quapr`s la (i 1)`me itration de la boucle la plus externe e e e (en i), chaque r`gle de la forme Aj Al , o` j < i doit tre telle e u e que l > j.

Alexis Nasr

Compilation

27 / 58

Exemple

A BC | a B CA | Ab C AB | CC | a

On pose A1 = A, A2 = B et A3 = C. On commence par liminer la rcursivit directe sur A puis on e e e remplace, dans B CA | Ab, A par BC | a puis on limine la e rcursivit directe sur B. e e On remplace alors, dans C AB | CC | a, A par BC | a, ce qui donne C BCB | aB | CC | a. Puis on remplace B par CA | ab | CAB | abB et on termine en liminant la rcursivit directe sur C. e e e

Alexis Nasr

Compilation

28 / 58

Exemple
A BC | a B CA | Ab C AB | CC | a

On pose A1 = A, A2 = B et A3 = C. pas de changements B CA | BCb | ab B CA | ab | CAB | abB B CbB | Cb C BCB | aB | CC | a C CACB | abCB | CAB CB | abB B | aB | CC | a C abCB | abB CB | aB | a | abCBC | abB BC C | aBC | aC C ACBC | AB CBC | CC | ACB | AB B | C

i=1 i=2 j=1 i=2 i=3 j=1 i=3 j=2 i=3

Alexis Nasr

Compilation

29 / 58

Grammaire factorise ` gauche e a

Une grammaire G est dite factorise ` gauche si les parties droites de e a deux r`gles ayant la mme partie gauche nont pas de prxe commun e e e propre : (A 1 | 2 avec = ).

Alexis Nasr

Compilation

30 / 58

Factorisation ` gauche a
Entre : une grammaire G e Sortie : une grammaire quivalente factorise ` gauche e e a Mthode : Pour chaque symbole non terminal A, trouver le plus e long prxe = commun ` deux r`gles ou plus ayant A pour partie e a e gauche. Remplacer toutes les r`gles ayant A pour partie gauche : e A 1 | 2 | . . . | n | A A |

o` reprsente toutes les parties droites qui ne commencent pas par u e , par :

A 1 | 2 | . . . | n

Alexis Nasr

Compilation

31 / 58

Exemple

G = {E, S}, {i, t, e, a, b}, {S iEtS | iEtSeS | a, E b}, S Factorise ` gauche, cette grammaire devient : e a

G = {E, S, E }, {i, t, e, a, b}, {S iEtSS | a, S eS | , E b}, S

Alexis Nasr

Compilation

32 / 58

Exemples

LL(1) A aB A bC

A A B D

LL(1) BC DE a b

A A B D C E

LL(2) BC DE a a c e

Alexis Nasr

Compilation

33 / 58

Grammaires LL(1)

Soit G = N, , P, S une grammaire hors-contexte non ambigu et m = a1 . . . an un mot de L(G). e On sait quil existe une unique drivation gauche du mot m e compose des proto-phrases 1 . . . k avec 1 = S et k = m. e Ide de lanalyse LL(1) : construire cette suite de proto-phrases e en ne lisant m quune fois, de gauche ` droite. a Principe : si i = a1 . . . aj A alors i+1 doit pouvoir tre e dtermine de faon unique en fonction du symbole non terminal e e c A et du symbole aj+1 . Une grammaire possdant cette proprit est dite grammaire e ee LL(1).

Alexis Nasr

Compilation

34 / 58

Analyseurs LL(1)

BANDE DENTREE TETE DE LECTURE

TABLE DANALYSE PILE

BANDE DE SORTIE TETE DECRITURE

Alexis Nasr

Compilation

35 / 58

Conguration
Une conguration dun analyseur LL est un triplet (au, X, ) o` : u

au reprsente la partie du mot dentre non encore lue, a est le e e symbole terminal se trouvant sous la tte de lecture. e X reprsente le contenu de la pile (avec X au sommet de cette e derni`re) e reprsente le mot produit sur la bande de sortie. e la conguration initiale de lanalyseur est : (m$, S$, ) $ tant le e symbole de fond de pile qui sert aussi ` marquer la n de la a cha ` analyser. ne a Une conguration dacceptation se prsente sous la forme : e ($, $, ) tant lanalyse gauche de m. e

Si m est le mot ` analyser, a

Alexis Nasr

Compilation

36 / 58

Mouvements
Trois cas possibles ` partir de la conguration (au, X, ) : a
1

Si X = a = $, lanalyseur sarrte et annonce le succ`s de e e lanalyse. Si X = a = $, lanalyseur enl`ve X de la pile et avance la tte de e e lecture : (au, a, ) (u, , )

Si X est un symbole non terminal, lanalyseur consulte lentre e M(X, a) de la table danalyse M. Deux cas sont possibles :
1

M(X, a) = i o` i est le numro dune r`gle ayant X pour partie u e e gauche (X ). Dans ce cas, X est dpil, est empil et i est e e e crit sur la bande de sortie. e (au, X, ) (au, , i) M(X, a) = erreur, lanalyse sarrte et annonce lchec de e e lanalyse.

Alexis Nasr

Compilation

37 / 58

Exemple
Grammaire 1 3 5 7 E TE E T FT F (E) 2 4 6 8 E +TE T FT T Fa ((a a), E$, ) ((a a), TE $, 1) ((a a), FT E $, 14) ((a a), (E)T E $, 147) (a a), E)T E $, 147) (a a), TE )T E $, 1471) (a a), FT E )T E $, 14714) (a a), aT E )T E $, 147148) (a), T E )T E $, 147148) (a), FT E )T E $, 1471485) (a), FT E )T E $, 1471485) (a), aT E )T E $, 14714858) (), T E )T E $, 14714858) (), E )T E $, 147148586) (), )T E $, 1471485863) (, T E $, 1471485863) (, E $, 14714858636) (, $, 147148586363)
38 / 58

Table LL(1) a 1 4 8 ( 1 4 7 ) + 3 2 6 6 $ 3 5 6

E E T T F

Alexis Nasr

Compilation

Construction dune table LL(1) ` partir dune a grammaire

La construction dune table danalyse LL(1) pour une grammaire G = N, , P, S est facilite par les deux fonctions premier et e suivant. Ces deux fonctions pemettent, quand cest possible, de remplir les entres de la table danalyse LL(1) de G. e

Alexis Nasr

Compilation

39 / 58

PREMIER

Si est une proto-phrase de G, premier() est lensemble des terminaux qui commencent les cha nes se drivant de . : e premier() = {a | au}

Si alors appartient aussi ` premier(). a

Alexis Nasr

Compilation

40 / 58

PREMIER(X)

Pour calculer premier(X) avec X N , on applique les r`gles e suivantes jusqu` ce quaucun terminal ni ne puisse tre ajout aux a e e ensembles premier.
1 2 3

Si X , premier(X) = {X}. Si X P, on ajoute ` premier(X). a Si X N et X Y1 . . . Yk P, mettre a dans premier(X) sil existe i tel que a est dans premier(Yi ) et que est dans tous les premier(Y1 ) . . . premier(Yi1 ). Si premier(Yj )j , 1 j k, on ajoute ` premier(X). a

Alexis Nasr

Compilation

41 / 58

PREMIER(X1 . . . Xn )

On calcule premier(X1 . . . Xn ) de la faon suivante : c


1

Ajouter ` premier(X1 . . . Xn ) tous les symboles de premier(X1 ) a dirents de . e Si premier(X1 ), ajouter galement les symboles de e premier(X2 ) dirents de . e Si premier(X2 ), ajouter galement les symboles de e premier(X3 ) dirents de , etc. e Finalement, si appartient ` premier(Xj ) pour tous les a j = 1, 2, . . . n, on ajoute ` premier(X1 . . . Xn ). a

Alexis Nasr

Compilation

42 / 58

SUIVANT(X)

Si X N, suivant(X) est lensemble des symboles a qui peuvent appara immdiatement ` droite de X dans une proto-phrase : tre e a suivant(X) = {a | S Xa}

Si X peut tre le symbole le plus ` droite dune proto-phrase alors $ e a est dans suivant(X).

Alexis Nasr

Compilation

43 / 58

SUIVANT(X)

Pour calculer suivant(X) pour tous symbole non terminal X, on applique les r`gles suivantes jusqu` ce quaucun symbole non e a terminal ne puisse tre ajout aux ensembles suivant : e e
1 2

Mettre $ dans suivant(S). si X B, le contenu de premier(), except , est ajout ` e ea suivant(B). sil existe une r`gle X B ou une r`gle X B telle que e e premier() (cest ` dire ), les lments de suivant(X) a ee sont ajouts ` suivant(B). e a

Alexis Nasr

Compilation

44 / 58

Exemple
Soit la grammaire G = {E, E , T, T , F}, {a, +, , (, ), a}, P, E non rcursive ` gauche o` P est compos des r`gles suivantes : e a u e e 1 3 5 7 E TE E T FT F (E) 2 4 6 8 E +TE T FT T Fa

Alors : premier(E) = premier(T ) = premier(F) = {(, a} premier(E ) = {+, } premier(T ) = {, } suivant(E) = {), $} suivant(E ) = suivant(E) = {), $} suivant(T ) = {premier(E ) {}} suivant(E) = {+, ), $} suivant(T ) = suivant(T ) = {+, ), $} suivant(F) = {premier(T ) {}} suivant(T ) = {+, , ), $}

Alexis Nasr

Compilation

45 / 58

Construction de la table LL(1)


Entre : G = N, , P, S Une grammaire dont les r`gles sont e e numrotes. e e Sortie : M Une table danalyse LL(1) pour G. Mthode : e
1

pour chaque regle i P de la forme A , procder aux tapes e e 2 et 3. Pour chaque symbole terminal a premier(), ajouter i ` a M(A, a). Si premier(), ajouter i ` M(A, b) pour chaque symbole a terminal b suivant(A). Si premier() et $ suivant(A), ajouter i ` M(A, $). a Mettre erreur dans toutes les entres restes vides. e e

Alexis Nasr

Compilation

46 / 58

Grammaires non LL(1)

Si G nest pas LL(1), en particulier si elle est rcursive ` gauche, non e a factorise ` gauche ou ambigu, M peut avoir des entres qui sont e a e e dnies de faons multiples. e c On peut montrer quune grammaire G est LL(1) si et seulement si, pour toute r`gle disctincte A et A de G, les conditions e suivantes sappliquent :
1

Pour aucun symbole terminal a, et ne se drivent toutes les e deux en des mots commenant par a. c

2 3

Une des deux proto-phrases et peut se driver en . e Si , ne se drive pas en un mot commenant par un e c lment de suivant(A). ee

Alexis Nasr

Compilation

47 / 58

Ralisation simple dun analyseur LL(1) en C e

Principes gnraux : e e

G est une grammaire LL(1). Une fonction en langage C est associe ` tout symbole non e a terminal de G. Le graphe des appels de fonctions reprsente larbre de drivation. e e

Alexis Nasr

Compilation

48 / 58

Cas de base
A B avec premier(B) = {b}

void A(void){ if(cc == b){ B(); return;} erreur();} Aa

void A(void){ if(cc == a){ cc = yylex(); return;} erreur();}

Alexis Nasr

Compilation

49 / 58

Parties droites complexes


void A(void){ if(cc == b){ B(); if(cc == c){ C(); return;} erreur();} A aB avec premier(B) = {b} A BC avec premier(B) = {b} et premier(C) = {c}

void A(void){ if(cc == a){ cc = yylex(); if(cc == b){ B(); return;} erreur();}
Alexis Nasr Compilation 50 / 58

Redondance
Certains tests sont eectus plusieurs fois e A B et B b avec premier(B) = {b}

void A(void){ if(cc == b){ /* premiere fois */ B(); return;} erreur();} void B(void){ if(cc == b){ /* deuxieme fois */ cc = yylex(); return;} erreur();}

Alexis Nasr

Compilation

51 / 58

Symboles ambigus

void A(void){ if(cc == b){ B(); return;} if(cc == c){ C(); return;} erreur();}

A B|C avec premier(B) = {b} et premier(C) = {c}

Alexis Nasr

Compilation

52 / 58

R`gles non factorises ` gauche e e a


A BC|BD avec premier(B) = {b}, premier(C) = {c} et premier(D) = {d} void A(void){ if(cc == b){ B(); if(cc == c){ C(); return;} if(cc == d){ D(); return;} } erreur();}

Alexis Nasr

Compilation

53 / 58

R`gles vides e

A B| avec premier(B) = {b} et suivant(A) = {c} void A(void){if(cc == b){ B(); return;} if(cc == c){ return;} erreur();}

Alexis Nasr

Compilation

54 / 58

R`gles vides e

void A(void){if(cc == b){ B(); return;} if(cc == c){ return;} erreur;}

De mani`re plus gnrale e e e A B avec premier(B) = {b, } et suivant(A) = {c}

Alexis Nasr

Compilation

55 / 58

Arbre de drivation e

Il nest pas ncessaire de construire explicitement larbre de e drivation sous-jacent ` une analyse syntaxique. e a Larbre abstrait sera constuit directement lors de lanalyse, par ajout dactions smantiques. e Il est cependant utile de pouvoir visualiser larbre de drivation e pour des raisons de mise au point. On peut pour cela produire de mani`re simple un chier XML e qui reprsente la structure de larbre de drivation, quil sura e e douvrir ` laide dun outil de visualisation de chiers XML. a

Alexis Nasr

Compilation

56 / 58

Production dun arbre de drivation XML e

void A(void){ fprintf(sortie_xml, <A>\n); if(cc == b){ B(); fprintf(sortie_xml, </A>\n); return;} if(cc == c){ fprintf(sortie_xml, </A>\n); return;} erreur();}

Alexis Nasr

Compilation

57 / 58

Un peu plus joli


void A(void){ char *fonction = A; balise_ouvrante(fonction); if(cc == b){ B(); balise_fermante(fonction); return;} if(cc == c){ balise_fermante(fonction); return;} erreur();} void balise_ouvrante(char *fonction) { fprintf(sortie_xml, <%s>\n, fonction);} void balise_fermante(char *fonction) { fprintf(sortie_xml, </%s>\n, fonction);}
Alexis Nasr Compilation 58 / 58