La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

24 septembre 2007Cours de compilation 4 - Intranet1 Cours de compilation Techniques danalyse descendantes.

Présentations similaires


Présentation au sujet: "24 septembre 2007Cours de compilation 4 - Intranet1 Cours de compilation Techniques danalyse descendantes."— Transcription de la présentation:

1 24 septembre 2007Cours de compilation 4 - Intranet1 Cours de compilation Techniques danalyse descendantes

2 24 septembre 2007Cours de compilation 4 - Intranet2 Les grandes lignes du cours Définitions de base Définitions de base Composition de compilateurs Composition de compilateurs Lenvironnement dun compilateur Lenvironnement dun compilateur Evaluation partielle et compilation Evaluation partielle et compilation Analyses lexicales et syntaxiques Analyses lexicales et syntaxiques Techniques danalyse descendantes Techniques danalyse descendantes Techniques danalyse ascendantes Techniques danalyse ascendantes YACC YACC Analyse sémantique Analyse sémantique Environnement dexécution Environnement dexécution Génération de code Génération de code Optimisation de code Optimisation de code

3 24 septembre 2007Cours de compilation 4 - Intranet3 Lanalyse descendante ---------------------------------------------------------------- Une dérivation de la forme S - >> u peut être faite en dérivation gauche :Une dérivation de la forme S - >> u peut être faite en dérivation gauche : S - >> t A - >> t a w S - >> t A - >> t a w Le préfixe t est déjà reconnu, il ne comporte plus de lettres non terminales.Le préfixe t est déjà reconnu, il ne comporte plus de lettres non terminales. Le mot u doit être de la forme u = t w.Le mot u doit être de la forme u = t w. Il suffit donc de considérer A et w ! ! !Il suffit donc de considérer A et w ! ! ! Pour cela nous distinguons la première lettre de w = a w !Pour cela nous distinguons la première lettre de w = a w ! A - >> a w A - >> a w gauchegauche ?????

4 24 septembre 2007Cours de compilation 4 - Intranet4 A - >> a w ---------------------------------------------------------------- Il peut y avoir plusieurs règles de la forme A ::=...Il peut y avoir plusieurs règles de la forme A ::=... Il peut ny avoir quune seule règle de la forme A ::=...Il peut ny avoir quune seule règle de la forme A ::=... Pour des raisons defficacité, il est impossible de procéder par essai-échec (back-track) ! Nous devrons donc faire en sorte quil ny ait pas plus de deux cas à envisager : - Il y a exactement une règle qui sapplique ! - Il y a exactement une règle qui sapplique ! - Aucune règle ne sapplique et cest un - Aucune règle ne sapplique et cest un échec définitif ! échec définitif !

5 24 septembre 2007Cours de compilation 4 - Intranet5 A - >> a w ---------------------------------------------------------------- Il peut y avoir plusieurs règles de la forme A ::=...Il peut y avoir plusieurs règles de la forme A ::=... Il peut ny avoir quune seule règle de la forme A ::=...Il peut ny avoir quune seule règle de la forme A ::=... Il y a quatre sous-cas suivant la forme de la règle A :: =...Il y a quatre sous-cas suivant la forme de la règle A :: =... ( 1 ) A ::= a ( 1 ) A ::= a ( 2 ) A ::= b avec a <> b ( 2 ) A ::= b avec a <> b ( 3 ) A ::= B ( 3 ) A ::= B ( 4 ) A ::= ( 4 ) A ::=

6 24 septembre 2007Cours de compilation 4 - Intranet6 A - >> a w ---------------------------------------------------------------- Il peut y avoir plusieurs règles de la forme A ::=...Il peut y avoir plusieurs règles de la forme A ::=... Il peut ny avoir quune seule règle de la forme A ::=...Il peut ny avoir quune seule règle de la forme A ::=... Il y a quatre sous-cas suivant la forme de la règle A :: =...Il y a quatre sous-cas suivant la forme de la règle A :: =... ( 1 ) A ::= a ( 1 ) A ::= a A - > a - >> a w A - > a - >> a w Suite avec et w ! ! !Suite avec et w ! ! ! Remarque : peut être de la forme c d e N... Dans ce cas w doit commencer par les mêmes lettres c d e ! Si cest le cas, nous continuons avec N... et un suffixe de w.Remarque : peut être de la forme c d e N... Dans ce cas w doit commencer par les mêmes lettres c d e ! Si cest le cas, nous continuons avec N... et un suffixe de w.

7 24 septembre 2007Cours de compilation 4 - Intranet7 A - >> a w ---------------------------------------------------------------- Il peut y avoir plusieurs règles de la forme A ::=...Il peut y avoir plusieurs règles de la forme A ::=... Il peut ny avoir quune seule règle de la forme A ::=...Il peut ny avoir quune seule règle de la forme A ::=... Il y a quatre sous-cas suivant la forme de la règle A :: =...Il y a quatre sous-cas suivant la forme de la règle A :: =... ( 2 ) A ::= b avec a = b ( 2 ) A ::= b avec a = b A - > b - >> a w A - > b - >> a w Il y a échec ! ! !Il y a échec ! ! ! Cet échec est définitif parce que nous navions jamais la liberté de choisir ( pas de back-track ) !Cet échec est définitif parce que nous navions jamais la liberté de choisir ( pas de back-track ) ! N O N ! /

8 24 septembre 2007Cours de compilation 4 - Intranet8 A - >> a w ---------------------------------------------------------------- Il peut y avoir plusieurs règles de la forme A ::=...Il peut y avoir plusieurs règles de la forme A ::=... Il peut ny avoir quune seule règle de la forme A ::=...Il peut ny avoir quune seule règle de la forme A ::=... Il y a quatre sous-cas suivant la forme de la règle A :: =...Il y a quatre sous-cas suivant la forme de la règle A :: =... ( 3 ) A ::= B ( 3 ) A ::= B A - > B - >> a w A - > B - >> a w Suite avec B et a w ! ! !Suite avec B et a w ! ! !

9 24 septembre 2007Cours de compilation 4 - Intranet9 A - >> a w ---------------------------------------------------------------- Il peut y avoir plusieurs règles de la forme A ::=...Il peut y avoir plusieurs règles de la forme A ::=... Il peut ny avoir quune seule règle de la forme A ::=...Il peut ny avoir quune seule règle de la forme A ::=... Il y a quatre sous-cas suivant la forme de la règle A :: =...Il y a quatre sous-cas suivant la forme de la règle A :: =... ( 4 ) A ::= ( 4 ) A ::= A - > - >> a w A - > - >> a w Suite avec et a w ! ! !Suite avec et a w ! ! ! Remarque : peut être de la forme c d e N... Dans ce cas a w doit commencer par les mêmes lettres c d e ! Si cest le cas, nous continuons avec N... et un suffixe de w.Remarque : peut être de la forme c d e N... Dans ce cas a w doit commencer par les mêmes lettres c d e ! Si cest le cas, nous continuons avec N... et un suffixe de w.

10 24 septembre 2007Cours de compilation 4 - Intranet10 A - >> a w ---------------------------------------------------------------- Il peut y avoir plusieurs règles de la forme A ::=...Il peut y avoir plusieurs règles de la forme A ::=... Il peut ny avoir quune seule règle de la forme A ::=...Il peut ny avoir quune seule règle de la forme A ::=... Le problème :Le problème : –Laquelle choisir ? ? ? –Pour des raisons defficacité, nous ne pouvons pas jouer au petit jeu de « essai-échec » ! ! ! Donc, une règle au plus doit convenir !Donc, une règle au plus doit convenir ! –Si cest le cas, nous lutilisons ! –Dans le cas contraire, nous constatons un échec définitif ! Le seul caractère du début doit nous permettre de choisir !Le seul caractère du début doit nous permettre de choisir ! –Nous parlons danalyse descendante LL ( 1 ) ! ! !

11 24 septembre 2007Cours de compilation 4 - Intranet11 A - >> a w ---------------------------------------------------------------- Il peut y avoir plusieurs règles de la forme A ::=...Il peut y avoir plusieurs règles de la forme A ::=... Il peut ny avoir quune seule règle de la forme A ::=...Il peut ny avoir quune seule règle de la forme A ::=... Différents cas de figure caractéristiques !Différents cas de figure caractéristiques ! A ::= a et A ::= b avec a <> b A ::= a et A ::= b avec a <> b Le premier caractère de w permet de trancher !Le premier caractère de w permet de trancher ! A - > a - >> a w A - > a - >> a w A - > b - >> a w A - > b - >> a w Nous savons choisir ! ! !Nous savons choisir ! ! ! peut-être ?

12 24 septembre 2007Cours de compilation 4 - Intranet12 A - >> a w ---------------------------------------------------------------- Il peut y avoir plusieurs règles de la forme A ::=...Il peut y avoir plusieurs règles de la forme A ::=... Il peut ny avoir quune seule règle de la forme A ::=...Il peut ny avoir quune seule règle de la forme A ::=... Différents cas de figure caractéristiques !Différents cas de figure caractéristiques ! A ::= a et A ::= a A ::= a et A ::= a Le premier caractère de w ne permet pas de trancher !Le premier caractère de w ne permet pas de trancher ! A - > a - >> a w A - > a - >> a w A - > b - >> a w A - > b - >> a w Nous ne savons pas choisir ! ! !Nous ne savons pas choisir ! ! ! peut-être ?

13 24 septembre 2007Cours de compilation 4 - Intranet13 A - >> a w ---------------------------------------------------------------- Il peut y avoir plusieurs règles de la forme A ::=...Il peut y avoir plusieurs règles de la forme A ::=... Il peut ny avoir quune seule règle de la forme A ::=...Il peut ny avoir quune seule règle de la forme A ::=... Différents cas de figure caractéristiques !Différents cas de figure caractéristiques ! A ::= a et A ::= B A ::= a et A ::= B Question :Question : B - >> a B - >> a Si cest NON, seule la première règle convient !Si cest NON, seule la première règle convient ! Si cest OUI, nous avons lembarras du choix ! ! !Si cest OUI, nous avons lembarras du choix ! ! ! Définition : a Prem ( ) - >> a...Définition : a Prem ( ) - >> a... Prem ( ) - >> Prem ( ) - >> ????? a Prem ( B ) /

14 24 septembre 2007Cours de compilation 4 - Intranet14 A - >> a w ---------------------------------------------------------------- Il peut y avoir plusieurs règles de la forme A ::=...Il peut y avoir plusieurs règles de la forme A ::=... Il peut ny avoir quune seule règle de la forme A ::=...Il peut ny avoir quune seule règle de la forme A ::=... Différents cas de figure caractéristiques !Différents cas de figure caractéristiques ! A ::= a et A ::= A ::= a et A ::= Il pourrait y avoir deux possibilités :Il pourrait y avoir deux possibilités : A - > a - >> a w A - > a - >> a w A - > - >> a w A - > - >> a w Est-ce que a peut être un successeur de A ? ? ?Est-ce que a peut être un successeur de A ? ? ? Définition : a Suiv ( A ) S - >>... A a...Définition : a Suiv ( A ) S - >>... A a... a Suiv ( A ) ?? peut-être ?

15 24 septembre 2007Cours de compilation 4 - Intranet15 Définition de LL ( 1 ) ---------------------------------------------------------------- Une grammaire est LL ( 1 ), cest-à-dire avec un seul caractère de LOOK-AHEAD, alias w = a w et nous ne connaissons que le seul caractère a, si et seulement si :Une grammaire est LL ( 1 ), cest-à-dire avec un seul caractère de LOOK-AHEAD, alias w = a w et nous ne connaissons que le seul caractère a, si et seulement si : pour tout non-terminal A et ses règlespour tout non-terminal A et ses règles A ::= | | | A ::= | | | nous avons les trois propriétés suivantes :nous avons les trois propriétés suivantes : ( 1 ) Prem ( ) Prem ( si i = j ( 1 ) Prem ( ) Prem ( si i = j ( 2 ) Il existe au plus une règle A ::= telle que ( 2 ) Il existe au plus une règle A ::= telle que A - > - >> cest-à-dire que Prem ( ) A - > - >> cest-à-dire que Prem ( ) ( 3 ) Si L ( A ), alors pour tout i : ( 3 ) Si L ( A ), alors pour tout i : Prem ( ) Suiv ( A ) = Prem ( ) Suiv ( A ) = 12n v ij / k kk v i

16 24 septembre 2007Cours de compilation 4 - Intranet16 Correction de LL ( 1 ) ---------------------------------------------------------------- Montrons que pour tout A et tout a w avec les règles A ::= | | | qui vérifient toutes la propriétéMontrons que pour tout A et tout a w avec les règles A ::= | | | qui vérifient toutes la propriété LL ( 1 ), nous pouvons sans ambiguïté déterminer lunique règle à appliquer, si elle existe. LL ( 1 ), nous pouvons sans ambiguïté déterminer lunique règle à appliquer, si elle existe. Il suffit de prendre la lettre a et...Il suffit de prendre la lettre a et... ( A ) si a Prem ( ), nous utilisons A ::= car, ( A ) si a Prem ( ), nous utilisons A ::= car, par construction, a Prem ( ), pour tout i <> l. par construction, a Prem ( ), pour tout i <> l. De même, la règle A ::= avec Prem ( ) ne De même, la règle A ::= avec Prem ( ) ne convient pas parce que a Suiv ( A ). convient pas parce que a Suiv ( A ). 12n ll i / kk /

17 24 septembre 2007Cours de compilation 4 - Intranet17 Correction de LL ( 1 ) ---------------------------------------------------------------- Montrons que pour tout A et tout a w avec les règles A ::= | | | qui vérifient toutes la propriétéMontrons que pour tout A et tout a w avec les règles A ::= | | | qui vérifient toutes la propriété LL ( 1 ), nous pouvons sans ambiguïté déterminer lunique règle à appliquer, si elle existe. LL ( 1 ), nous pouvons sans ambiguïté déterminer lunique règle à appliquer, si elle existe. Il suffit de prendre la lettre a et...Il suffit de prendre la lettre a et... ( B ) si a Prem ( ), pour aucun i, et que L ( A ), ( B ) si a Prem ( ), pour aucun i, et que L ( A ), alors cest une erreur. alors cest une erreur. ( C ) si a Prem ( ), pour aucun i, mais que nous ( C ) si a Prem ( ), pour aucun i, mais que nous avons L ( A ), nous utilisons clairement lunique avons L ( A ), nous utilisons clairement lunique règle A ::=, telle que Prem ( ). règle A ::=, telle que Prem ( ). 12n i // / i kk

18 24 septembre 2007Cours de compilation 4 - Intranet18 Théorèmes sur LL ---------------------------------------------------------------- Théorème :Théorème : –Sil existe une grammaire G qui est LL ( k ) avec k > 1, alors –il existe une grammaire G qui est LL ( 1 ) et reconnaît le même langage, cest-à-dire que L ( G ) = L ( G ). Théorème :Théorème : –Il existe des langages L tels quaucune grammaire G qui correspond à L, cest-à-dire telle que L ( G ) = L, nest LL ( k ), quelle que soit k.

19 24 septembre 2007Cours de compilation 4 - Intranet19 Algorithme récursif ---------------------------------------------------------------- A chaque non-terminal correspond une fonction.A chaque non-terminal correspond une fonction. –Elle choisit la réécriture en fonction du flux dentrée et reconnaît tout le membre droit de la règle retenue. –Elle appelle dautres fonctions pour réaliser la reconnaissance des non-terminaux qui apparaissent au membre droit de la règle retenue. –Elle se termine soit par un échec ou un succès si tout le membre droit a pu être reconnu.

20 24 septembre 2007Cours de compilation 4 - Intranet20 Algorithme de reconnaissance LL ( 1 ) ---------------------------------------------------------------- Nous avons une table T [ N, V ] !Nous avons une table T [ N, V ] ! –Dans T [ A, a ] nous mettons A ::= si a Prem ( ) ouA ::= si a Prem ( ) ou si Prem ( ) et a Suiv ( A ), si Prem ( ) et a Suiv ( A ), ERREUR sinon.ERREUR sinon. Notre algorithme est une machine à pile définie par les cas de figure suivants.Notre algorithme est une machine à pile définie par les cas de figure suivants. ii i

21 24 septembre 2007Cours de compilation 4 - Intranet21 Algorithme de reconnaissance LL ( 1 ) ---------------------------------------------------------------- Transition 1 :Transition 1 : a a w # devient w #

22 24 septembre 2007Cours de compilation 4 - Intranet22 Algorithme de reconnaissance LL ( 1 ) ---------------------------------------------------------------- Transition 2 :Transition 2 : a b w # devient ERREUR car a <> b

23 24 septembre 2007Cours de compilation 4 - Intranet23 Algorithme de reconnaissance LL ( 1 ) ---------------------------------------------------------------- Transition 3 :Transition 3 : N a w # devient Si T [ N, a ] donne N ::= a w #

24 24 septembre 2007Cours de compilation 4 - Intranet24 Algorithme de reconnaissance LL ( 1 ) ---------------------------------------------------------------- Transition 3 :Transition 3 : N a w # devient Si T [ N, a ] donne ERREUR ERREUR

25 24 septembre 2007Cours de compilation 4 - Intranet25 Définition de Prem ( ) ---------------------------------------------------------------- Soit ( N v V )*. Pour a V nous aurons :Soit ( N v V )*. Pour a V nous aurons : a Prem ( ) - >> a a Prem ( ) - >> a Prem ( ) - >> Prem ( ) - >> La définition des pages suivantes vérifie cette propriété (sans preuve).La définition des pages suivantes vérifie cette propriété (sans preuve).

26 24 septembre 2007Cours de compilation 4 - Intranet26 Définition de Prem ( ) ---------------------------------------------------------------- Soit ( N v V )*. Suivant la forme de :Soit ( N v V )*. Suivant la forme de : – = a : Prem ( ) = { a } – = : Prem ( ) = { } – = B : Prem ( ) = Prem ( B ) – = B avec <> : Prem ( ) = Prem ( B ) si Prem ( B ) Prem ( ) = Prem ( B ) si Prem ( B ) Prem ( ) = ( Prem ( B ) \ { } ) v Prem ( ) sinon. Prem ( ) = ( Prem ( B ) \ { } ) v Prem ( ) sinon. /

27 24 septembre 2007Cours de compilation 4 - Intranet27 Définition de Suiv ( A ) ---------------------------------------------------------------- Pour a V, nous aurons :Pour a V, nous aurons : a Suiv ( A ) S - >>... A a... La définition des pages suivantes vérifie cette propriété (sans preuve).La définition des pages suivantes vérifie cette propriété (sans preuve). La première apparition de A est entourée de séquences et telles quil existe une règle B ::= A qui vient dêtre appliquée :La première apparition de A est entourée de séquences et telles quil existe une règle B ::= A qui vient dêtre appliquée : S - >>... B... - >... A... Pour connaître les suivants de A nous inspectons donc les membres droits des règles qui font apparaître A.Pour connaître les suivants de A nous inspectons donc les membres droits des règles qui font apparaître A.

28 24 septembre 2007Cours de compilation 4 - Intranet28 Définition de Suiv ( A ) ---------------------------------------------------------------- Suiv ( A ) est le plus petit ensemble qui vérifie :Suiv ( A ) est le plus petit ensemble qui vérifie : –Si A = S (laxiome), alors # Suiv ( A ). –Sil y a une règle B ::= A, alors Suiv ( B ) Suiv ( A ). –Sil y a une règle B ::= A avec Prem ( ), alors Prem ( ) Suiv ( A ) Prem ( ) Suiv ( A ) –Sil y a une règle B ::= A avec Prem ( ), alors ( Prem ( ) \ { } ) v Suiv ( B ) Suiv ( A ) ( Prem ( ) \ { } ) v Suiv ( B ) Suiv ( A ) v v / v

29 24 septembre 2007Cours de compilation 4 - Intranet29 Rendre LL ( 1 ) ---------------------------------------------------------------- Une grammaire est LL ( 1 ) si, pour tout non-terminal A, et ses règlesUne grammaire est LL ( 1 ) si, pour tout non-terminal A, et ses règles A ::= | | | A ::= | | | nous avons les trois propriétés suivantes :nous avons les trois propriétés suivantes : ( 1 ) Prem ( ) Prem ( si i = j ( 1 ) Prem ( ) Prem ( si i = j ( 2 ) Il existe au plus une règle tq. A - > - >> ( 2 ) Il existe au plus une règle tq. A - > - >> ( 3 ) Si L ( A ), alors Prem ( ) Suiv ( A ) = ( 3 ) Si L ( A ), alors Prem ( ) Suiv ( A ) = Nous ne pouvons rien si le point ( 3 ) nest pas respecté.Nous ne pouvons rien si le point ( 3 ) nest pas respecté. Nous pouvons, par contre, essayer de réécrire la grammaire pour quelle respecte les deux premiers points.Nous pouvons, par contre, essayer de réécrire la grammaire pour quelle respecte les deux premiers points. v ij / k v i 12n

30 24 septembre 2007Cours de compilation 4 - Intranet30 Rendre LL ( 1 ) ---------------------------------------------------------------- Lidée à la base est la même que celle du calcul de la fermeture pour les analyses ascendantes :Lidée à la base est la même que celle du calcul de la fermeture pour les analyses ascendantes : –Nous développons le début de larbre de dérivation et –nous factorisons les terminaux initiaux communs ! Ceci ne marche pas si nous retombons récursivement sur le même problème !Ceci ne marche pas si nous retombons récursivement sur le même problème ! S ::= A T ::= id | ( A ) S ::= A T ::= id | ( A ) A ::= V | E V ::= id | I A ::= V | E V ::= id | I E ::= T E I ::= id++ E ::= T E I ::= id++ E ::= + T E | E ::= + T E |

31 24 septembre 2007Cours de compilation 4 - Intranet31 Rendre LL ( 1 ) ---------------------------------------------------------------- S ::= A T ::= id | ( A ) S ::= A T ::= id | ( A ) A ::= V | E V ::= id R A ::= V | E V ::= id R E ::= T E I ::= id++ E ::= T E I ::= id++ E ::= + T E | R ::= ++ | E ::= + T E | R ::= ++ | Il y a un problème avec la règle V ::= id | I, car :Il y a un problème avec la règle V ::= id | I, car : id Prem ( id ) et id Prem ( I ) id Prem ( id ) et id Prem ( I ) V id Iid++ Ancien ! V id++ id R Nouveau ! id V ::= id R R ::= ++ | R ::= ++ | Elle nest plus atteinte !

32 24 septembre 2007Cours de compilation 4 - Intranet32 Rendre LL ( 1 ) ---------------------------------------------------------------- S ::= A T ::= id | ( A ) S ::= A T ::= id | ( A ) A ::= V | E V ::= id R A ::= V | E V ::= id R E ::= T E R ::= ++ | E ::= T E R ::= ++ | E ::= + T E | E ::= + T E | Il ny a pas de problème avec la règle R ::= ++ | :Il ny a pas de problème avec la règle R ::= ++ | : ( 1 ) Prem ( ++ ) Prem ( ) = ( 1 ) Prem ( ++ ) Prem ( ) = ( 2 ) Une seule dérivation atteint. ( 2 ) Une seule dérivation atteint. ( 3 ) Prem ( R ) = {, + } nintersecte pas ( 3 ) Prem ( R ) = {, + } nintersecte pas Suiv ( R ) = Suiv ( V ) = Suiv ( A ) Suiv ( R ) = Suiv ( V ) = Suiv ( A ) = { ) } v Suiv ( S ) = { ), # } = { ) } v Suiv ( S ) = { ), # } v

33 24 septembre 2007Cours de compilation 4 - Intranet33 Rendre LL ( 1 ) ---------------------------------------------------------------- S ::= A T ::= id | ( A ) S ::= A T ::= id | ( A ) A ::= V | E V ::= id R A ::= V | E V ::= id R E ::= T E R ::= ++ | E ::= T E R ::= ++ | E ::= + T E | E ::= + T E | Bien sûr, il ny a pas de problème avec T ::= id | ( A ).Bien sûr, il ny a pas de problème avec T ::= id | ( A ). Il ny a pas de problème avec la règle E ::= + T E | :Il ny a pas de problème avec la règle E ::= + T E | : ( 1 ) Prem ( + T E ) Prem ( ) = ( 1 ) Prem ( + T E ) Prem ( ) = ( 2 ) Une seule dérivation atteint. ( 2 ) Une seule dérivation atteint. ( 3 ) Prem ( E ) = {, + } nintersecte pas ( 3 ) Prem ( E ) = {, + } nintersecte pas Suiv ( E ) = Suiv ( E ) = Suiv ( A ) = { ), # } Suiv ( E ) = Suiv ( E ) = Suiv ( A ) = { ), # } v

34 24 septembre 2007Cours de compilation 4 - Intranet34 Rendre LL ( 1 ) ---------------------------------------------------------------- S ::= A T ::= id | ( A ) S ::= A T ::= id | ( A ) A ::= V | E V ::= id R A ::= V | E V ::= id R E ::= T E R ::= ++ | E ::= T E R ::= ++ | E ::= + T E | E ::= + T E | Mais, il y a un problème avec A ::= V | E, car :Mais, il y a un problème avec A ::= V | E, car : id Prem ( V ) Prem ( E ) id Prem ( V ) Prem ( E ) A V E id R Ancien ! T E id E ( A ) E A id P Nouveau ! id R id E v

35 24 septembre 2007Cours de compilation 4 - Intranet35 Rendre LL ( 1 ) ---------------------------------------------------------------- S ::= A T ::= id | ( A ) S ::= A T ::= id | ( A ) A ::= ( A ) E | id P A ::= ( A ) E | id P P ::= R | E P ::= R | E E ::= + T E | R ::= ++ | E ::= + T E | R ::= ++ | P R E Ancien ! ++ + T E P + N Nouveau ! ++ + T E

36 24 septembre 2007Cours de compilation 4 - Intranet36 Rendre LL ( 1 ) ---------------------------------------------------------------- S ::= A T ::= id | ( A ) S ::= A T ::= id | ( A ) A ::= ( A ) E | id P A ::= ( A ) E | id P P ::= + N | N ::= + | T E P ::= + N | N ::= + | T E E ::= + T E | E ::= + T E | Il ny a clairement pas de problème avec N ::= + | T E !Il ny a clairement pas de problème avec N ::= + | T E ! Il na pas non plus de problème avec P ::= + N |, car :Il na pas non plus de problème avec P ::= + N |, car : ( 1 ) Prem ( + N) = { + } et Prem ( ) = { } ( 1 ) Prem ( + N) = { + } et Prem ( ) = { } ( 2 ) Nous atteignons dune seule façon ! ( 2 ) Nous atteignons dune seule façon ! ( 3 ) Prem ( P ) = { +, } nintersecte pas ( 3 ) Prem ( P ) = { +, } nintersecte pas Suiv ( P ) = Suiv ( A ) = { ), # } Suiv ( P ) = Suiv ( A ) = { ), # }


Télécharger ppt "24 septembre 2007Cours de compilation 4 - Intranet1 Cours de compilation Techniques danalyse descendantes."

Présentations similaires


Annonces Google