Analyse descendante LL(k)

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

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

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

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

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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

Les structures de données. Rajae El Ouazzani

Les structures de données. Rajae El Ouazzani Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l

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

Génie Logiciel avec Ada. 4 février 2013

Génie Logiciel avec Ada. 4 février 2013 Génie Logiciel 4 février 2013 Plan I. Généralités II. Structures linéaires III. Exceptions IV. Structures arborescentes V. Dictionnaires I. Principes II. Notions propres à la POO I. Principes Chapitre

Plus en détail

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application Université de Provence Licence Math-Info Première Année V. Phan Luong Algorithmique et Programmation en Python Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application 1 Ordinateur Un

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental

Plus en détail

STAGE IREM 0- Premiers pas en Python

STAGE IREM 0- Premiers pas en Python Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer

Plus en détail

Arbres binaires de recherche

Arbres binaires de recherche 1 arbre des comparaisons 2 recherche dichotomique l'arbre est recalculé à chaque recherche 2 5 3 4 7 9 1 6 1 2 3 4 5 6 7 9 10 conserver la structure d'arbre au lieu de la reconstruire arbre binaire de

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte Projet d informatique M1BI : Compression et décompression de texte Le but de ce projet est de coder un programme réalisant de la compression et décompression de texte. On se proposera de coder deux algorithmes

Plus en détail

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Exercices - Polynômes : corrigé. Opérations sur les polynômes Opérations sur les polynômes Exercice 1 - Carré - L1/Math Sup - Si P = Q est le carré d un polynôme, alors Q est nécessairement de degré, et son coefficient dominant est égal à 1. On peut donc écrire Q(X)

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Les algorithmes de base du graphisme

Les algorithmes de base du graphisme Les algorithmes de base du graphisme Table des matières 1 Traçage 2 1.1 Segments de droites......................... 2 1.1.1 Algorithmes simples.................... 3 1.1.2 Algorithmes de Bresenham (1965).............

Plus en détail

Résolution de systèmes linéaires par des méthodes directes

Résolution de systèmes linéaires par des méthodes directes Résolution de systèmes linéaires par des méthodes directes J. Erhel Janvier 2014 1 Inverse d une matrice carrée et systèmes linéaires Ce paragraphe a pour objet les matrices carrées et les systèmes linéaires.

Plus en détail

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour LMI 2 Programmation Orientée Objet POO - Cours 9 Said Jabbour jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour CRIL UMR CNRS 8188 Faculté des Sciences - Univ. Artois Février 2011 Les collections

Plus en détail

V- Manipulations de nombres en binaire

V- Manipulations de nombres en binaire 1 V- Manipulations de nombres en binaire L ordinateur est constitué de milliards de transistors qui travaillent comme des interrupteurs électriques, soit ouverts soit fermés. Soit la ligne est activée,

Plus en détail

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://www.fsr.ac.ma/ano/

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://www.fsr.ac.ma/ano/ Recherche opérationnelle Les démonstrations et les exemples seront traités en cours Souad EL Bernoussi Groupe d Analyse Numérique et Optimisation Rabat http ://www.fsr.ac.ma/ano/ Table des matières 1 Programmation

Plus en détail

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot Chapitre 5 Arithmétique binaire L es codes sont manipulés au quotidien sans qu on s en rende compte, et leur compréhension est quasi instinctive. Le seul fait de lire fait appel au codage alphabétique,

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Informatique Théorique : Théorie des Langages, Analyse Lexicale, Analyse Syntaxique Jean-Pierre Jouannaud Professeur

Informatique Théorique : Théorie des Langages, Analyse Lexicale, Analyse Syntaxique Jean-Pierre Jouannaud Professeur Université Paris-Sud Licence d Informatique Informatique Théorique : Théorie des Langages, Analyse Lexicale, Analyse Syntaxique Jean-Pierre Jouannaud Professeur Adresse de l auteur : LIX École Polytechnique

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

Tp 1 correction. Structures de données (IF2)

Tp 1 correction. Structures de données (IF2) Tp 1 correction Structures de données (IF2) Remarque générale : compilez et exécutez le code au-fur-et-à mesure de son écriture. Il est plus facile de corriger une petite portion de code délimitée que

Plus en détail

Algorithme. Table des matières

Algorithme. Table des matières 1 Algorithme Table des matières 1 Codage 2 1.1 Système binaire.............................. 2 1.2 La numérotation de position en base décimale............ 2 1.3 La numérotation de position en base binaire..............

Plus en détail

Rappels sur les suites - Algorithme

Rappels sur les suites - Algorithme DERNIÈRE IMPRESSION LE 14 septembre 2015 à 12:36 Rappels sur les suites - Algorithme Table des matières 1 Suite : généralités 2 1.1 Déition................................. 2 1.2 Exemples de suites............................

Plus en détail

1 Lecture de fichiers

1 Lecture de fichiers Programmation 1 Cours n 6 GB3, 2 nd semestre 2014-2015 Cours de Python Gilles Bernot 1 Lecture de fichiers Un fichier est une suite de caractères mémorisés sur le disque dur de la machine dans un endroit

Plus en détail

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que Introduction. On suppose connus les ensembles N (des entiers naturels), Z des entiers relatifs et Q (des nombres rationnels). On s est rendu compte, depuis l antiquité, que l on ne peut pas tout mesurer

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN Les contenues de ce document sont la propriété exclusive de la société REVER. Ils ne sont transmis qu à titre d information et ne peuvent en aucun cas

Plus en détail

Programmation linéaire

Programmation linéaire 1 Programmation linéaire 1. Le problème, un exemple. 2. Le cas b = 0 3. Théorème de dualité 4. L algorithme du simplexe 5. Problèmes équivalents 6. Complexité de l Algorithme 2 Position du problème Soit

Plus en détail

Limites finies en un point

Limites finies en un point 8 Limites finies en un point Pour ce chapitre, sauf précision contraire, I désigne une partie non vide de R et f une fonction définie sur I et à valeurs réelles ou complees. Là encore, les fonctions usuelles,

Plus en détail

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12 Probabilités. I - Rappel : trois exemples. Exemple 1 : Dans une classe de 25 élèves, il y a 16 filles. Tous les élèves sont blonds ou bruns. Parmi les filles, 6 sont blondes. Parmi les garçons, 3 sont

Plus en détail

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... Université Paris 7 Programmation Objet Licence Bio Informatique Année 2004-2005 TD n 1 - Correction Premiers pas Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... 1. Enregistrez

Plus en détail

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Plus en détail

Initiation à l algorithmique

Initiation à l algorithmique Informatique S1 Initiation à l algorithmique procédures et fonctions 2. Appel d une fonction Jacques TISSEAU Ecole Nationale d Ingénieurs de Brest Technopôle Brest-Iroise CS 73862-29238 Brest cedex 3 -

Plus en détail

OCL - Object Constraint Language

OCL - Object Constraint Language OCL - Object Constraint Language Laëtitia Matignon laetitia.matignon@univ-lyon1.fr Département Informatique - Polytech Lyon Université Claude Bernard Lyon 1 2012-2013 Laëtitia Matignon SIMA - OCL - Object

Plus en détail

TP 2 Réseaux. Adresses IP, routage et sous-réseaux

TP 2 Réseaux. Adresses IP, routage et sous-réseaux TP 2 Réseaux Adresses IP, routage et sous-réseaux C. Pain-Barre INFO - IUT Aix-en-Provence version du 24/2/2 Adressage IP. Limites du nombre d adresses IP.. Adresses de réseaux valides Les adresses IP

Plus en détail

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test Grandes lignes Analyseur Statique de logiciels Temps RÉel Embarqués École Polytechnique École Normale Supérieure Mercredi 18 juillet 2005 1 Présentation d 2 Cadre théorique de l interprétation abstraite

Plus en détail

Licence Sciences et Technologies Examen janvier 2010

Licence Sciences et Technologies Examen janvier 2010 Université de Provence Introduction à l Informatique Licence Sciences et Technologies Examen janvier 2010 Année 2009-10 Aucun document n est autorisé Les exercices peuvent être traités dans le désordre.

Plus en détail

Objets et Programmation. origine des langages orientés-objet

Objets et Programmation. origine des langages orientés-objet Objets et Programmation origine des langages orientés-objet modularité, encapsulation objets, classes, messages exemples en Java héritage, liaison dynamique G. Falquet, Th. Estier CUI Université de Genève

Plus en détail

Algorithmes récursifs

Algorithmes récursifs Licence 1 MASS - Algorithmique et Calcul Formel S. Verel, M.-E. Voge www.i3s.unice.fr/ verel 23 mars 2007 Objectifs de la séance 3 écrire des algorithmes récursifs avec un seul test rechercher un élément

Plus en détail

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml OCL Object Constraint Language Le langage de contraintes d'uml Plan 1. Introduction 2. Les principaux concepts d'ocl Object Constraint Language 1 Object Constraint Language 2 Exemple: une application bancaire

Plus en détail

DOCM 2013 http://docm.math.ca/ Solutions officielles. 1 2 10 + 1 2 9 + 1 2 8 = n 2 10.

DOCM 2013 http://docm.math.ca/ Solutions officielles. 1 2 10 + 1 2 9 + 1 2 8 = n 2 10. A1 Trouvez l entier positif n qui satisfait l équation suivante: Solution 1 2 10 + 1 2 9 + 1 2 8 = n 2 10. En additionnant les termes du côté gauche de l équation en les mettant sur le même dénominateur

Plus en détail

TD3: tableaux avancées, première classe et chaînes

TD3: tableaux avancées, première classe et chaînes TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première

Plus en détail

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Machines virtuelles fonctionnelles (suite) Compilation ML Java Machines virtuelles fonctionnelles (suite) Compilation ML Java Cours de Compilation Avancée (MI190) Benjamin Canou Université Pierre et Maire Curie Année 2011/2012 Semaine 3 Machines virtuelles fonctionnelles

Plus en détail

Cours de Master Recherche

Cours de Master Recherche Cours de Master Recherche Spécialité CODE : Résolution de problèmes combinatoires Christine Solnon LIRIS, UMR 5205 CNRS / Université Lyon 1 2007 Rappel du plan du cours 16 heures de cours 1 - Introduction

Plus en détail

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes PLAN CYCLE DE VIE D'UN LOGICIEL EXPRESSION DES BESOINS SPÉCIFICATIONS DU LOGICIEL CONCEPTION DU LOGICIEL LA PROGRAMMATION TESTS ET MISE AU POINT DOCUMENTATION CONCLUSION C.Crochepeyre Génie Logiciel Diapason

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

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

Plus en détail

Définitions. Numéro à préciser. (Durée : )

Définitions. Numéro à préciser. (Durée : ) Numéro à préciser (Durée : ) On étudie dans ce problème l ordre lexicographique pour les mots sur un alphabet fini et plusieurs constructions des cycles de De Bruijn. Les trois parties sont largement indépendantes.

Plus en détail

Encryptions, compression et partitionnement des données

Encryptions, compression et partitionnement des données Encryptions, compression et partitionnement des données Version 1.0 Grégory CASANOVA 2 Compression, encryption et partitionnement des données Sommaire 1 Introduction... 3 2 Encryption transparente des

Plus en détail

Fondements de l informatique Logique, modèles, et calculs

Fondements de l informatique Logique, modèles, et calculs Fondements de l informatique Logique, modèles, et calculs Cours INF423 de l Ecole Polytechnique Olivier Bournez Version du 20 septembre 2013 2 Table des matières 1 Introduction 9 1.1 Concepts mathématiques........................

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

Évaluation et implémentation des langages

Évaluation et implémentation des langages Évaluation et implémentation des langages Les langages de programmation et le processus de programmation Critères de conception et d évaluation des langages de programmation Les fondations de l implémentation

Plus en détail

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation : Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Corrigé des TD 1 à 5

Corrigé des TD 1 à 5 Corrigé des TD 1 à 5 1 Premier Contact 1.1 Somme des n premiers entiers 1 (* Somme des n premiers entiers *) 2 program somme_entiers; n, i, somme: integer; 8 (* saisie du nombre n *) write( Saisissez un

Plus en détail

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40 Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne gauthier.picard@emse.fr

Plus en détail

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes. 1 Définitions, notations Calcul matriciel Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes. On utilise aussi la notation m n pour le

Plus en détail

Corrigé des exercices sur les références

Corrigé des exercices sur les références Corrigé des exercices sur les références Exercice 3.1.1 dessin Pour cet exercice, vous allez dessiner des structures de données au moyen de petits schémas analogues à ceux du cours, comportant la pile

Plus en détail

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement des objets d'une classe Utilisation d'une classe Droit

Plus en détail

Chapitre 2 Le problème de l unicité des solutions

Chapitre 2 Le problème de l unicité des solutions Université Joseph Fourier UE MAT 127 Mathématiques année 2011-2012 Chapitre 2 Le problème de l unicité des solutions Ce que nous verrons dans ce chapitre : un exemple d équation différentielle y = f(y)

Plus en détail

EXPLOITATIONS PEDAGOGIQUES DU TABLEUR EN STG

EXPLOITATIONS PEDAGOGIQUES DU TABLEUR EN STG Exploitations pédagogiques du tableur en STG Académie de Créteil 2006 1 EXPLOITATIONS PEDAGOGIQUES DU TABLEUR EN STG Commission inter-irem lycées techniques contact : dutarte@club-internet.fr La maquette

Plus en détail

Chapitre VI- La validation de la composition.

Chapitre VI- La validation de la composition. Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions

Plus en détail

CH.6 Propriétés des langages non contextuels

CH.6 Propriétés des langages non contextuels CH.6 Propriétés des langages non contetuels 6.1 Le lemme de pompage 6.2 Les propriétés de fermeture 6.3 Les problèmes de décidabilité 6.4 Les langages non contetuels déterministes utomates ch6 1 6.1 Le

Plus en détail

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau labsticc.univ-brest.fr/pages_perso/babau/ Ingénierie Dirigée par les Modèles Editeurs de modèles (Eclipse Modeling Tools) Jean-Philippe Babau Département Informatique, UFR Sciences, Laboratoire Lab-STICC

Plus en détail

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications A. Optimisation sans contrainte.... Généralités.... Condition nécessaire et condition suffisante

Plus en détail

Langage SQL (1) 4 septembre 2007. IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Langage SQL (1) 4 septembre 2007. IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes Langage SQL (1) Sébastien Limet Denys Duchier IUT Orléans 4 septembre 2007 Notions de base qu est-ce qu une base de données? SGBD différents type de bases de données quelques systèmes existants Définition

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux. UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases

Plus en détail

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT Ces exercices portent sur les items 2, 3 et 5 du programme d informatique des classes préparatoires,

Plus en détail

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2 éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........

Plus en détail

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2. Eo7 Calculs de déterminants Fiche corrigée par Arnaud Bodin Eercice Calculer les déterminants des matrices suivantes : Correction Vidéo ( ) 0 6 7 3 4 5 8 4 5 6 0 3 4 5 5 6 7 0 3 5 4 3 0 3 0 0 3 0 0 0 3

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

Cours de Systèmes d Exploitation

Cours de Systèmes d Exploitation Licence d informatique Synchronisation et Communication inter-processus Hafid Bourzoufi Université de Valenciennes - ISTV Introduction Les processus concurrents s exécutant dans le système d exploitation

Plus en détail

Chapitre 2. Eléments pour comprendre un énoncé

Chapitre 2. Eléments pour comprendre un énoncé Chapitre 2 Eléments pour comprendre un énoncé Ce chapitre est consacré à la compréhension d un énoncé. Pour démontrer un énoncé donné, il faut se reporter au chapitre suivant. Les tables de vérité données

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

Informatique Générale

Informatique Générale Informatique Générale Guillaume Hutzler Laboratoire IBISC (Informatique Biologie Intégrative et Systèmes Complexes) guillaume.hutzler@ibisc.univ-evry.fr Cours Dokeos 625 http://www.ens.univ-evry.fr/modx/dokeos.html

Plus en détail

Initiation à la Programmation en Logique avec SISCtus Prolog

Initiation à la Programmation en Logique avec SISCtus Prolog Initiation à la Programmation en Logique avec SISCtus Prolog Identificateurs Ils sont représentés par une suite de caractères alphanumériques commençant par une lettre minuscule (les lettres accentuées

Plus en détail

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours Exo7 Continuité (étude globale). Diverses fonctions Exercices de Jean-Louis Rouget. Retrouver aussi cette fiche sur www.maths-france.fr * très facile ** facile *** difficulté moyenne **** difficile *****

Plus en détail

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS = 7 10 1 + 5 10 2 + 2 10 3

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS = 7 10 1 + 5 10 2 + 2 10 3 8 Systèmes de numération INTRODUCTION SYSTÈMES DE NUMÉRATION POSITIONNELS Dans un système positionnel, le nombre de symboles est fixe On représente par un symbole chaque chiffre inférieur à la base, incluant

Plus en détail

Structures algébriques

Structures algébriques Structures algébriques 1. Lois de composition s Soit E un ensemble. Une loi de composition interne sur E est une application de E E dans E. Soient E et F deux ensembles. Une loi de composition externe

Plus en détail

Représentation géométrique d un nombre complexe

Représentation géométrique d un nombre complexe CHAPITRE 1 NOMBRES COMPLEXES 1 Représentation géométrique d un nombre complexe 1. Ensemble des nombres complexes Soit i le nombre tel que i = 1 L ensemble des nombres complexes est l ensemble des nombres

Plus en détail

Le langage SQL Rappels

Le langage SQL Rappels Le langage SQL Rappels Description du thème : Présentation des principales notions nécessaires pour réaliser des requêtes SQL Mots-clés : Niveau : Bases de données relationnelles, Open Office, champs,

Plus en détail

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB Ce document, écrit par des animateurs de l IREM de Besançon, a pour objectif de présenter quelques unes des fonctions du logiciel Scilab, celles qui sont spécifiques

Plus en détail

Algorithmique et Programmation Fonctionnelle

Algorithmique et Programmation Fonctionnelle Algorithmique et Programmation Fonctionnelle RICM3 Cours 9 : Lambda-calcul Benjamin Wack Polytech 2014-2015 1 / 35 La dernière fois Typage Polymorphisme Inférence de type 2 / 35 Plan Contexte λ-termes

Plus en détail

III- Raisonnement par récurrence

III- Raisonnement par récurrence III- Raisonnement par récurrence Les raisonnements en mathématiques se font en général par une suite de déductions, du style : si alors, ou mieux encore si c est possible, par une suite d équivalences,

Plus en détail

Logique. Plan du chapitre

Logique. Plan du chapitre Logique Ce chapitre est assez abstrait en première lecture, mais est (avec le chapitre suivant «Ensembles») probablement le plus important de l année car il est à la base de tous les raisonnements usuels

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

Les indices à surplus constant

Les indices à surplus constant Les indices à surplus constant Une tentative de généralisation des indices à utilité constante On cherche ici en s inspirant des indices à utilité constante à définir un indice de prix de référence adapté

Plus en détail

Outils logiciels pour la combinaison de vérification fonctionnelle et d évaluation de performances au sein de CADP

Outils logiciels pour la combinaison de vérification fonctionnelle et d évaluation de performances au sein de CADP Outils logiciels pour la combinaison de vérification fonctionnelle et d évaluation de performances au sein de CADP Christophe Joubert Séminaire VASY 2002 30 Octobre 2002 Aix les Bains Contexte du projet

Plus en détail