Analyse descendante LL(k)

Save this PDF as:
 WORD  PNG  TXT  JPG

Dimension: px
Commencer à balayer dès la page:

Download "Analyse descendante LL(k)"

Transcription

1 Bureau M3 extension mirabelle.nebut at lifl.fr

2 Principes Factorisation à gauche Suppression de la récursivité à gauche 2/119

3 Objectif du cours Comprendre le fonctionnement des générateurs de parser descendants : LL(1), ex antlr V1 LL(k), ex javacc LL(*), ex antlr V3 3/119

4 Analyse descendante L automate à pile sous-jacent : effectue uniquement des lectures et des expansions ; construit un arbre en ordre préfixe (idem aut. items) ; part de l axiome (idem aut. items) ; construit une dérivation gauche (idem aut. items). 4/119

5 Différence avec l automate des items Deux différences fondamentales : analyse déterministe dite prédictive ; plus d items ni de réductions explicites. 5/119

6 Analyse déterministe À chaque expansion l analyseur sait choisir une production. Il ne revient jamais sur ce choix : en cas de succès le mot appartient au langage ; en cas d échec on est sûr que mot n appartient pas au langage. 6/119

7 Analyse prédictive L analyseur prédit quelle production utiliser en analysant les k prochains symboles sous la tête de lecture. Conséquences : ne fonctionne qu avec certaines grammaires, dites LL(k) ; tête de lecture toujours définie : marqueur de fin de mot #. NB : dans ce cours techniques pour k=1, on regarde uniquement la tête de lecture. 7/119

8 Se passer des items Rappel : item de la forme [X α β] : X est en cours de reconnaissance ; α a déjà été reconnu ; il reste à reconnaître β, le futur de l item Un analyseur LL : ne mémorise pas qu il est en train de reconnaître X ; ne mémorise pas qu il a reconnu α ; considère uniquement β. 8/119

9 Se passer des items : conséquences Plus besoin d axiome supplémentaire. Dans la pile : plus d items mais des mots étendus : mots de (V N V T ) ; l alphabet est V N V T ; le symbole de pile initiale est l axiome. S pile initiale A b B une pile pile vide (acceptation) 9/119

10 Exemple à suivre dans le cours Soit la grammaire G = {V T, V N, S, P} avec : V T = {a, b, d, e} ; V N = {S, A, B, D} ; P contient les productions : S AB Da A aab ɛ B bb ɛ D dd e 10/119

11 Exemple - les piles pour abb# S AB Da B bb ɛ A aab ɛ D dd e abb#? S abb# (1) A B abb# (2) a A b B abb# (3) A b B bb# (4) b B bb# (5) B b# (6) b B b# (7) B # (8) # (9) Comparer avec l automates des items! Dérivation gauche, arbre en ordre préfixe. 11/119

12 Généralisation La configuration initiale est (m#, S) ; La configuration finale est (#, ) : acceptation par pile vide. On traite systématiquement le sommet de pile. 12/119

13 Transition de lecture Si le sommet de pile est un terminal a V T : on contrôle que a est bien sous la tête de lecture (sinon échec) ; on le consomme ; on le dépile. Lecture de a : (am, z 1... z n a) (m, z 1... z n ) 13/119

14 Transition d expansion Si le sommet de pile est un non terminal X V N et que la tête de lecture est y V T {#}... si Table[X, y] contient X X 1... X n : on dépile X ; on empile à sa place X 1... X n, avec X 1 au sommet. (m, z 1... z n X ) (m, z 1... z n X n... X 1 ) sinon erreur. 14/119

15 Transition d expansion : remarque Expansion par X X 1... X n : (m, z 1... z n X ) (m, z 1... z n X n... X 1 ) X 1 sera traité en premier. on assure ainsi la construction d une dérivation gauche ; 15/119

16 Construction de l arbre syntaxique : ordre préfixe Transition d expansion par X X 1... X n : X est le prochain nœud à traiter dans l arbre (pour l ordre préfixe) ; on lui rajoute les fils X 1... X n de la gauche vers la droite ; le prochain nœud à traiter devient X 1. Transition de a-lecture : a est le prochain nœud à traiter dans l arbre (pour l ordre préfixe) ; on vérifie que a concorde bien avec la tête de lecture ; et on passe au nœud suivant. 16/119

17 Mise en œuvre Les outils n implantent pas un automate à pile. Ils utilisent une implémentation récursive. Dans tous les cas, le choix de l expansion est indiqué par une table d analyse. 17/119

18 Table d analyse - exemple S A B D a S AB A aab erreur erreur b S AB A ɛ B bb erreur d S Da erreur erreur D dd e S Da erreur erreur D e # S AB A ɛ B ɛ erreur 18/119

19 Table d analyse LL(1) Contient toute l intelligence de l analyseur syntaxique. Definition La table d analyse Table est un tableau à deux dimensions tel que : chaque colonne est indicée par un non-terminal V N ; chaque ligne est indicée par un terminal V T ou # ; chaque case contient une production P ou erreur. On verra plus tard comment remplir cette table. 19/119

20 Interprétation de Table[a, X ] si le terminal a V T est sous la tête de lecture ; et si le non-terminal en cours de traitement est X V N ; alors on consulte Table[a, X ]. Si Table[X, a] contient X γ alors on choisit une expansion par cette production ; erreur alors erreur de syntaxe : X et a ne s accordent pas. 20/119

21 Principes Factorisation à gauche Suppression de la récursivité à gauche 21/119

22 Analyseur descendant récursif Principe : analyseur LL codé par un ensemble de fonctions ; ces fonctions s appellent les unes les autres ; n utilise pas de pile explicite : pile implicite des appels. Codage des fonctions : une fonction X() par non-terminal X V N de la grammaire ; X() reconnaît un mot engendré par X ; la fonction X() code les productions Table[X, y] de la table d analyse, pour tout y V T #. 22/119

23 Exemple Écrire un analyseur syntaxique récursif LL(1) Parser pour G : S AB Da A aab ɛ B bb ɛ D dd e À voir : écriture de S(), A(), B(), D() ; collaboration avec un analyseur lexical. 23/119

24 Collaboration avec un analyseur lexical On reprend les conventions utilisées en TP : un an. lexical anlex de type Scanner (supposé donné) ; symboles de type Symbole ; codage entier du type des symboles dans TypeSymboles (noté TS dans les transparents) ; méthode int gettype() de Symbole pour obtenir ce type ; méthode Symbole next token() de Scanner : avance la tête de lecture tetelect ; retourne le symbole lu, de type Symbole. on remplace le marqueur # par TS.EOF. 24/119

25 Construction de l analyseur syntaxique... public class Parser { // analyseur lexical private Scanner anlex; // symbole courant reçu de l analyseur lexical private Symbole tetelect; public Parser (Scanner anlex) { this.anlex = anlex; }... 25/119

26 Lancement de l analyseur syntaxique Dans la classe Parser : public void analyser() throws ScannerException, ParserExcep // positionnement tete de lecture this.tetelect = (Symbole) this.anlex.next_token(); this.s(); // je veux reconna^ıtre l axiome } // et uniquement l axiome if (this.tetelect.gettype()!= TS.EOF) throw new ParserException(); 26/119

27 Code de S() La tête de lecture est déjà positionnée sur le symbole de prédiction. S a S AB b S AB d S Da e S Da # S AB private void S() throws... { if (this.tetelect.gettype() == TS.a)... // S -> AB else if (this.tetelect.gettype() == TS.b)... // S -> AB else if (this.tetelect.gettype() == TS.d)... // S -> Da else if (this.tetelect.gettype() == TS.e)... // S -> Da else if (this.tetelect.gettype() == TS.EOF)... // S -> AB else throw new ParserException(); } 27/119

28 Code de S() On factorise. S a S AB b S AB d S Da e S Da # S AB private void S() throws... { if (this.tetelect.gettype() == TS.a this.tetelect.gettype() == TS.b this.tetelect.gettype() == TS.EOF)... // S -> AB else if (this.tetelect.gettype() == TS.d this.tetelect.gettype() == TS.e)... // S -> Da else throw new ParserException(); } 28/119

29 Code des productions de S() Code pour S AB : je veux reconnaître A puis B ; A() ; B() ; Code pour S Da : je veux reconnaître D puis vérifier que a est bien sous la tête de lecture ; et consommer a. 29/119

30 Terminaux : vérification et consommation Méthode consommer dédiée à la gestion des terminaux : private void consommer(int type) throws ScannerException, ParserException { if (this.tetelect.gettype() == type) this.tetelect = (Symbole) this.anlex.next_token(); else throw new ParserException(); } Code pour S Da : D(); this.consommer(ts.a);. 30/119

31 Code final de S() S a S AB b S AB d S Da e S Da # S AB private void S() throws... { if (this.tetelect.gettype() == TS.a this.tetelect.gettype() == TS.b this.tetelect.gettype() == TS.EOF) { A(); B(); // S -> AB } else if (this.tetelect.gettype() == TS.d this.tetelect.gettype() == TS.e) { D(); this.consommer(ts.a); // S -> Da } else throw new ParserException(); } Quand S() termine, pour un mot accepté, la tête de lecture est sur TS.EOF. 31/119

32 Code de A() La tête de lecture est déjà positionnée sur le symbole de prédiction. A a A aab b A ɛ d erreur e erreur # A ɛ private void A() throws... { if (this.tetelect.gettype() == TS.a)... // A -> aab else if (this.tetelect.gettype() == TS.b this.tetelect.gettype() == TS.EOF)... // A -> else // erreur throw new ParserException(); } 32/119

33 Code des productions de A() Code pour A aab : this.consommer(ts.a); A(); this.consommer(ts.b); Code pour A ɛ : le mot vide est immédiatement reconnu ; sans toucher à la tête de lecture ; on ne fait rien. 33/119

34 Code final de A() A a A aab b A ɛ d erreur e erreur # A ɛ private void A() throws... { if (this.tetelect.gettype() == TS.a) { // A -> aab this.consommer(ts.a); A(); this.consommer(ts.b); } else if (this.tetelect.gettype() == TS.b this.tetelect.gettype() == TS.EOF) // rien, A -> } else // erreur throw new ParserException(); } Quand A() termine, pour un mot accepté, la tête de lecture est positionnée pour reconnaître un B ou lire un b. 34/119

35 Code final de B() B a erreur b B bb d erreur e erreur # B ɛ private void B() throws... { if (this.tetelect.gettype() == TS.b) { // B -> bb this.consommer(ts.b); B(); } else if (this.tetelect.gettype() == TS.EOF) // rien, B -> } else // erreur throw new ParserException(); } 35/119

36 Code final de D() D a erreur b erreur d D dd e D e # erreur private void D() throws... { if (this.tetelect.gettype() == TS.d) { // D -> dd this.consommer(ts.d); D(); } else if (this.tetelect.gettype() == TS.e) // D -> e this.consommer(ts.e); else // erreur throw new ParserException(); } 36/119

37 Exemple d exécution Reconnaître abb#? 37/119

38 Principes Factorisation à gauche Suppression de la récursivité à gauche 38/119

39 Principes Factorisation à gauche Suppression de la récursivité à gauche 39/119

40 Outils pour l analyse prédictive, intuition - 1 Comment choisir entre S AB et S Da? Supposons que je sache que : AB ne permet de dériver que des mots préfixés par a ou par b ; AB au et AB bu, pour u V T ; Da ne permet de dériver que des mots préfixés par d ou par e ; Da du et Da eu, pour u V T. 40/119

41 Outils pour l analyse prédictive, intuition - 1 Maintenant je sais (partiellement) choisir entre S AB et S Da : si tête lecture {a, b} : choisir S AB ; si tête lecture {d, e} : choisir S Da. S a S AB b S AB d S Da e S Da #? 41/119

42 Ensemble Premier - définition On dit que Premier(AB) = {a, b} et Premier(Da) = {d, e}. Pour α (V T V N ) +, Premier(α) contient l ensemble des terminaux de V T susceptibles de commencer un mot de V T + dérivé de α. Si α = ɛ, cet ensemble est vide. Definition Soit une grammaire algébrique. On définit : Premier : (V T V N ) P(V T ) α {a V T α au, u V T } 42/119

43 Les Premier sur les arbres syntaxiques S S S A B A B A B a A b b B α (V T V N ) S S D D d D a e a Premier(α) 43/119

44 Calcul des Premier - 0 Soit α (V N V T ) : cas α = ɛ :? α = a, a V T :? α = aβ, a V T, β (V N V T ) :? α = X, X V N :? α = X β, X V N, β (V N V T ) :? fcas 44/119

45 Calcul des Premier - 1 Soit α (V N V T ) : cas α = ɛ : α = a, a V T : {a} α = aβ, a V T, β (V N V T ) : {a} α = X, X V N :? α = X β, X V N, β (V N V T ) :? fcas 45/119

46 Calcul de Premier(X ), X V N Si l ensemble des productions de membre gauche S est : alors on a : S AB Da Premier(S) = Premier(AB) Premier(Da) Cas général : Si la grammaire contient les productions de membre gauche X : X γ 1... γ n alorspremier(x ) = {Premier(γ i ) X γ i P} 46/119

47 Calcul des Premier - 2 Soit α (V N V T ) : cas α = ɛ : α = a, a V T : {a} α = aβ, a V T, β (V N V T ) : {a} α = X, X V N : {Premier(γ i ) X γ i P} α = X β, X V N, β (V N V T ) :? fcas 47/119

48 Calcul des Premier, α = X β, X V N Deux cas selon que X peut s effacer ou non : X ɛ? Si X ɛ on dit que X est ɛ-productif : X ɛ-prod 48/119

49 Calcul des Premier, α = X β, X ɛ-prod - exemple Par exemple D ɛ-productif : S S D dd e D D alors Premier(Da) = Premier(D) d D a e a Donc, si X ɛ-prod, Premier(X β) = Premier(X ) 49/119

50 Calcul des Premier, α = X β, X ɛ-prod - exemple Par exemple A ɛ-productif : A ɛ aab Premier(AB) = Premier(A) Premier(B) Premier(ABS) = Premier(A) Premier(BS) a A A S b S B A B B b Donc, si X ɛ alors Premier(X β) = Premier(X ) Premier(β) 50/119

51 Calcul des Premier Principes Soit α (V N V T ) : cas fcas α = ɛ : α = a, a V T : {a} α = aβ, a V T, β (V N V T ) : {a} α = X, X V N : {Premier(γ i ) X γ i P} α = X β, X V N \ ɛ-prod, β (V N V T ) : Premier(X ) α = X β, X V N ɛ-prod, β (V N V T ) : Premier(X ) Premier(β) 51/119

52 Calcul effectif des ensembles Premier On procède en deux étapes : 1. on pose un système d équations pour Premier ; 2. on calcule par itération de point fixe les plus petits ensembles qui satisfont ces équations. Pour le moment on suppose donné ɛ-prod, l ensemble des ɛ-productifs. 52/119

53 Exemple Principes S AB Da A aab ɛ B bb ɛ D dd e ɛ-prod = {A, B, S} Premier(S) =? Premier(A) =? Premier(B) =? Premier(D) =? α = ɛ : α = a, a V T : {a} α = aβ, a V T, β (V N V T ) : {a} α = X, X V N : {Premier(γi ) X γ i P} α = X β, X V N \ɛ-prod, β (V N V T ) : Premier(X ) α = X β, X V N ɛ-prod, β (V N V T ) : Premier(X ) Premier(β) 53/119

54 Exemple Principes Premier(S) = Premier(A) Premier(B) Premier(D) Premier(A) = {a} Premier(B) = {b} Premier(D) = {d, e} D où Premier(S) = {a, b, d, e} Premier(A) = {a} Premier(B) = {b} Premier(D) = {d, e} Premier(AB) = {a, b} Premier(Da) = {d, e} Premier(aAb) = {a} Premier(bB) = {b} Premier(dD) = {d} Premier(e) = {e} Premier(ɛ) = 54/119

55 Exemple : remplissage de la table A aab et Premier(aAb) = {a} A ɛ et Premier(ɛ) = S A B D a S AB A aab erreur erreur b S AB A ɛ B bb erreur d S Da erreur erreur D dd e S Da erreur erreur D e # S AB A ɛ B ɛ erreur 55/119

56 Exemple : remplissage de la table S AB et Premier(AB) = {a, b} S Da et Premier(Da) = {d, e} S A B D a S AB A aab erreur erreur b S AB A ɛ B bb erreur d S Da erreur erreur D dd e S Da erreur erreur D e # S AB A ɛ B ɛ erreur 56/119

57 Remarque : résolution du système Premier(S) = Premier(A) Premier(B) Premier(D) Premier(A) = {a} Premier(B) = {b} Premier(D) = {d, e} Se résoud sans itération de point fixe : système d équations non récursif. Ce n est pas toujours le cas. 57/119

58 Résolution du système : autre exemple S S 1 S 2 a S 1 S b S 2 c Premier(S) = Premier(S 1 ) {a} Premier(S 1 ) = Premier(S) {b} Premier(S 2 ) = {c} iter Premier(S) Premier(S 1 ) Premier(S 2 ) 0 1 {a} {b} {c} 2 {a, b} {b, a} {c} 3 {a, b} {b, a} {c} stabilisation 58/119

59 Principes Factorisation à gauche Suppression de la récursivité à gauche 59/119

60 Définition des ɛ-prod Definition Un non terminal X V N est dit ɛ-productif si X ɛ. L ensemble des ɛ-productif est ɛ-prod. X est ɛ-productif si la grammaire contient la production : X ɛ ; ou X Y 1 Y 2... Y n telle que l ensemble des non-terminaux {Y 1, Y 2,..., Y n } V N ne contient que des non-terminaux ɛ-productifs. Algorithme de calcul similaire à celui qui calcule les productifs. 60/119

61 Exemple Principes S AB Da A aab ɛ B bb ɛ D dd e ɛ-prod? 61/119

62 Principes Factorisation à gauche Suppression de la récursivité à gauche 62/119

63 Outils pour l analyse prédictive, intuition - 2 Pour choisir entre S AB et S Da : si tête lecture {a, b} : choisir S AB ; si tête lecture {d, e} : choisir S Da. Et si la tête de lecture est #? # Premier(AB) Premier(Da). Comment choisir entre A aab et A ɛ? Premier(ɛ) = les ensembles Premier ne suffisent pas. 63/119

64 , intuition Quand appliquer A ɛ? Quand la tête de lect. correspond à un terminal qui peut suivre A. A S A A B a b b Suivant(A) Suivant(A) Premier(B) 64/119

65 , intuition On a donc b Suivant(A) A a A aab b A ɛ d? e? #? 65/119

66 , intuition Pour α (V T V N ) +, Suivant(α) contient l ensemble des terminaux de V T susceptibles de suivre α dans un mot de V T + dérivé de l axiome S. Si α = ɛ, cet ensemble est vide. Par convention, Suivant(S) {#}. 66/119

67 , définitions équivalentes Definition Soit une grammaire algébrique d axiome S. On définit : Suivant : (V T V N ) P(V T ) α {a V T S βαaγ, pour β, γ (V N V T ) } Definition Suivant : (V T V N ) P(V T ) α {a Premier(γ) S βαγ, pour β, γ (V N V T ) } 67/119

68 Calcul des Suivant - 1 Pour calculer Suivant(X ), on regarde les productions dans lesquelles X apparaît en partie droite (différent du calcul des Premier). Pour Suivant(A) : A aab A S AB S A A B a b 68/119

69 Calcul des Suivant - 2 Soit P X P l ensemble des productions p dans lesquelles X apparaît en partie droite : Suivant(X ) = p P X Suivant p (X ) Ex : P A = {S AB, A aab} Suivant(A) = Suivant(A) S AB Suivant(A) A aab 69/119

70 Calcul des Suivant, cas de l axiome Pour l axiome, on ajoute le marqueur de fin de mot : Ex : pour X axb ɛ Suivant(S) = {#} p P S Suivant p (S) P X = {X ax b} Suivant(X ) = {#} Suivant(X ) X ax b 70/119

71 Calcul des Suivant exemple Suivant(A) S AB? (exemple précédent) Cas déjà vu : S A B Suivant(A) Premier(B) 71/119

72 Calcul des Suivant exemple Suivant(A) S AB? (exemple précédent) mais B est ɛ-prod! S A B Suivant(A) Suivant(S) 72/119

73 Calcul des Suivant exemple Puisque B est ɛ-prod : Suivant(A) S AB = Premier(B) Suivant(S) 73/119

74 Calcul des Suivant - 4 Quand une production est de la forme... X α : pour calculer Suivant(X ) ; Il faut pouvoir dire si α (V N V T ) est ɛ-productif ou pas. Definition α (V N V T ) est ɛ-productif si α ɛ. On définit la fonction : Eps : (V N V T ) {vrai, faux} α α est ɛ-productif On verra après comment calculer Eps. 74/119

75 Calcul des Suivant - 5 Pour calculer Suivant p (X ) avec : p = Y αx β et Eps(β) = faux, α, β (V N V T ) Y X β Suivant p (X ) = Premier(β) Ex : pour Y Xb, Suivant(X ) Y Xb = {b}. 75/119

76 Calcul des Suivant - 6 Pour calculer Suivant p (X ) avec : p = Y αx Y α X Suivant p (X ) = Suivant(Y ) 76/119

77 Calcul des Suivant - 7 Pour calculer Suivant p (X ) avec : p = Y αx β et Eps(β) = vrai, α, β (V N V T ) Y X β Suivant p (X ) = Premier(β) Suivant(Y ) Ex : pour S AB, Suivant(A) S AB = Premier(B) Suivant(S). 77/119

78 Remarque - 1 Principes Si X apparaît plusieurs fois en partie droite d une production, il faut prendre en compte toutes ses occurrences dans le calcul de Suivant(X ). Ex : Y X ax ax c Suivant Y X ax ax c (X ) = {a, c} 78/119

79 Remarque - 2 Principes Pourquoi pas Suivant(X ) Y X β = Premier(β) Suivant(β)? Parce que Suivant(Y ) Suivant(β). Ex : S Y Z Y X 1 X 2 X 1 a X 2 ɛ b Z X 2 c Suivant(S) = {#} Suivant(Y ) = Suivant(S) = {#} Suivant(Z) = Suivant(S) = {#} Suivant(X 2 ) = {c} Suivant(Y ) = {c, #} Suivant(X 1 ) = Premier(X 2 ) Suivant(Y ) 79/119

80 Calcul des Suivant, récapitulons! # Suivant(axiome) Soit P X P l ensemble des productions p dans lesquelles X apparaît en partie droite : Suivant(X ) = p P X Suivant p (X ) avec : Suivant p (X ) = cas p = Y αx : Suivant(Y ) p = Y αx β et Eps(β) = faux : Premier(β) p = Y αx β et Eps(β) = vrai : Premier(β) Suivant(Y ) fincas 80/119

81 Calcul effectif des ensembles Suivant On procède en deux étapes : on pose un système d équations pour Suivant ; on calcule par itération de point fixe les plus petits ensembles qui satisfont ces équations. avec initialement Suivant(S) = {#}, et pour les autres non-terminaux Suivant(X ) =. 81/119

82 Exemple Principes S AB Da A aab ɛ B bb ɛ D dd e Eps(B) = vrai Suivant? # Suivant(axiome) Suivant(X ) = p P X Suivant p (X ) avec : Suivant p (X ) = cas p = Y αx : Suivant(Y ) p = Y αx β et Eps(β) = faux : Premier(β) p = Y αx β et Eps(β) = vrai : Premier(β) Suivant(Y ) fincas 82/119

83 Exemple de remplissage de table A ɛ et Suivant(A) = {b, #} S A B D a S AB A aab erreur erreur b S AB A ɛ B bb erreur d S Da erreur erreur D dd e S Da erreur erreur D e # S AB A ɛ B ɛ erreur 83/119

84 Exemple de remplissage de table S AB et Suivant(S) = {#} S A B D a S AB A aab erreur erreur b S AB A ɛ B bb erreur d S Da erreur erreur D dd e S Da erreur erreur D e # S AB A ɛ B ɛ erreur 84/119

85 Calcul des ɛ-productifs On connaît déjà ɛ-prod, ens. des non-terminaux ɛ-productifs. Pour calculer Eps(α) : Eps(α) = cas α = ɛ : vrai α = X 1... X n, n 1 avec {X 1,..., X n } V N et {X 1,..., X n } ɛ-prod : vrai autre : faux // α contient un terminal fincas 85/119

86 Exemple Principes Sachant que ɛ-prod = {A, B, S} : Eps(Da)? Eps(AB)? Eps(ɛ)? Eps(B)? 86/119

87 Principes Factorisation à gauche Suppression de la récursivité à gauche 87/119

88 Table d analyse : au préalable On calcule : les ɛ-productifs ; les ensembles Premier ; les ensembles Suivant. 88/119

89 Remplissage de la table Entrée : une gram. alg. G, ses ensembles Premier et Suivant Sortie : la table d analyse Table pour toute production X γ P faire pour tout a Premier(γ) faire ajouter X γ à Table[X, a] fait si Eps(γ) = vrai alors pour tout b Suivant(X ) faire Table[X, b] = X γ fait finsi fait Ajouter erreur dans les entrées de Table restées vides 89/119

90 Exemple Principes S AB : Premier(AB) = {a, b} ; Eps(AB) = vrai ; Suivant(S) = {#}. S Da : Premier(Da) = {d, e} ; Eps(Da) = faux. Rien à compléter par erreur. S a S AB b S AB d S Da e S Da # S AB 90/119

91 Exemple Principes A aab : Premier(aAb) = {a} ; Eps(aAb) = faux. A ɛ : Premier(ɛ) = ; Eps(ɛ) = vrai ; Suivant(A) = {b, #}. On complète par erreur. A a A aab b A ɛ d erreur e erreur # A ɛ 91/119

92 Principes Factorisation à gauche Suppression de la récursivité à gauche 92/119

93 Analyseur LL(1) Un analyseur LL(1) est déterministe et piloté par le sommet de pile : si terminal a : lecture de a (ou erreur) ; si non terminal X avec a sous la tête de lecture : expansion selon Table[X, a]. Et si Table[X, a] contient plus d une production? Non-déterminisme : la grammaire n est pas LL(1) ; on ne peut pas appliquer une analyse LL(1). 93/119

94 Caractérisation par table d analyse : une grammaire est LL(1) si chaque case contient exactement une production ou erreur. Caractérisation par contre-exemple : une grammaire n est pas 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 ɛ 94/119

95 LL(1) et ambiguïté Une grammaire LL(1) n est pas ambiguë. Une grammaire ambiguë n est pas LL(1). 95/119

96 Cas classiques non LL(1) Dans les cas suivants, la grammaire n est pas LL(1) : ambiguïté ; récursivité gauche : A Aa ɛ ; intuitivement récursivité infinie de A(). non factorisation gauche : S aa ab Solutions : : factorisation à gauche (parfois) ; suppression de la récursivité gauche (parfois) ; utiliser un générateur de parser plus puissant! 96/119

97 Factorisation à gauche Suppression de la récursivité à gauche Principes Factorisation à gauche Suppression de la récursivité à gauche 97/119

98 Factorisation à gauche Suppression de la récursivité à gauche Principes Factorisation à gauche Suppression de la récursivité à gauche 98/119

99 Factorisation à gauche : exemple - 1 Factorisation à gauche Suppression de la récursivité à gauche Les listes d identificateur de Init : listeident IDENT IDENT SEPVAR listeident On factorise IDENT et on obtient : listeident IDENT suitelisteident suitelisteident ɛ SEPVAR listeident 99/119

100 Factorisation à gauche : exemple - 2 Factorisation à gauche Suppression de la récursivité à gauche X ab abbx abbbx Factorisation de ab : on prend le plus grand préfixe commun. X aby Y ɛ bx bbx Puis à nouveau factorisation de b. 100/119

101 Factorisation à gauche Suppression de la récursivité à gauche Factorisation à gauche - algorithme On remplace les règles de la forme : où X αβ 1... αβ n γ 1... γ m α (V T V N ) + et β i, γ j (V T V N ) ; le préfixe commun α est choisi le plus grand possible ; α n est pas préfixe de γ j. par les règles : X αx γ 1... γ m X β 1... β n où X est un nouveau non-terminal. On réitère ce processus tant que nécessaire. 101/119

102 Factorisation à gauche Suppression de la récursivité à gauche Principes Factorisation à gauche Suppression de la récursivité à gauche 102/119

103 Factorisation à gauche Suppression de la récursivité à gauche Suppression de la récursivité à gauche Récursivité gauche : immédiate : production A Aα, α (V T V N ) + ; générale : il existe une dérivation A Aα, α (V T V N ) +. Il est possible de supprimer les deux cas. On ne verra que la récursivité immédiate. 103/119

104 Factorisation à gauche Suppression de la récursivité à gauche Suppression de la récursivité gauche immédiate On remplace les règles de la forme où X X α 1... X α n β 1... β m α i (V T V N ) + et β j (V T V N ) ; les β j ne commencent pas par X. par les règles : X β 1 X... β m X X α 1 X... α n X ɛ où X est un nouveau non-terminal. 104/119

105 Factorisation à gauche Suppression de la récursivité à gauche Suppression de la récursivité gauche : exemple Grammaire non ambiguë des expressions arithmétiques : E E + T T T T F F F i (E) X X α 1... X α n β 1... β m Après suppression de la rec gauche : E TE E +TE ɛ T FT T FT ɛ F i (E) X β 1 X... β m X X α 1 X... α n X ɛ 105/119

106 Factorisation à gauche Suppression de la récursivité à gauche Parfois ça ne suffit pas La grammaire ({a, b}, {S, A}, S, P) avec P = {S asb A, A aa ɛ} n est pas ambiguë ; n est pas récursive gauche ; est factorisée à gauche ; mais elle n est pas LL(1). 106/119

107 Au delà des grammaires LL(1) - 1 Factorisation à gauche Suppression de la récursivité à gauche La grammaire ({a, b}, {A, B}, A, P) avec P = {A abb ɛ, B Aaa b} n est pas LL(1). En effet Eps(A) = vrai et a Premier(A) Suivant(A). 107/119

108 Principes Factorisation à gauche Suppression de la récursivité à gauche 108/119

109 Grammaires LL(k), exemple La grammaire : n est pas LL(1). declaration DECLINT listeident FININSTR listeident IDENT IDENT SEPVAR listeident Elle est LL(2), et acceptée par un analyseur LL(k). En regardant 2 symboles sous la tête de lecture : si IDENT FININSTR : choisir listeident IDENT si IDENT SEPVAR : choisir listeident IDENT SEPVAR listeident 109/119

110 Grammaire LL(k), autre exemple P = {A abb ɛ, B Aaa b} Cette grammaire est LL(2) : Premier 2 (A) = {ab} Premier 2 (B) = {ab, aa, b} Suivant 2 (A) = {aa, #} 110/119

111 Table d analyse LL(2) A abb ɛ B Aaa b aa ab b # A A ɛ A abb erreur A ɛ B B Aaa B Aaa B b erreur 111/119

112 Analyseurs LL(k), principe Effectuent une prédiction basée sur k symboles. k borné. Ex : javacc 112/119

113 Insuffisance de l approche LL(k), [antlr] method type ID [ args ] ; type ID [ args ] { body } args unarg unarg, args unarg INT ID... Cette grammaire n est pas LL(k), mais est acceptée par antlr. 113/119

114 Analyseurs LL(*) Ne fixent pas une taille de look-ahead a priori. Représentent par un AFD le langage de look-ahead, pourvu qu il soit régulier. 114/119

115 Vers les formes ebnf Même un analyseur LL(*) refuse la récursivité gauche. Fâcheux pour les grammaires à opérateurs! Solution : grammaires dites en forme ebnf. E T ( + T ) * T F ( * T ) * F ( E ) id E E + T T T F * T F F ( E ) id 115/119

116 Grammaires sous forme ebnf Grammaires algébriques avec facilités d écriture. En partie droite de production : opérateurs à la expression régulière Refusé par Cup et tout générateur de parseur n acceptant pas les ebnf Accepté par la majorité des analyeurs LL(k). Semble plus simple, attention à l attribution. Ne pas utiliser en DS sauf si explicitement demandé. 116/119

117 Grammaires non LL(*) [antlr] s : label ID = expr label return expr ; label : ID : label ; n est pas LL(*) : [fatal] rule s has non-ll(*) decision due to recursive rule invocations from alts 1,2. [...] Version LL(*) : label : ( ID : )* 117/119

118 Génération de code à la ebnf E T ( + T ) * E() { T(); tant que tetelect est + { consommer(+); T(); } } Clôture de Kleene itération dans le code 118/119

119 Génération de code à la ebnf listea a* listea() { tant que tetelect est a { consommer(a); } } plus efficace que le code récursif généré par : listea a listea ɛ 119/119

120 AntLR Outil très riche. Décrit dans le même formalisme ebnf les entités lexicales et la syntaxe. Lit toute l entrée avant de lancer l analyse lexicale. 120/119

Analyse descendante. Avec tous mes remerciements à Mirabelle Nebut pour son excellent cours de COMPIL

Analyse descendante. Avec tous mes remerciements à Mirabelle Nebut pour son excellent cours de COMPIL Analyse (lexicale, syntaxique) L3 MIAGE Analyse descendante Avec tous mes remerciements à Mirabelle Nebut pour son excellent cours de COMPIL Université de Lille, France 2014-2015 1 Méthodes d analyse syntaxique

Plus en détail

Théorie des Langages

Théorie des Langages Théorie des Langages Analyse syntaxique descendante Claude Moulin Université de Technologie de Compiègne Printemps 2010 Sommaire 1 Principe 2 Premiers 3 Suivants 4 Analyse 5 Grammaire LL(1) Exemple : Grammaire

Plus en détail

Langages et Compilation. Analyse descendante prédictive

Langages et Compilation. Analyse descendante prédictive Langages et Compilation Analyse descendante prédictive 1 Introduction Grammaires LL(1) Une famille de grammaires analysables de façon ecace. Caractéristiques de l'analyse LL(1) analyse descendante Construction

Plus en détail

Théorie des langages. Automates à pile. Elise Bonzon http://web.mi.parisdescartes.fr/ bonzon/ elise.bonzon@parisdescartes.

Théorie des langages. Automates à pile. Elise Bonzon http://web.mi.parisdescartes.fr/ bonzon/ elise.bonzon@parisdescartes. Automates à pile Elise Bonzon http://web.mi.parisdescartes.fr/ bonzon/ elise.bonzon@parisdescartes.fr 1 / 62 Automates à pile Introduction Rappels sur les piles Automates à pile : définition Automates

Plus en détail

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1 Chap 4: Analyse syntaxique 1 III- L'analyse syntaxique: 1- Le rôle d'un analyseur syntaxique 2- Grammaires non contextuelles 3- Ecriture d'une grammaire 4- Les méthodes d'analyse 5- L'analyse LL(1) 6-

Plus en détail

L outil Cup. Licence info et GMI documentation COMPIL 2007-2008. Pour toutes remarques, questions, suggestions : mirabelle.nebut@lifl.

L outil Cup. Licence info et GMI documentation COMPIL 2007-2008. Pour toutes remarques, questions, suggestions : mirabelle.nebut@lifl. UFR IEEA Licence info et GMI documentation COMPIL 2007-2008 FIL Pour toutes remarques, questions, suggestions : mirabelle.nebut@lifl.fr 1 raccourci pour Java-Based Constructor of Useful Parsers est un

Plus en détail

Langages de programmation et compilation

Langages de programmation et compilation École Normale Supérieure Langages de programmation et compilation Jean-Christophe Filliâtre Cours 6 / 9 novembre 2015 Jean-Christophe Filliâtre Langages de programmation et compilation 2015 2016 / cours

Plus en détail

Grammaires hors-contexte

Grammaires hors-contexte Analyse syntaxique Grammaires hors-contexte Une grammaire hors-contexte est un 4-uplet N, Σ, P, S où : N est un ensemble de symboles non terminaux, appelé l alphabet non terminal. Σ est un ensemble de

Plus en détail

Analyse syntaxique IFT-15752 Compilation et interpr etation c! Danny Dub e 2006

Analyse syntaxique IFT-15752 Compilation et interpr etation c! Danny Dub e 2006 Analyse syntaxique Introduction Les grammaires hors-contexte sont les outils que nous utiliserons pour spécifier la structure syntaxique des programmes. Les grammaires hors-contexte ont plusieurs avantages:

Plus en détail

L2: cours I4c Langages et automates

L2: cours I4c Langages et automates L2: cours I4c Langages et automates Olivier Togni, LE2I (038039)3887 olivier.togni@u-bourgogne.fr Modifié le 31 mai 2007 Sommaire Utiles pour compilation, interprétation,... 1. Langages rationnels 2. Langages

Plus en détail

Compilation (INF 564)

Compilation (INF 564) Grammaires algébriques Analyse LL(1) Analyse LR(0) Quelques mots de l analyse LR(1) L outil Menhir 1 Compilation (INF 564) Analyse syntaxique François Pottier 16 décembre 2015 Grammaires algébriques Analyse

Plus en détail

CHAPITRE 5 : ANALYSE LEXICALE

CHAPITRE 5 : ANALYSE LEXICALE CHAPITRE 5 : ANALYSE LEXICALE L analyse lexicale est un autre domaine fondamental d application des automates finis. Dans la plupart des langages de programmation, les unités lexicales (identificateurs,

Plus en détail

Chap. 2. Langages et automates

Chap. 2. Langages et automates Chapitre 2. Langages et automates 1. Quelques définitions et description d un langage. 2. Les expressions régulières. 3. Les automates fini déterministes et non-déterministes. 4. Construction automatique

Plus en détail

Arbres. Alphabet Σ = Σ 0 Σ k. Exemples

Arbres. Alphabet Σ = Σ 0 Σ k. Exemples Arbres Alphabet Σ = Σ 0 Σ k Σ i : alphabet fini de symboles de rang i (Σ i Σ j possible). Un arbre t de rang k est défini par un ensemble (fini) dom(t) {1,..., k} clos par préfixe (domaine de t) : si v,

Plus en détail

I Arbres binaires. Lycée Faidherbe 2014-2015. 1 Rappels 2 1.1 Définition... 2 1.2 Dénombrements... 2 1.3 Parcours... 3

I Arbres binaires. Lycée Faidherbe 2014-2015. 1 Rappels 2 1.1 Définition... 2 1.2 Dénombrements... 2 1.3 Parcours... 3 I Arbres binaires 2014-2015 Table des matières 1 Rappels 2 1.1 Définition................................................ 2 1.2 Dénombrements............................................ 2 1.3 Parcours.................................................

Plus en détail

TP Compilation Analyse lexicale

TP Compilation Analyse lexicale TP Compilation Analyse lexicale Eric Ramat ramat@lisic.univ-littoral.fr 9 mai 2014 Durée : 6 heures 1 Introduction Le but de cet TP est de vous donner les bases nécessaires afin de pouvoir écrire votre

Plus en détail

Théorie des Langages

Théorie des Langages Théorie des Langages Automates Claude Moulin Université de Technologie de Compiègne Printemps 2013 Sommaire 1 Automate fini 2 Automate et langages réguliers 3 Automate à pile Automate fini déterministe

Plus en détail

Cours 9: Automates finis

Cours 9: Automates finis Cours 9: Automates finis Olivier Bournez ournez@lix.polytechnique.fr LIX, Ecole Polytechnique INF421-a Bases de la programmation et de l algorithmique Aujourd hui Rappels Déterminisation Automates et expressions

Plus en détail

Analyse syntaxique. Sections 4.1 à 4.4. IFT-3101 Compilation et interprétation Révision hiver 2014 p. 1

Analyse syntaxique. Sections 4.1 à 4.4. IFT-3101 Compilation et interprétation Révision hiver 2014 p. 1 Analyse syntaxique Sections 4.1 à 4.4 IFT-3101 Compilation et interprétation Révision hiver 2014 p. 1 * Contenu * Introduction Rôle et types d analyseurs syntaxiques Gestion des erreurs Langages hors-contexte

Plus en détail

Chapitre 4 Automates à pile et langages hors-contexte

Chapitre 4 Automates à pile et langages hors-contexte Chapitre 4 Automates à pile et langages hors-contexte 87 Introduction Langage a n b n n est pas accepté par un automate fini. Par contre L k = {a n b n n k} est accepté. Mémoire finie, mémoire infinie,

Plus en détail

Compilation. Algorithmes d'analyse syntaxique

Compilation. Algorithmes d'analyse syntaxique Compilation Algorithmes d'analyse syntaxique Préliminaires Si A est un non-terminal et γ une suite de terminaux et de non-terminaux, on note : A γ si en partant de A on peut arriver à γ par dérivations

Plus en détail

Algorithmique et Analyse d Algorithmes

Algorithmique et Analyse d Algorithmes Algorithmique et Analyse d Algorithmes L3 Info Cours 11 : Arbre couvrant Prétraitement Benjamin Wack 2015-2016 1 / 32 La dernière fois Rappels sur les graphes Problèmes classiques Algorithmes d optimisation

Plus en détail

Concours 2015 Épreuve d Informatique Filière : MP Durée de l épreuve : 3 heures. L utilisation d une calculatrice est autorisée.

Concours 2015 Épreuve d Informatique Filière : MP Durée de l épreuve : 3 heures. L utilisation d une calculatrice est autorisée. A 2015 INFO. MP École des Ponts ParisTech, SUPAERO (ISAE), ENSTA ParisTech, Télécom ParisTech, Mines ParisTech, Mines de Saint-étienne, Mines Nancy, Télécom Bretagne, ENSAE ParisTech (filière MP), École

Plus en détail

Les automates. Fabrice EUDES, Pascal EVRARD, Philippe MARQUET, François RECHER & Yann SECQ

Les automates. Fabrice EUDES, Pascal EVRARD, Philippe MARQUET, François RECHER & Yann SECQ Les automates Fabrice EUDES, Pascal EVRARD, Philippe MARQUET, François RECHER & Yann SECQ Avril 2015 Retour sur l île et le barman Deux problèmes similaires: Des îles, des bateaux et un trésor à trouver

Plus en détail

Expressions rationnelles, automates, analyse lexicale

Expressions rationnelles, automates, analyse lexicale Chapitre 2 Expressions rationnelles, automates, analyse lexicale L analyse lexicale est la première phase d un compilateur ou d un interprète : elle consiste à identifier et à catégoriser les différents

Plus en détail

Théorie des Langages Formels Chapitre 5 : Automates minimaux

Théorie des Langages Formels Chapitre 5 : Automates minimaux Théorie des Langages Formels Chapitre 5 : Automates minimaux Florence Levé Florence.Leve@u-picardie.fr Année 2015-2016 1/29 Introduction Les algorithmes vus précédemment peuvent mener à des automates relativement

Plus en détail

Théorie des Langages

Théorie des Langages Théorie des Langages AntLR - Générateur d analyseurs Claude Moulin Université de Technologie de Compiègne Printemps 2015 Sommaire 1 Introduction 2 AntLR ANTLR : ANother Tool for Language Recognition URL

Plus en détail

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles) 1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d

Plus en détail

Programmation récursive

Programmation récursive Année 2004-2005 F. Lévy IUT De Villetaneuse Dép t informatique Cours d'algorithmique 2 éme Année Cours 8 Programmation récursive 1. Qu'est-ce que la programmation récursive Définition : la programmation

Plus en détail

Série d exercices N 9 Arbres

Série d exercices N 9 Arbres Série d exercices N 9 Arbres Exercice 1 a) Ecrire une fonction ARBIN creerarbreentiers() qui permet de créer et de renvoyer l arbre d entiers suivant : b) Ecrire une fonction int feuilles(arbin a) qui

Plus en détail

gcc -Wall ansi o tp fichiers -lfl

gcc -Wall ansi o tp fichiers -lfl FLEX et BISON tp.l tp_l.c : - abréviations - expressions régulières et actions associées. tp.h : - définition de types - définition d étiquettes tp_y.h : codes symboliques pour les tokens FLEX Générateur

Plus en détail

Analyse lexicale 2014-2015

Analyse lexicale 2014-2015 Analyse (lexicale, syntaxique) L3 MIAGE Analyse lexicale Université de Lille, France 2014-2015 1 Rappels Rôle de l analyse lexicale Outils 2 Mise en oeuvre Lexème Vers l analyseur syntaxique Codage d un

Plus en détail

Un automate à états fini

Un automate à états fini Automates à états et langages Notion d automate Langage reconnu par un automate Automates non déterministes Expressions régulières et automates Limites des automates Notion d automate Objectif : définir

Plus en détail

Algorithmique. Évaluation d expressions. Luc Brun. luc.brun@greyc.ensicaen.fr. Évaluation d expressions p.1/38

Algorithmique. Évaluation d expressions. Luc Brun. luc.brun@greyc.ensicaen.fr. Évaluation d expressions p.1/38 Algorithmique Évaluation d expressions Luc Brun luc.brun@greyc.ensicaen.fr Évaluation d expressions p.1/38 Plan Les différents types d expressions Expression complètement parenthésée (ECP), Expression

Plus en détail

Programmation en Python - Cours 2 : Premiers programmes

Programmation en Python - Cours 2 : Premiers programmes Programmation en Python - Cours 2 : Premiers programmes 2013/2014 Diverses utilisations de python Utilisation en mode interactif Ecriture d un programme python Saisie de données par l utilisateur : input(),

Plus en détail

Calculabilité Cours 2 : Machines de Turing

Calculabilité Cours 2 : Machines de Turing Calculabilité Cours 2 : Machines de Turing Introduction Un autre type de modèle de calcul Les fonctions récursives et les fonctions λ représentables définissent des modèles de calculs dans k N Nk N Nous

Plus en détail

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits Architecture des ordinateurs TD1 - Portes logiques et premiers circuits 1 Rappel : un peu de logique Exercice 1.1 Remplir la table de vérité suivante : a b a + b ab a + b ab a b 0 0 0 1 1 0 1 1 Exercice

Plus en détail

ALGORITHMIQUE II. Récurrence et Récursivité. SMI AlgoII

ALGORITHMIQUE II. Récurrence et Récursivité. SMI AlgoII ALGORITHMIQUE II Récurrence et Récursivité Récurrence Suite récurrente: la déition d une suite est la donnée d un terme général déi en fonction du (ou des) terme(s) précédant(s) D un terme initial qui

Plus en détail

Grammaires formelles, Automates

Grammaires formelles, Automates 1/39 Grammaires formelles, Automates Pierre Zweigenbaum LIMSI, CNRS pz@limsi.fr http://www.limsi.fr/~pz/ 2/39 1 Syntaxe : grammaire, analyse 2 Grammaires formelles Langage et grammaire Grammaires régulières

Plus en détail

et Automates de Büchi

et Automates de Büchi Cours 9: Propriétes ω-régulières et Automates de Büchi Francesco Belardinelli Laboratoire IBISC Remerciements à Alessio Lomuscio et Joost-Pieter Katoen 26 mars 2015 Cours 9 - Vue d Ensemble Motivation

Plus en détail

Sortie : OUI si n est premier, NON sinon. On peut voir Premier aussi comme une fonction, en remplaçant OUI par 1 et NON par 0.

Sortie : OUI si n est premier, NON sinon. On peut voir Premier aussi comme une fonction, en remplaçant OUI par 1 et NON par 0. Université Bordeaux 1. Master Sciences & Technologies, Informatique. Examen UE IN7W11, Modèles de calcul. Responsable A. Muscholl Session 1, 2011 2012. 12 décembre 2011, 14h-17h. Documents autorisés :

Plus en détail

Licence de Sciences et Technologies. Fiche de cours 1 - Nombres réels.

Licence de Sciences et Technologies. Fiche de cours 1 - Nombres réels. Licence de Sciences et Technologies EM21 - Analyse Fiche de cours 1 - Nombres réels. On connaît les ensembles suivants, tous munis d une addition, d une multiplication, et d une relation d ordre compatibles

Plus en détail

Programmation avancée

Programmation avancée Programmation avancée Chapitre 1 : Complexité et les ABR (arbres binaires de recherche) 1 1 IFSIC Université de Rennes-1 M2Crypto, octobre 2011 Plan du cours 1 2 3 4 5 6 7 8 9 10 Algorithmes Définition

Plus en détail

5. Equivalences d automates

5. Equivalences d automates 5. Equivalences d automates 5.1. Le problème du déterminisme 5.2. Différentes sortes d AEF 5.3. Déterminisation d un AEF 5.4. Déterminisation d un AEF avec ɛ-transitions 5.5. Minimisation d un AEF déterministe

Plus en détail

Théorie des langages. compilation. Elise Bonzon http://web.mi.parisdescartes.fr/ bonzon/ elise.bonzon@parisdescartes.fr 1 / 59

Théorie des langages. compilation. Elise Bonzon http://web.mi.parisdescartes.fr/ bonzon/ elise.bonzon@parisdescartes.fr 1 / 59 et compilation Elise Bonzon http://web.mi.parisdescartes.fr/ bonzon/ elise.bonzon@parisdescartes.fr 1 / 59 et compilation et compilation Structure d un compilateur Analyse lexicale Analyse syntaxique Analyse

Plus en détail

Machine de Turing. Informatique II Algorithmique 1

Machine de Turing. Informatique II Algorithmique 1 Machine de Turing Nous avons vu qu un programme peut être considéré comme la décomposition de la tâche à réaliser en une séquence d instructions élémentaires (manipulant des données élémentaires) compréhensibles

Plus en détail

Chapitre 1. Programmation en Python 2ème année. 23 septembre 2014. E-mail mlahby@gmail.com

Chapitre 1. Programmation en Python 2ème année. 23 septembre 2014. E-mail mlahby@gmail.com Chapitre 1 La récursivité Programmation en Python 2ème année E-mail mlahby@gmailcom 23 septembre 2014 Programmation en Python 2ème année CPGE GSR 2014-2015 1/ 24 Plan 1 Rappel 2 Récurrence en mathématique

Plus en détail

Logique informatique 2013-2014. Examen

Logique informatique 2013-2014. Examen Logique informatique 2013-2014. Examen 30 mai 2013. Durée 3h. Tous les documents sont autorisés. Seuls les résultats du cours peuvent être utilisés sans démonstration. Le barême et la longueur des solutions

Plus en détail

Détection de la terminaison distribuée

Détection de la terminaison distribuée Cours Algorithmique répartie Master 2 Université Paris-Diderot Devoir 1 (à rendre avant le 22 février 2010) Détection de la terminaison distribuée Généralités Π = {p 0,..., p n 1 } est l ensemble des processus.

Plus en détail

Machines de Turing. Chapitre 14 14.1. DÉFINITION ET FONCTIONNEMENT

Machines de Turing. Chapitre 14 14.1. DÉFINITION ET FONCTIONNEMENT Chapitre 4 Machines de Turing Dans ce chapitre on présente un modèle de calcul introduit dans les années 3 par Turing, les machines de Turing. Ces machines formalisent la notion de calculabilité. La thèse

Plus en détail

Qu'est-ce qu'un compilateur? Bibliographie. Compilateur = vérificateur et traducteur. Compilateur. Texte. Compilateur. Texte traduit.

Qu'est-ce qu'un compilateur? Bibliographie. Compilateur = vérificateur et traducteur. Compilateur. Texte. Compilateur. Texte traduit. Analyse syntaxique & PP3 Modalités Année 2011 12 Université Bordeaux 1 Licence 3ème année 10 cours 4 TD 2 x 12 TD sur machine Session 1 1 DS 1h30 + 1 projet. Note session 1 : (DS+projet)/2 Session 2 Examen

Plus en détail

Langage C/C++ TD 3-4 : Création dynamique d objets. Hubert Godfroy. 27 novembre 2014

Langage C/C++ TD 3-4 : Création dynamique d objets. Hubert Godfroy. 27 novembre 2014 Langage C/C++ TD 3-4 : Création dynamique d objets Hubert Godfroy 7 novembre 014 1 Tableaux Question 1 : Écrire une fonction prenant un paramètre n et créant un tableau de taille n (contenant des entiers).

Plus en détail

Représentation des Nombres

Représentation des Nombres Chapitre 5 Représentation des Nombres 5. Representation des entiers 5.. Principe des représentations en base b Base L entier écrit 344 correspond a 3 mille + 4 cent + dix + 4. Plus généralement a n a n...

Plus en détail

Plan. Piqûre de rappel sur les références Evaluation d'expressions arithmétiques Variables et méthodes statiques Vocabulaire sur les arbres.

Plan. Piqûre de rappel sur les références Evaluation d'expressions arithmétiques Variables et méthodes statiques Vocabulaire sur les arbres. Plan Piqûre de rappel sur les références Evaluation d'expressions arithmétiques Variables et méthodes statiques Vocabulaire sur les arbres Amphi 4 1 Retour sur les références class Code { int numero; Code(int

Plus en détail

Cours 3. La conditionnelle: instructions si et selon Les boucles Comment raisonner sur les boucles: les invariants de boucle

Cours 3. La conditionnelle: instructions si et selon Les boucles Comment raisonner sur les boucles: les invariants de boucle Cours 3 : Instructions qui changent l ordre d exécution séquentiel 1 Cours 3 Instructions qui changent l ordre d exécution séquentiel La conditionnelle: instructions si et selon Les boucles Comment raisonner

Plus en détail

Programmation objet en Java.

Programmation objet en Java. Programmation objet en Java. Didier Rémy 2001-2002 http://cristal.inria.fr/ remy/mot/7/ http://www.enseignement.polytechnique.fr/profs/informatique/didier.remy/mot/7/ Cours Exercices Slide 1 1. Classes,

Plus en détail

Polytechnique. Épreuve d Informatique 1998

Polytechnique. Épreuve d Informatique 1998 Polytechnique Épreuve d Informatique 1998 Corrigé rédigé par Martine Lannaud, Lycée Chaptal, Paris Pour toute remarque ou correction martine.lannaud@prepas.org Motifs et automates Question 1. Quelques

Plus en détail

Algorithmique et Analyse d Algorithmes

Algorithmique et Analyse d Algorithmes Algorithmique et Analyse d Algorithmes L3 Info Cours 5 : Structures de données linéaires Benjamin Wack 2015-2016 1 / 37 La dernière fois Logique de Hoare Dichotomie Aujourd hui Type Abstrait de Données

Plus en détail

Vidéo partie 1. Logique Vidéo partie 2. Raisonnements Exercices Logique, ensembles, raisonnements

Vidéo partie 1. Logique Vidéo partie 2. Raisonnements Exercices Logique, ensembles, raisonnements Exo7 Logique et raisonnements Vidéo partie 1. Logique Vidéo partie 2. Raisonnements Exercices Logique, ensembles, raisonnements Quelques motivations Il est important d avoir un langage rigoureux. La langue

Plus en détail

Trier des tableaux en C++ : efficacité du std::sort (STL) et tris paramétrés

Trier des tableaux en C++ : efficacité du std::sort (STL) et tris paramétrés Trier des tableaux en C++ : efficacité du std::sort (STL) et tris paramétrés Hélène Toussaint, juillet 2014 Sommaire 1. Efficacité du std::sort... 1 1.1. Conditions expérimentales... 1 1.2. Tableaux de

Plus en détail

INF601 : Algorithme et Structure de données

INF601 : Algorithme et Structure de données Cours 2 : TDA Liste B. Jacob IC2/LIUM 15 février 2010 Plan 1 Définition du TDA Liste 2 Réalisation du TDA Liste 3 Type de stockage des éléments 4 Recherche d un élément Dans une liste non triée Dans une

Plus en détail

λ-calcul et typage Qu est-ce qu une fonction?

λ-calcul et typage Qu est-ce qu une fonction? λ-calcul et typage Nicolas Barnier, Pascal Brisset ENAC Avril 2009 Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 1 / 1 Qu est-ce qu une fonction? Classiquement Pas de notation uniforme/standard

Plus en détail

Leçon 1: les entiers

Leçon 1: les entiers Leçon 1: les entiers L ensemble N des entiers naturels Compter, dresser des listes, classer et comparer des objets interviennent dans de multiples activités humaines. Les nombres entiers naturels sont

Plus en détail

Formulaire Automates Sylvain Lombardy

Formulaire Automates Sylvain Lombardy Formulaire Automates Sylvain Lombardy Définition 1 Alphabet, mot, langage Un alphabet est un ensemble fini de symboles; chacun de ces symboles est appelé lettre. Un mot est une suite fini de lettres pris

Plus en détail

Chapitre 1 I:\ Soyez courageux!

Chapitre 1 I:\ Soyez courageux! Chapitre 1 I:\ Soyez courageux! Pour ne rien vous cacher, le langage d'assembleur (souvent désigné sous le terme "Assembleur", bien que ce soit un abus de langage, puisque "Assembleur" désigne le logiciel

Plus en détail

Compilation. II. Analyse lexicale

Compilation. II. Analyse lexicale Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 1/31 Compilation II. Analyse lexicale Jacques Farré Jacques.Farre@unice.fr http://deptinfo.unice.fr/~jf/compil-l3/ Université de Nice

Plus en détail

Chapitre 6. Modélisation en P.L.I. 6.1 Lien entre PL et PLI. 6.1.1 Approximation de la PLI

Chapitre 6. Modélisation en P.L.I. 6.1 Lien entre PL et PLI. 6.1.1 Approximation de la PLI Chapitre 6 Modélisation en P.L.I. 6.1 Lien entre PL et PLI (P) problème de PL. On restreint les variables à être entières : on a un problème de PLI (ILP en anglais). On restreint certaines variables à

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

le triangle de Pascal - le binôme de Newton

le triangle de Pascal - le binôme de Newton 1 / 51 le triangle de Pascal - le binôme de Newton une introduction J-P SPRIET 2015 2 / 51 Plan Voici un exposé présentant le triangle de Pascal et une application au binôme de Newton. 1 2 3 / 51 Plan

Plus en détail

Cours d Analyse, Algorithmique Elements de programmation

Cours d Analyse, Algorithmique Elements de programmation 1 de 33 Cours d Analyse, Algorithmique Elements de programmation Florent Hivert Mél : Florent.Hivert@lri.fr Adresse universelle : http://www.lri.fr/ hivert 2 de 33 Données et instructions Un programme

Plus en détail

1 Valeur d une expression

1 Valeur d une expression PCSI Informatique: Cours2 1 VALEUR D UNE EXPRESSION Expressions et variables en informatique 1 Valeur d une expression Expression : suite de caractères qui a un sens pour la machine Valeur d une expression

Plus en détail

Représentation d un entier en base b

Représentation d un entier en base b Représentation d un entier en base b 13 octobre 2012 1 Prérequis Les bases de la programmation en langage sont supposées avoir été travaillées L écriture en base b d un entier est ainsi défini à partir

Plus en détail

Algorithmique. Mode d application

Algorithmique. Mode d application I - Généralités Algorithmique T ale S Définition: Un algorithme est une suite finie d instructions permettant la résolution systématique d un problème donné. Un algorithme peut-être utilisé pour décrire

Plus en détail

Mathématiques pour l informatique 1 notes de cours sur la seconde partie

Mathématiques pour l informatique 1 notes de cours sur la seconde partie Mathématiques pour l informatique notes de cours sur la seconde partie L Université Paris-Est, Marne-la-Vallée Cyril Nicaud Organisation Ce demi-cours est composé de 6 séances de cours et 6 séances de

Plus en détail

Analyse statique de programmes Typage et analyse statique au sein de Java

Analyse statique de programmes Typage et analyse statique au sein de Java Analyse statique de programmes Typage et analyse statique au sein de Java Master Professionnel Informatique spécialité FSIL/FSI Jean-Marc Talbot jean-marc.talbot@lif.univ-mrs.fr Aix-Marseille Université

Plus en détail

Arbres binaires. Illustration avec des arbres binaires de décision Généricité bornée Synthèse sur les assertions et les exceptions

Arbres binaires. Illustration avec des arbres binaires de décision Généricité bornée Synthèse sur les assertions et les exceptions Arbres binaires Illustration avec des arbres binaires de décision Généricité bornée Synthèse sur les assertions et les exceptions FMIN220 Structures de données Université de Montpellier 2015 FMIN220 (UM)

Plus en détail

CHAPITRE 4 : BASES DE LEX

CHAPITRE 4 : BASES DE LEX CHAPITRE 4 : BASES DE LEX Analyse lexicale (rappel) L analyse lexicale consiste à déterminer le, «statut» de chaque mot, c est-à-dire l unité lexicale (ou token) qui lui correspond. Les unités lexicales

Plus en détail

Architecture des ordinateurs TP 3

Architecture des ordinateurs TP 3 Architecture des ordinateurs ESIPE - IR1 TP 3 Objectif de cette séance L objectif de cette séance est d apprendre à utiliser la pile et à écrire des fonctions en assembleur En particulier, nous verrons

Plus en détail

Java & Algorithme Corrigé du test final

Java & Algorithme Corrigé du test final Java & Algorithme Corrigé du test final 1 QUESTIONS EN JAVA Chaque question est sur un point, sauf certaines sur deux points. En tout, le QCM est noté sur 24 : la note est divisée par 6 pour revenir entre

Plus en détail

Automate Fini Non-déterministe

Automate Fini Non-déterministe Automate Fini Non-déterministe Théorème de Kleene Systèmes Formels Master 1 ISIDIS Sébastien Verel verel@lisic.univ-littoral.fr http://www-lisic.univ-littoral.fr/~verel Université du Littoral Côte d Opale

Plus en détail

Chapitre 2 : Représentation des nombres en machine

Chapitre 2 : Représentation des nombres en machine Chapitre 2 : Représentation des nombres en machine Introduction La mémoire des ordinateurs est constituée d une multitude de petits circuits électroniques qui ne peuvent être que dans deux états : sous

Plus en détail

Points fixes de fonctions à domaine fini

Points fixes de fonctions à domaine fini ÉCOLE POLYTECHNIQUE ÉCOLE NORMALE SUPÉRIEURE DE CACHAN ÉCOLE SUPÉRIEURE DE PHYSIQUE ET DE CHIMIE INDUSTRIELLES CONCOURS D ADMISSION 2013 FILIÈRE MP HORS SPÉCIALITÉ INFO FILIÈRE PC COMPOSITION D INFORMATIQUE

Plus en détail

TD 2 - Modèles de calcul

TD 2 - Modèles de calcul TD 2 - Modèles de calcul Remarques préliminaires Si ou désigne une relation binaire (de dérivation/transition suivant le contexte), on notera ou sa clôture transitive, comprendre la relation obenue en

Plus en détail

Listes et arbres binaires

Listes et arbres binaires Des structures de données dynamiques Listes, Listes ordonnées Arbres binaires, arbre binaires de recherche Listes chaînées Utile si le nombre d éléments n est pas connu à l avance et évolue beaucoup. Permet

Plus en détail

Utilisation du logiciel OpMat Ce logiciel effectue des opérations élémentaires sur les lignes d une matrice avec des entrées rationnelles

Utilisation du logiciel OpMat Ce logiciel effectue des opérations élémentaires sur les lignes d une matrice avec des entrées rationnelles Utilisation du logiciel OpMat Ce logiciel effectue des opérations élémentaires sur les lignes d une matrice avec des entrées rationnelles Michel Bouchard, enseignant retraité, Département de mathématiques,

Plus en détail

BAZIN Danil et PRIEZ Jean-Baptiste. LEX & YACC : Calculatrice Évoluée

BAZIN Danil et PRIEZ Jean-Baptiste. LEX & YACC : Calculatrice Évoluée BAZIN Danil et PRIEZ Jean-Baptiste LEX & YACC : Calculatrice Évoluée Table des matières 1 Introduction 3 2 Description 4 3 La grammaire utilisée 6 4 Lexèmes et FLEX 8 5 Analyse syntaxique et YACC 8 5.1

Plus en détail

CH.3 LA TRADUCTION. Grammaire attribuée d une calculette. Traduction ch3 1. Traduction ch3 2

CH.3 LA TRADUCTION. Grammaire attribuée d une calculette. Traduction ch3 1. Traduction ch3 2 CH.3 LA TRADUCTION 3.1 Les grammaires attribuées 3.2 Les définitions S-attribuées 3.3 Les définitions L-attribuées 3.4 La traduction descendante 3.5 L évaluation ascendante des attributs hérités 3.6 L

Plus en détail

Introduction au Java Development Kit Et quelques instructions en Java. 1 Création des répertoires d accueil des programmes Java

Introduction au Java Development Kit Et quelques instructions en Java. 1 Création des répertoires d accueil des programmes Java HLIN406 - Janvier 2015 Le Java Development Kit offre un ensemble d outils de développement d applications Java. Pour utiliser ces outils, JDK ne propose pas d interface utilisateur, on doit donc écrire

Plus en détail

Exemple. Il ne faudra pas confondre (101) 2 et (101) 10 Si a 0,a 1, a 2,, a n sont n+1 chiffres de 0 à 1, le

Exemple. Il ne faudra pas confondre (101) 2 et (101) 10 Si a 0,a 1, a 2,, a n sont n+1 chiffres de 0 à 1, le Chapitre I - arithmé La base décimale Quand on représente un nombre entier, positif, on utilise généralement la base 10. Cela signifie que, de la droite vers la gauche, chaque nombre indiqué compte 10

Plus en détail

Méthodes de test. Mihaela Sighireanu

Méthodes de test. Mihaela Sighireanu UFR d Informatique Paris 7, LIAFA, 175 rue Chevaleret, Bureau 6A7 http://www.liafa.jussieu.fr/ sighirea/cours/methtest/ Partie I 1 Propriétés 2 Un peu de génie logiciel de test 3 Eléments Problèmes Point

Plus en détail

Analyse ascendante Licence Miage S5 TD AS

Analyse ascendante Licence Miage S5 TD AS Analyse ascendante Licence Miage S5 TD AS 2010-2011 feuille n 1 FIL Exercice 1 : On considère la grammaire algébrique G = (X, V, A,R) avec X ={a, b, V = {A, S et R = {A asb aa ; S aas aa. Donner un automate

Plus en détail

Introduction aux automates

Introduction aux automates Introduction aux automates Principes et exemples Pascal André IRIN Université de Nantes 2 rue de la Houssinière ; B.P. 92208 44322 Nantes Cedex 03 Pascal.Andre@irin.univ-nantes.fr Introduction aux automates

Plus en détail

Le mot «algorithme» vient du nom de l auteur persan Al-Khuwarizmi (né vers 780 - mort vers 850) Une définition: «un algorithme est une suite finie de

Le mot «algorithme» vient du nom de l auteur persan Al-Khuwarizmi (né vers 780 - mort vers 850) Une définition: «un algorithme est une suite finie de Le mot «algorithme» vient du nom de l auteur persan Al-Khuwarizmi (né vers 780 - mort vers 850) Une définition: «un algorithme est une suite finie de règles à appliquer dans un ordre déterminé à un nombre

Plus en détail

Procédures et fonctions

Procédures et fonctions Chapitre 5 Procédures et fonctions 5.1 Introduction Considérons le programme suivant, dont le but est d inverser les éléments d un tableau : public class InversionTableau1 { int t[]= {8, 2, 1, 23; Terminal.ecrireStringln("Tableau

Plus en détail

La récursivité terminale. Méthode récursive calculant la factorielle d'un nombre

La récursivité terminale. Méthode récursive calculant la factorielle d'un nombre La récursivité terminale Qu'est-ce que la récursivité? En informatique, une fonction («méthode» en Java) ou plus généralement un algorithme qui contient un appel à elle-même est dite récursive. Cependant,

Plus en détail

Analyse lexicale Analyse syntaxique Évaluation

Analyse lexicale Analyse syntaxique Évaluation Analyse lexicale Analyse syntaxique Évaluation Génération de code - Cours 1 {Remi.Forax, Matthieu.Constant, Michel.Chilowicz}@univ-mlv.fr Tatoo nain d'argentine ( Cliff1066, CC-By) Génération de code Objectifs

Plus en détail

Plan du cours. Syntaxe abstraite. Actions sémantiques Exemple : Analyseur d expressions arithmétiques Arbres de syntaxe.

Plan du cours. Syntaxe abstraite. Actions sémantiques Exemple : Analyseur d expressions arithmétiques Arbres de syntaxe. Plan du cours Syntaxe abstraite Martin Odersky 21 et 22 novembre 2005 version 1.0 1 2 3 Syntaxe abstraite Martin Odersky 1 de 31 Syntaxe abstraite Martin Odersky 2 de 31 Un analyseur syntaxique fait généralement

Plus en détail

Structures de données, IMA S6

Structures de données, IMA S6 Structures de données, IMA S6 Arbres Binaires d après un cours de N. Devésa, Polytech Lille. Laure Gonnord http://laure.gonnord.org/pro/teaching/ Laure.Gonnord@polytech-lille.fr Université Lille 1 - Polytech

Plus en détail

L enseignement de l algorithmique au Lycée

L enseignement de l algorithmique au Lycée L enseignement de l algorithmique au Lycée Sisteron 12 novembre 2009 Fernand Didier didier@irem.univ-mrs.fr Approche naïve C est une méthode, une façon systématique de procéder, pour faire quelque chose

Plus en détail

Partie I : Automates et langages

Partie I : Automates et langages 2 Les calculatrices sont interdites. N.B. : Le candidat attachera la plus grande importance à la clarté, à la précision et à la concision de la rédaction. Si un candidat est amené à repérer ce qui peut

Plus en détail