Professional Documents
Culture Documents
IFT-15752
Compilation et interprtation e
Introduction
Les grammaires hors-contexte sont les outils que nous utiliserons pour spcier la struce ture syntaxique des programmes. Les grammaires hors-contexte ont plusieurs avantages: Ils constituent une spcication prcise et claire de la syntaxe des programmes. e e On peut construire un analyseur syntaxique ecace directement ` partir de cera taines classes de grammaires. Ore un cadre pour la dnition de traducteurs orients-syntaxe. e e Une dnition et une implantation bases sur une grammaire hors-contexte rene e dent les modications ultrieures du compilateur plus facile. e Cette portion du cours se concentre sur limplantation ` la main danalyseurs syntaxiques a et se rend jusqu` la dnition des grammaires LL(1). a e
IFT-15752
Compilation et interprtation e
IFT-15752
Compilation et interprtation e
IFT-15752
Compilation et interprtation e
Conventions de notation
Pour minimiser le verbiage inutile, on adopte plusieurs conventions lies ` la notation. e a 1. Les choses suivantes sont des terminaux: des lettres minuscules du dbut de lalphabet comme a, b, c; e des oprateurs comme +, ; e des signes de ponctuation; les chires 0, . . . , 9; des noms en gras comme id, if. 2. Les choses suivantes sont des non-terminaux: des lettres majuscules du dbut de lalphabet comme A, B, C; e la lettre S qui est souvent le symbole de dpart; e des noms en minuscules et en italique comme expr, stmt. 3. Les lettres majuscules de la n de lalphabet, comme X, Y et Z, reprsentent des symboles de la grammaire; cest-`-dire, des e a terminaux et non-terminaux indiremment. e 4. Les lettres minuscules de la n de lalphabet, comme u, . . . , z, reprsentent des cha e nes faites de terminaux. 5. Les lettres grecques minuscules, comme , et , reprsentent des cha e nes faites de symboles de la grammaire. Par ex., A est la forme gnrale dune production o` A et sont les membres gauche et droit, respectivement. e e u 6. Si on a les productions A 1 , . . . , A k , appeles A-productions, on peut crire A 1 | . . . | k et appeler les i les e e alternatives pour A. ` 7. A moins dindications contraires, le membre gauche de la premi`re production est le symbole de dpart. e e
IFT-15752
Compilation et interprtation e
Dnitions e
Une phrase est une suite de terminaux (synonyme dune cha ne). Une forme de phrase est une suite de terminaux et de non-terminaux. Une forme de phrase est drivable en une forme de phrase , quon dnote par , si = A, = et que A est une e e production. On dit aussi que 1 est drivable en n , quon dnote par 1 n , si 1 2 . . . n et n 1. Si n > 1, on peut crire e e e 1 + n . On a une drivation de E en w si E w. e Une cha w est gnre par la grammaire si S w o` S est le symbole de dpart. ne e ee u e Le langage gnr par une grammaire G, dnot L(G), est lensemble des cha e ee e e nes gnres par G. e ee Un langage L est hors-contexte sil existe une grammaire G dont le langage est L. Deux grammaires sont quivalentes si elles gn`rent le mme langage. e e e e On dit que est drivable ` gauche(droite) dabord en , quon note lm ( rm , respectivement), si = wA, = w et e a A est une production ( = Aw et = w, respectivement). On a une drivation ` gauche(droite) dabord de w, S lm w (S rm w, respectivement), si chaque tape de la drivation se fait ` e a e e a gauche(droite) dabord. Un arbre de drivation dune cha w . . . e ne Une grammaire est ambigu sil existe plus dun arbre de drivation (ou plus dune drivation ` gauche(droite) dabord) pour un certain w. e e e a
IFT-15752
Compilation et interprtation e
IFT-15752
Compilation et interprtation e
IFT-15752
Compilation et interprtation e
Elimination de lambigu e t
La grammaire dcrivant un langage doit tre conue pour tre sans ambigu e ou bien e e c e t doit tre convertie de faon ` ce quelle ne comporte plus dambigu e. e c a t Par exemple, la grammaire synthtique suivante gn`re des noncs mais elle est ame e e e e bigu: e stmt | | if expr then stmt if expr then stmt else stmt other
Toutefois, on peut la modier par la grammaire quivalente suivante, laquelle nest pas e ambigu: e stmt matched stmt unmatched stmt | | | matched stmt unmatched stmt if expr then matched stmt else matched stmt other if expr then stmt if expr then matched stmt else unmatched stmt
Compilation et interprtation e c Danny Dub 2006 e
IFT-15752
o` ne commence pas par A. On peut liminer la rcursion ` gauche en remarquant que A ne peut mener qu` des u e e a a formes de phrases du genre . Ainsi, la grammaire suivante gn`re le mme langage mais sans utiliser la rcursion e e e e ` gauche. a A A A A |
Exemple 4.8 On peut liminer la rcursion ` gauche de la grammaire suivante: e e a E T F E+T |T T F |F (E) | id
IFT-15752
Compilation et interprtation e
Ce genre de transformation limine les rcursions ` gauche directes. Certains none e a terminaux peuvent tre rcursifs ` gauche indirectement. Par exemple, dans la grame e a maire suivante, S est rcursif ` gauche: e a S A Aa | b Ac | Sd |
IFT-15752
Compilation et interprtation e
IFT-15752
Compilation et interprtation e
Factorisation ` gauche a
Dans une grammaire comme la suivante: stmt | if expr then stmt else stmt if expr then stmt
on ne peut choisir d`s le dpart laquelle des productions il faut utiliser. Toutefois, en e e mettant en commun les 4 premiers symboles on retarde la prise de dcision jusquau e point o` on dispose des informations ncessaires: u e stmt stmt if expr then stmt stmt else stmt |
1 | 2
A 1 | 2
Compilation et interprtation e c Danny Dub 2006 e
Factorisation ` gauche a
Algorithme 4.2 Entre: Une grammaire G. e Sortie: Une grammaire quivalente factorise ` gauche. e e a Mthode: e 1. Pour chaque non-terminal A, trouver le plus long prxe commun ` au moins deux Ae a productions. 2. Si = , remplacer: A 1 | . . . | n | 1 | . . . | m
3. Rpter jusqu` ce quil ny ait plus de non-terminal pour lequel il existe un prxe commun e e a e non-trivial. Exemple 4.10
IFT-15752 Compilation et interprtation e c Danny Dub 2006 e
IFT-15752
Compilation et interprtation e
Ncessite un rebroussement! e
IFT-15752 Compilation et interprtation e c Danny Dub 2006 e
Analyseurs prdictifs e
Dans certains cas, en concevant bien notre grammaire, en liminant les ambigu es et les e t rcursions ` gauche, on obtient un analyseur syntaxique descendant qui na pas besoin e a deectuer de rebroussement, cest-`-dire un analyseur prdictif. a e Pour obtenir un analyseur prdictif, il faut respecter la condition stipulant que: e pour tout non-terminal A ` substituer, a pour tout terminal a qui doit tre consomm sur lentre, e e e il doit y avoir au plus une alternative parmi A 1 | . . . | n qui est capable de gnrer une cha commenant par a. e e ne c Par exemple, en ce qui concerne le non-terminal stmt dans la grammaire suivante, la condition est respecte: e stmt | | if expr then stmt else stmt while expr do stmt begin stmt list end
IFT-15752
Compilation et interprtation e
Diagrammes de transition
On peut dcrire le comportement dun analyseur prdictif ` laide de diagrammes de transition. e e a Les diagrammes de transition pour lanalyse syntaxique di`rent lg`rement des diagrammes pour e e e lanalyse lexicale: Les diagrammes sont associs aux non-terminaux et il y a un seul diagramme par non-terminal. e Les tiquettes sur les transitions peuvent aussi tre des non-terminaux. e e Une transition sur un terminal correspond ` la consommation du terminal sur lentre. a e Une transition sur un non-terminal correspond ` appeler la procdure danalyse associe au a e e non-terminal. On construit un diagramme de transition pour un non-terminal A ainsi: 1. Crer un tat de dpart et un tat nal. e e e e 2. Pour chaque production A X1 . . . Xn , ajouter un chemin dont les tiquettes sont X1 , . . . , e Xn (ou ajouter une transition tiquete avec si la production est A ). e e
IFT-15752
Compilation et interprtation e
Diagrammes de transition
Lanalyseur prdictif eectue son travail en se frayant un chemin ` travers un diagramme e a de ltat de dpart ` ltat nal en faisant un certain nombre de transitions: e e a e en passant dun tat s ` un tat t par un arc tiquet a pourvu que le prochain e a e e e symbole en entre soit a; e en passant dun tat s ` un tat t par un arc tiquet A en appelant la procdure e a e e e e associe ` A; tout symbole de lentre qui est consomm lest au cours de lappel ` e a e e a la procdure; au retour de lappel, on consid`re que le symbole A a t consomm; e e ee e en passant dun tat s ` un tat t par un arc tiquet e a e e e symbole de lentre. e sans consommer de
Aux tats o` lanalyseur prdictif doit choisir parmi plusieurs options, il faut prvoir une e u e e mthode de prise de dcision. e e
IFT-15752
Compilation et interprtation e
Diagrammes de transition
Voici les diagrammes de transitions correspondant ` la grammaire suivante: a E E T T F TE +T E | FT F T | (E) | id E: E: n T- 1 E- 2 n k n 0 n +- 4 n T- 5 E- 6 n k n 3 T: n F- 8 T - 9 n k n 7 6
n n n k n T : 10 - 11 F - 12 T - 13 6 6
n ( - 15 E - 16 n n ) - 17 k n F : 14
IFT-15752
id
Compilation et interprtation e
Diagrammes de transition
Simplication de diagrammes: ? n +- 4 n T- 5 n 3 k n - 6 T ? n +- 4 n 3 - 6 k n
E:
E:
E:
T ? n T- 3 n +- 4 n 0 k n - 6
E:
+ ? n T- 3 n 0 - 6 k n
E:
- 6 k n
T:
- 13 k n
n ( - 15 E - 16 n n ) - 17 k n F : 14
IFT-15752
id
Compilation et interprtation e
IFT-15752
Compilation et interprtation e
IFT-15752
Compilation et interprtation e
IFT-15752
Compilation et interprtation e
id E TE T FT
+ E +T E
) E
$ E
IFT-15752
Compilation et interprtation e
FIRST et FOLLOW
On dnit lensemble FIRST() comme tant lensemble des terminaux qui e e dbutent les cha e nes gnres ` partir de plus si peut gnrer . e ee a e e Formellement: FIRST() = {a | aw} { | } On peut calculer un ou des ensembles FIRST ` laide des r`gles suivantes: a e FIRST( ) = { }. FIRST(a ) = {a}. Si X est une production, FIRST(X) FIRST(). Si FIRST(X), alors FIRST(X) = (FIRST(X) { }) FIRST(), sinon FIRST(X) = FIRST(X).
IFT-15752
Compilation et interprtation e
FIRST et FOLLOW
On dnit lensemble FOLLOW(A), A tant un non-terminal, comme tant e e e lensemble des terminaux qui peuvent appara immdiatement ` droite de tre e a A dans une forme de phrase gnre par la grammaire. On ajoute $ ` e ee a FOLLOW(A) si A peut appara compl`tement ` droite dans une forme tre e a de phrase. Plus formellement, FOLLOW(A) = {a | S Aa} {$ | S A} On peut calculer les ensembles FOLLOW de tous les non-terminaux dune grammaire ` laide des r`gles suivantes: a e Si S est le symbole de dpart, alors $ FOLLOW(S). e Si A B est une production, alors FIRST() { } FOLLOW(B). Si A B est une production ou si A B est une production et que FIRST(), alors FOLLOW(A) FOLLOW(B).
IFT-15752 Compilation et interprtation e c Danny Dub 2006 e
FIRST et FOLLOW
Exemple 4.17 Considrons (une fois encore) cette grammaire: e E E T T F TE +T E | FT F T | (E) | id
alors les ensembles FIRST et FOLLOW des non-terminaux sont les suivants: FIRST(E) = FIRST(T ) = FIRST(F ) = {(, id} FIRST(E ) = {+, } FIRST(T ) = {, } FOLLOW(E) = FOLLOW(E ) = {), $} FOLLOW(T ) = FOLLOW(T ) = {+, ), $} FOLLOW(F ) = {, +, ), $}
IFT-15752
Compilation et interprtation e
IFT-15752
Compilation et interprtation e
a Sa
$ S
Eb
Compilation et interprtation e c Danny Dub 2006 e
Grammaires LL(1)
On dit quune grammaire est LL(1) si sa table danalyse ne comporte aucune case qui contient plus dune production. Labrviation LL(1) a la signication suivante: e le premier L indique que lentre (la suite de jetons) est lue de gauche ` droite (from Left to right); e a le second L indique que la technique recherche une drivation ` gauche dabord (Leftmost derivation); e a le 1 indique quun seul jeton constitue lhorizon de lanalyse. Les grammaires LL(1) poss`dent plusieurs proprits intressantes: e ee e Aucune grammaire ambigu ou comportant une rcursion ` gauche nest LL(1). e e a Sil existe deux productions A et A ( = ) dans une grammaire LL(1), on a que: il nexiste pas de terminal a tel que et gn`rent tous deux des cha e e nes qui commencent par a; au plus un de et peut gnrer la cha e e ne ; si , alors ne peut pas gnrer une cha dont le premier terminal est lment de FOLLOW(A). e e ne ee On peut crer un analyseur prdictif directement ` partir dune grammaire G si et seulement si G est LL(1). e e a
IFT-15752
Compilation et interprtation e