Vous êtes sur la page 1sur 149

THEORIE DES LANGAGES

Claude MOULIN Universit e de Technologie de Compi` egne 16 f evrier 2012

NF11

` TABLE DES MATIERES

Table des mati` eres


1 Compilation 1.1 Introduction . . . . . . . . . . . 1.1.1 R ef erences . . . . . . . . 1.1.2 Historique . . . . . . . . 1.1.3 Compilateur . . . . . . . 1.1.4 Interpr eteur . . . . . . . 1.1.5 Langage Interm ediaire . 1.2 Phases de la compilation . . . . 1.3 Analyse du programme source . 1.3.1 Analyse lexicale . . . . . 1.3.2 Analyse syntaxique . . . 1.3.3 Analyse s emantique . . . 1.4 Environnement du compilateur 1.4.1 Pr eprocesseur . . . . . . 1.4.2 Assembleur . . . . . . . 1.4.3 Chargeur et relieur . . . 11 11 11 11 12 12 12 12 14 14 14 15 16 16 17 17 19 19 19 20 20 20 20 20 21 21 21 23 23 24 24 24 3

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Langages 2.1 Alphabet . . . . . . . . . . . . . . . . 2.2 Cha ne . . . . . . . . . . . . . . . . . 2.3 Op erations sur les cha nes . . . . . . 2.3.1 Extension . . . . . . . . . . . 2.3.2 Propri et es de la concat enation 2.3.3 Miroir . . . . . . . . . . . . . 2.4 Langage . . . . . . . . . . . . . . . . 2.4.1 Exemples . . . . . . . . . . . 2.4.2 Op erations sur les langages . . 2.4.3 Cl oture de Kleene . . . . . . . 3 Expressions r eguli` eres 3.1 Op erateurs et | . . . . . . . . . 3.2 Exemples dexpressions r eguli` eres 3.3 Extension des notations . . . . . 3.4 Priorit e des op erateurs . . . . . . Claude Moulin . . . . . . . .

` TABLE DES MATIERES 3.5 3.6 Lois alg ebriques sur les expressions r eguli` eres . . . . . . . . . . . . . . 25 D enition r eguli` ere . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 28 28 28 29 29 29 30 30 30 30 31 32 33 33 33 34 34 34 35 35 35 36 36 37 37 37 37 38 39 40 42 43 44 47 47 47 47 48

4 Expressions r eguli` eres et Langage de programmation 4.1 Principales caract eristiques . . . . . . . . . . . . . . . . 4.1.1 Classes de caract` eres . . . . . . . . . . . . . . . 4.1.2 Groupes . . . . . . . . . . . . . . . . . . . . . . 4.1.3 Caract` eres limites . . . . . . . . . . . . . . . . . 4.1.4 Facteurs de r ep etition . . . . . . . . . . . . . . 4.1.5 Caract` eres de pr evision . . . . . . . . . . . . . . 4.1.6 Drapeaux . . . . . . . . . . . . . . . . . . . . . 4.2 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Impl ementation en Java . . . . . . . . . . . . . . . . . 4.3.1 Classes . . . . . . . . . . . . . . . . . . . . . . . 4.3.2 M ethodes de la classe Matcher . . . . . . . . . . 4.3.3 Exemple de programme . . . . . . . . . . . . . 5 Automate ` a etats nis 5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Automate ni d eterministe - AFD . . . . . . . . . . . . 5.2.1 Diagramme de transition - graphe dautomate . 5.2.2 Table de transition . . . . . . . . . . . . . . . . 5.2.3 Extension de la fonction de transition . . . . . . 5.2.4 Exemple . . . . . . . . . . . . . . . . . . . . . . 5.3 Automate ni non d eterministe - AFN . . . . . . . . . 5.3.1 Exemple . . . . . . . . . . . . . . . . . . . . . . 5.3.2 D enition . . . . . . . . . . . . . . . . . . . . . 5.3.3 Extension de la fonction de transition . . . . . . 5.3.4 Exemple . . . . . . . . . . . . . . . . . . . . . . 5.4 Automate ni avec -transitions (-AFN) . . . . . . . . 5.4.1 introduction . . . . . . . . . . . . . . . . . . . . 5.4.2 D enition . . . . . . . . . . . . . . . . . . . . . 5.5 Automates nis et expressions r eguli` eres . . . . . . . . 5.5.1 Passage dun AFD a ` une expression r eguli` ere . . 5.5.2 M ethode par elimination d etats . . . . . . . . . 5.5.3 Passage dun AFN ` a un AFD . . . . . . . . . . 5.5.4 Passage dun -AFN ` a un AFD . . . . . . . . . 5.5.5 Conversion dune expression r eguli` ere en -AFN 6 Analyse Lexicale 6.1 R ole dun lanalyseur lexical . . . . . . 6.1.1 Introduction . . . . . . . . . . . 6.1.2 Fonctions de lanalyseur lexical 6.1.3 Int er ets de lanalyse lexicale . . 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

NF11

` TABLE DES MATIERES 6.2 Description . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 D enitions . . . . . . . . . . . . . . . . . . . . . 6.2.2 Exemple . . . . . . . . . . . . . . . . . . . . . . Constructions de lanalyseur lexical . . . . . . . . . . . 6.3.1 Principe . . . . . . . . . . . . . . . . . . . . . . 6.3.2 Ecuils . . . . . . . . . . . . . . . . . . . . . . 6.3.3 Compromis : temps dex ecution - place occup ee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 48 48 49 49 50 50 53 53 53 53 54 54 54 54 55 55 55 56 57 58 59 60 60 61 62 62 62 63 65 65 65 66 67 67 67 67 68 68 68 69 69 5

6.3

7 Grammaires hors contexte 7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . 7.1.1 Existence de langages non r eguliers . . . . . . 7.1.2 Exemple : fragment de grammaire . . . . . . . 7.2 D enition formelle . . . . . . . . . . . . . . . . . . . 7.2.1 Conventions d ecriture . . . . . . . . . . . . . 7.3 Exemples . . . . . . . . . . . . . . . . . . . . . . . . 7.3.1 Grammaire des palindromes sur {0,1} . . . . . 7.3.2 Petit sous-ensemble de la grammaire fran caise 7.4 D erivation . . . . . . . . . . . . . . . . . . . . . . . . 7.4.1 Extension des r` egles de production . . . . . . 7.4.2 D erivation la plus ` a gauche, la plus ` a droite . 7.4.3 Arbre de d erivation . . . . . . . . . . . . . . . 7.4.4 Ambigu t e . . . . . . . . . . . . . . . . . . . . 7.5 Forme de BACKUS-NAUR . . . . . . . . . . . . . . . 7.6 Types de grammaires . . . . . . . . . . . . . . . . . . 7.7 Expression r eguli` ere sous forme de grammaire . . . . 7.8 Equivalence . . . . . . . . . . . . . . . . . . . . . . . 7.9 Types danalyse . . . . . . . . . . . . . . . . . . . . . 7.9.1 Exemple danalyse . . . . . . . . . . . . . . . 7.9.2 Analyse LL . . . . . . . . . . . . . . . . . . . 7.9.3 Analyse LR . . . . . . . . . . . . . . . . . . . 8 Automates ` a piles 8.1 Introduction . . . . . . . . . . . . . . 8.1.1 Fonctionnement sch ematique . 8.1.2 Exemple . . . . . . . . . . . . 8.2 D enition formelle . . . . . . . . . . 8.2.1 D enition . . . . . . . . . . . 8.2.2 R` egles de transition . . . . . . 8.2.3 Automate ` a pile d eterministe 8.3 Exemple . . . . . . . . . . . . . . . . 8.3.1 Diagramme de transition . . . 8.3.2 Simulation . . . . . . . . . . . 8.4 Extension de la fonction de transition 8.4.1 Conguration . . . . . . . . . Claude Moulin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

` TABLE DES MATIERES 8.4.2 D enition . . . . . . . . . Langage dun automate ` a pile . . 8.5.1 Acceptation par etat nal 8.5.2 Acceptation par pile vide . 8.5.3 Th eor` emes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 70 70 71 71 73 73 73 73 75 76 77 77 79 79 80 81 81 82 83 85 85 85 86 86 86 87 87 88 88 88 89 89 90 90 91 91 92 92 93 93

8.5

9 Analyse Syntaxique Descendante 9.1 Introduction . . . . . . . . . . . . . . . . . 9.2 Analyseur descendant LL(1) . . . . . . . . 9.2.1 Probl ematique . . . . . . . . . . . . 9.2.2 Premiers . . . . . . . . . . . . . . . 9.2.3 Suivants . . . . . . . . . . . . . . . 9.2.4 Table danalyse . . . . . . . . . . . 9.2.5 Simulation par un automate ` a pile 9.3 Grammaire LL(1) . . . . . . . . . . . . . . 9.3.1 R ecursivit e` a gauche . . . . . . . . 9.3.2 Factorisation ` a gauche . . . . . . . 9.4 Conits . . . . . . . . . . . . . . . . . . . 9.4.1 Conit Premier-Premier . . . . . . 9.4.2 Conit Premier-Suivant . . . . . . 9.4.3 Conclusion . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

10 Analyse Ascendante LR(0) 10.1 Principe danalyse ascendante . . . . . . . . 10.1.1 Exemple danalyse . . . . . . . . . . 10.1.2 D ecalage - R eduction . . . . . . . . . 10.1.3 M ethodes danalyse . . . . . . . . . . 10.1.4 Manche . . . . . . . . . . . . . . . . 10.2 Item LR(0) . . . . . . . . . . . . . . . . . . 10.2.1 D enition . . . . . . . . . . . . . . . 10.2.2 Fermeture dun ensemble ditems . . 10.3 Automate caract eristique canonique . . . . . 10.3.1 D enition . . . . . . . . . . . . . . . 10.3.2 Diagramme de transition . . . . . . . 10.3.3 Transitions . . . . . . . . . . . . . . 10.3.4 Collection des items dune grammaire 10.3.5 Construction des items . . . . . . . . 10.4 Analyse LR(0) . . . . . . . . . . . . . . . . . 10.4.1 Table des actions . . . . . . . . . . . 10.4.2 Illustration . . . . . . . . . . . . . . 10.4.3 Algorithme danalyse . . . . . . . . . 10.4.4 Simulation de lautomate . . . . . . . 10.4.5 Conits . . . . . . . . . . . . . . . . 6

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

NF11

` TABLE DES MATIERES 11 Analyse Ascendante SLR(1) 11.1 Introduction . . . . . . . . . . . . 11.2 Algorithme de construction . . . 11.3 Tables SLR(1) . . . . . . . . . . . 11.4 Grammaire SLR(1), non LR(0) . 11.4.1 Premiers - Suivants . . . . 11.4.2 Tables danalyse . . . . . . 11.4.3 Simulation de lautomate . 11.5 Conits . . . . . . . . . . . . . . 11.5.1 Conit D ecaler - R eduire . 11.5.2 Conit R eduire - R eduire 95 95 95 96 97 98 99 99 100 100 100

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . .

12 Analyse LR(1) 12.1 Exemple . . . . . . . . . . . . . . . . . . . . . . 12.2 Introduction . . . . . . . . . . . . . . . . . . . . 12.3 Items LR(1) . . . . . . . . . . . . . . . . . . . . 12.3.1 D enition . . . . . . . . . . . . . . . . . 12.3.2 Fermeture dun ensemble ditems LR(1) 12.3.3 Transition . . . . . . . . . . . . . . . . . 12.3.4 Calcul de lensemble des items . . . . . . 12.3.5 Tables danalyse LR(1) . . . . . . . . . . 12.3.6 Illustration . . . . . . . . . . . . . . . . 12.3.7 Exemples de conits LR(1) . . . . . . . . 12.4 Analyse LALR(1) . . . . . . . . . . . . . . . . . 12.4.1 Cur dun ensemble ditems . . . . . . . 12.4.2 Fusion de deux etats . . . . . . . . . . . 12.4.3 Tables danalyse LALR . . . . . . . . . . 12.4.4 Exemple . . . . . . . . . . . . . . . . . . 12.4.5 Conits . . . . . . . . . . . . . . . . . . 12.4.6 Grammaire LR(1) non LALR(1) . . . . . 13 Analyse S emantique 13.1 Introduction . . . . . . . . . . . . . . . 13.2 Grammaire attribu ee . . . . . . . . . . 13.2.1 Exemple . . . . . . . . . . . . . 13.3 Attributs . . . . . . . . . . . . . . . . . 13.3.1 Arbre d ecor e . . . . . . . . . . 13.3.2 D enition formelle . . . . . . . 13.3.3 Ordre d evaluation des attributs 13.3.4 Exemple . . . . . . . . . . . . . 13.4 Traduction dirig ee par la syntaxe . . . 13.4.1 Analyse ascendante . . . . . . . 13.4.2 Analyse descendante . . . . . . 13.4.3 Principe . . . . . . . . . . . . . Claude Moulin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

101 . 101 . 101 . 102 . 102 . 102 . 103 . 103 . 103 . 103 . 105 . 105 . 106 . 106 . 107 . 108 . 108 . 109 111 . 111 . 112 . 112 . 113 . 113 . 114 . 114 . 115 . 115 . 116 . 117 . 117 7

` TABLE DES MATIERES 13.4.4 D enition L-attribu ee . . . . . . . 13.5 Arbre abstrait - AntLR . . . . . . . . . . 13.5.1 Exemple : expression arithm etique 13.5.2 Arbre abstrait . . . . . . . . . . . 13.5.3 Evaluation r ecursive . . . . . . . 13.6 Traduction de langage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 119 119 120 120 121

A G en erateurs danalyseur 127 A.1 Commandes unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 A.2 G en erateurs en langage Java . . . . . . . . . . . . . . . . . . . . . . . 128 B Le g en erateur AntLR B.1 Exemple simple . . . . . . . . . . . . . . . . . . . . . B.1.1 Introduction . . . . . . . . . . . . . . . . . . . B.1.2 Grammaire . . . . . . . . . . . . . . . . . . . B.2 Mise en uvre . . . . . . . . . . . . . . . . . . . . . . B.2.1 G en eration des classes en ligne de commande B.2.2 Exemple de chier batch sous Windows . . . . B.2.3 Outil ANTLRWorks . . . . . . . . . . . . . . B.2.4 Ex ecution . . . . . . . . . . . . . . . . . . . . B.3 Autre exemple . . . . . . . . . . . . . . . . . . . . . . B.3.1 Grammaire . . . . . . . . . . . . . . . . . . . B.3.2 Ex ecution . . . . . . . . . . . . . . . . . . . . B.4 Cr eation de larbre AST . . . . . . . . . . . . . . . . B.4.1 Cr eation par d efault . . . . . . . . . . . . . . B.4.2 Cr eation automatique . . . . . . . . . . . . . B.4.3 Code . . . . . . . . . . . . . . . . . . . . . . . B.4.4 Achage de larbre . . . . . . . . . . . . . . . B.4.5 Cr eation manuelle de larbre . . . . . . . . . . B.5 Actions AntLR . . . . . . . . . . . . . . . . . . . . . B.5.1 Actions du parser . . . . . . . . . . . . . . . . B.5.2 Variables et m ethodes globales . . . . . . . . . C Introduction ` a Java 5.0 C.1 Introduction . . . . . . . . . . . . . . . . . C.1.1 Objectifs . . . . . . . . . . . . . . . C.1.2 Environnements de d eveloppement C.2 Programmation orient ee objet . . . . . . . C.2.1 Classes et Objets . . . . . . . . . . C.2.2 API Java . . . . . . . . . . . . . . C.2.3 Entr ees-Sorties sur la console . . . C.2.4 Une application en Java . . . . . . ements de base . . . . . . . . . . . . . . C.3 El C.3.1 Types primitifs . . . . . . . . . . . 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 . 129 . 129 . 129 . 130 . 130 . 130 . 130 . 131 . 133 . 133 . 134 . 134 . 134 . 135 . 135 . 136 . 136 . 137 . 137 . 137 . . . . . . . . . . 139 139 139 139 140 140 140 141 141 142 142

NF11

` TABLE DES MATIERES C.3.2 Types des variables . . . . . . . . . . C.3.3 Structures de contr ole des m ethodes . Construction dune classe . . . . . . . . . . C.4.1 Port ee - Visibilit e . . . . . . . . . . . C.4.2 Constructeurs . . . . . . . . . . . . . C.4.3 Interface . . . . . . . . . . . . . . . . C.4.4 Application simple . . . . . . . . . . Conteneur G en erique . . . . . . . . . . . . . C.5.1 D eclaration . . . . . . . . . . . . . . C.5.2 It eration . . . . . . . . . . . . . . . . H eritage de Classes . . . . . . . . . . . . . . Sites Utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 143 146 146 146 147 147 148 148 148 149 149

C.4

C.5

C.6 C.7

Claude Moulin

` TABLE DES MATIERES

10

NF11

Chapitre 1 Compilation
1.1
1.1.1

Introduction
R ef erences

On pourra consulter avec prot les ouvrages r ef erenc es dans la bibliographie : [1, 2, 6, 3, 5, 4, 7, 8].

1.1.2

Historique
Langage machine : suite de nombres ecrits dans le syst` eme hexad ecimal. Certains nombres repr esentent des instructions, dautres des valeurs, etc. (0A 43) Langage dassemblage : il contient des instructions faisant intervenir les registres de lunit e centrale de lordinateur, les donn ees. Ex : ADD #2, R1 Introduction des etiquettes dans le langage dassemblage dans le but de faciliter les branchements (boucles, sauts). Introduction des variables Ex : MOV R1, b

Avant 1950

D enition des Langages de haut niveau (1950) expressions fonctions structures de donn ees D enition des langages a ` objets (1970) Classes, Objets, m ethodes, variables dinstance H eritage polymorphisme Claude Moulin 11

CHAPITRE 1. COMPILATION

1.1.3

Compilateur

Tout programme ecrit dans un langage de haut niveau doit etre traduit en instructions ex ecutables par un ordinateur. Le programme eectuant cette traduction est un compilateur. Il est pr ef erable que le programme soit ind ependant du syst` eme sur lequel il doit sex ecuter. Ce nest pas toujours le cas. On peut introduire des instructions en langage dassemblage dans le langge C par exemple. Le programme na pas besoin du compilateur lorsquil est ex ecut e. La compilation est un peu plus compliqu ee. chier source 1 compilateur chier objet 1 chier source 2 compilateur chier objet 2 chier objet 1, chier objet 2 programme ex ecutable Exemples de langages compil es : Pascal, C, C++, ADA, Fortran, Cobol

1.1.4

Interpr eteur

Un interpr eteur travaille simultan ement sur les donn ees et sur le programme source. Il analyse une ` a une les instructions du programme, les compile et les ex ecute. Linterpr eteur doit etre pr esent sur le syst` eme o` u le programme sex ecute Lex ecution est plus lente On peut modier le source pendant lex ecution Exemples de langages interpr et es : Basic, Lisp, Scheme, Tcl, Perl, Prolog, Smaltalk

1.1.5

Langage Interm ediaire

Le code source est traduit dans une forme binaire (pseudo-code). Ce code est interpr et e et ex ecut e. Exemple de Java : chier source (.java) compilateur (javac) chier objet (.class) Les chiers objet (et les ressources) peuvent etre regroup es dans des chiers archives (.jar). Les chiers objet interpr eteur (JVM) r esultat. Exemples de langages interm ediaires : Java, Python.

1.2

Phases de la compilation

Le but dun compilateur est de traduire un programme source ecrit dans un certain langage en un programme cible ecrit dans un dans un autre langage. Le plus souvent, le langage cible est le langage machine, mais cela peut etre seulement un code interm ediaire optimis e (byte code java). La compilation se d ecompose en 6 phases : 3 phases danalyse et 3 phases de g en eration de code. La gure 1.2 montre le fonctionnement typique dun compilateur, 12 NF11

1.2. PHASES DE LA COMPILATION

Programme source

Compilateur

messages d'erreurs

Programme cible

Fig. 1.1 Compilation

m eme si dans la pratique certaines phases peuvent etre regroup ees. Deux autres t aches interagissent avec les six phases : la gestion dune table des symboles. Celle-ci contient les identicateurs des variables et leurs attributs (type, port ee, etc.). la d etection des erreurs. Une phase ne doit pas sinterrompre ` a la premi` ere erreur rencontr ee mais doit traiter les erreurs de fa con ` a ce que la compilation puisse continuer.

Programme source

Analyseur lexical

Analyseur syntaxique Table des symboles

Analyseur smantique

Erreurs

Gnrateur de code intermdiaire

Optimisateur de code

Gnrateur de code

Programme cible

Fig. 1.2 Les di erentes etapes de la compilation

Claude Moulin

13

CHAPITRE 1. COMPILATION

1.3

Analyse du programme source

Lanalyse du programme source est r ealis ee durant les trois premi` eres phases de la compilation. Analyse lexicale. Le ot des des caract` eres du programme source est regroup e en suites ayant une signication pr ecise et appartenant ` a des cat egories pr ed enies appel ees unit es lexicales. Analyse syntaxique. Elle regroupe les unit es lexicales en structures ou unit es grammaticales qui permettent de synth etiser le r esultat de la compilation. Analyse s emantique. Elle contr ole la coh erence s emantique du programme source. En particulier, elle v erie la coh erence des types des variables et des expressions et proc` ede parfois ` a des conversions (entier vers r eel). La repr esentation interne du programme source evolue en fonction des phases de la compilation. Nous illustrons ces repr esentations par lexemple suivant. Il sagit de traduire une instruction extraite dun programme source : aire := base hauteur/2 (1.1)

1.3.1

Analyse lexicale
aire := base * hauteur / 2

Lanalyse lexicale reconna t les lex` emes suivants :

aire, base, hauteur sont des lex` emes repr esentants de la m eme unit e lexicale appel ee par exemple identicateur. La repr esentation de linstruction 1.1 peut etre sugg er ee par : id1 := id2 id3 /2 Apr` es analyse lexicale, la cha ne qui contient linstruction source : aire := base * hauteur / 2 peut etre repr esent ee par la suite : <identicateur> aire <aectation> := <identicateur> base <op erateur> * <identicateur> hauteur <op erateur> / <nombre> 2 (1.2)

1.3.2

Analyse syntaxique

Lanalyse syntaxique regroupe les unit es lexicales en structures grammaticales en suivant les r` egles gurant dans une grammaire. On repr esente souvent par un arbre syntaxique le r esultat produit par lanalyse syntaxique. 14 NF11

1.3. ANALYSE DU PROGRAMME SOURCE


Affectation Identificateur
aire :=

Expression
*

Expression Identificateur
base

Expression
/

Expression Identificateur
hauteur

Expression Nombre
2

Fig. 1.3 Larbre syntaxique

La structure hi erarchique dun programme est exprim ee ` a laide de r` egles. Ainsi : Tout identicateur est une expression Tout nombre est une expression Certaines r` egles sont r ecursives : Si expr1 et expr2 sont des expressions alors expr1 expr2 est une expression

1.3.3

Analyse s emantique

Lanalyse s emantique va contr oler les erreurs s emantique et collecte des informations de type destin ees aux phases suivantes de la compilation. Une partie importante est le contr ole des types des variables (identicateurs de variables : aire, base, hauteur) dans les instructions. Aectation Op erandes dans les op erations, facteurs dans les expressions Type de retour des fonctions Les erreurs de types sont g en eralement signal ees et n ecessitent une correction : Ex : nombre r eel employ e comme indice dun tableau. Cependant, lanalyse s emantique peut eventuellement r ealiser la coercition de valeurs ou de constantes. Dans linstruction etudi ee ci-dessus, les identicateurs base, hauteur sont normalement d eclar es comme r eels. Les op erations, multiplication, division ont des op erandes de m eme type (tous deux r eels). Lentier 2 va donc etre substitu e par un r eel (2.0). Le codage machine des entiers et des r eels n etant pas le m eme cette coercition est rendue n ecessaire. La gure 1.4 montre lappel ` a un op erateur suppl ementaire. Claude Moulin 15

CHAPITRE 1. COMPILATION
:=

aire

EntierVersRel

base

hauteur

Fig. 1.4 Coercition

1.4

Environnement du compilateur

La cr eation dun programme cible ex ecutable requiert en fait plusieurs programmes en plus du strict compilateur. La gure 1.5 indique ces di erents programmes.

1.4.1

Pr eprocesseur
squlette de programme source

prprocesseur

programme source

compilateur

programme cible en langage d'assemblage

assembleur

code machine translatable bibliothques, fichiers objets translatables

relieur-chargeur

code machine absolu

Fig. 1.5 Traitement dun programme source Le programme source est en g en eral divis e en modules stock es dans di erents chiers. Le pr eprocesseur a pour t ache de reconstituer le programme source ` a par16 NF11

1.4. ENVIRONNEMENT DU COMPILATEUR tir des di erents modules le constituant. Certains langages poss` edent egalement des macros-instructions. Elles ont pour but de remplacer des el ements des chiers dentr ee par des instructions du langage. Ainsi en langage C, on peut trouver le contenu suivant : #ifndef LISTE_H #define LISTE_H #include <stdio.h> #include <assert.h> #define CR 13 l

1.4.2

Assembleur

Certains compilateurs produisent du code en langage dassemblage qui doit etre trait e par un assembleur. Le langage dassemblage est une version mn emonique de code machine dans laquelle on utilise des noms au lieu du code binaire pour d esigner des op erations et dans laquelle on utilise des noms pour d esigner les adresses m emoire. Ainsi le code suivant permet dadditionner 2. MOV a, R1 ADD #2, R1 MOV R1, b a et b sont des emplacements m emoire, R1 est un registre et le code r ealise linstruction : b := a + 2. Le code produit par lassembleur est un code machine ( ecrit en langage binaire) o` u les adresses sont translatables. Il peut donc etre charg e en m emoire ` a partir de nimporte quelle adresse.

1.4.3

Chargeur et relieur

Un chargeur est un programme qui charge le programme en m emoire, cest-` a dire quil quil prend le code machine translatable, modie les adresse translatables en adresse absolues et place les instructions et les donn ees aux endroits appropri es. Le relieur ou editeur de liens permet de constituer un unique programme ` a partir de plusieurs chiers. contenant du code machine translatable.

Claude Moulin

17

CHAPITRE 1. COMPILATION

18

NF11

Chapitre 2 Langages
2.1 Alphabet

D enition 2.1 (Alphabet) Un alphabet est un ensemble ni non vide de symboles appel es egalement lettres de lalphabet. Exemples : 1. = {0,1} 2. = {a,b,...,z }

2.2

Cha ne

D enition 2.2 (Cha ne) Une cha ne est une suite nie de symboles choisis dans un alphabet. On note une cha ne par la suite des symboles quelle contient : c = x1 x2 ...xn . Exemples ` a partir des alphabets 1 et 2 : 1. 01011, 111, 00, ... 2. abc, aa, xyzt, ... D enition 2.3 (Cha ne vide) La cha ne vide est la cha ne ne contenant aucun symbole. Cette cha ne, not ee , peut etre construite sur tout alphabet. D enition 2.4 (Longueur dune cha ne) La longueur dune cha ne est le nombre de symboles la composant. 1. |abc| = 3 2. || = 0 Claude Moulin 19

CHAPITRE 2. LANGAGES

2.3

Op erations sur les cha nes

D enition 2.5 (Concat enation de deux cha nes) Soient u = x1 x2 ...xn et v = y1 y2 ...ym deux cha nes non vides d enies sur lalphabet , on d enit par : uv = x1 x2 ...xn y1 y2 ...ym la cha ne concat enation de u et de v . Pr exe, Suxe Soient u, v et w, trois cha nes telles que w = uv . On dit que u est une cha ne pr exe de w et que v est une cha ne suxe de w.

2.3.1

Extension

On peut etendre la d enition de la concat enation ` a la cha ne vide. Si u est une cha ne non vide d enie sur lalphabet : u = u = u On note xn , n N la concat enation de n symboles identiques. x0 = et x1 = x. On note egalement un , n N la concat enation de n cha nes identiques.

2.3.2

Propri et es de la concat enation

La concat enation est associative : u,v,w,(uv )w = u(vw) La concat enation poss` ede pour el ement neutre |uv | = |u| + |v | |un | = n.|u|, n N La concat enation nest pas commutative. En g en eral, uv = vu.

2.3.3

Miroir

D enition 2.6 (Miroir) La cha ne miroir dune cha ne c est la cha ne form ee par la suite des symboles composant c mais pris dans lordre inverse. si u = 0101 alors miroir(u) = 1010. si v = alors miroir(v ) = v = .

2.4

Langage

D enition 2.7 (Langage) Un langage d eni sur un alphabet est un ensemble de cha nes d enies sur . 20 NF11

2.4. LANGAGE

2.4.1

Exemples

1. 2 est le langage compos e de toutes les cha nes de longueur 2 sur 2. est le langage compos e de toutes les cha nes constructibles sur lalphabet 3. Pour tout langage L construit sur un alphabet on a : L

2.4.2

Op erations sur les langages

D enition 2.8 (R eunion, Intersection de deux langages) Soient L1 et L2 deux langages d enis sur un alphabet . L1 L2 et L1 L2 sont aussi deux langages d enis sur . D enition 2.9 (Concat enation de deux langages) Soient L1 et L2 deux langages d enis sur un alphabet . L1 L2 = {uw/u L1 ,w L2 } est le langage obtenu par concat enation de L1 et de L2 .

2.4.3

Cl oture de Kleene

D enition 2.10 (Cl oture dun langage) Soit L un langage d eni sur un alphabet . La cl oture de Kleene du langage L, not ee L est lensemble des cha nes qui peuvent etre form ees en prenant un nombre quelconque ( eventuellement 0) de cha nes de L et en les concat enant. L0 = {} L1 = L L2 = LL Li = LL...L, la concat enation de i copies de L i L = i 0 L

Claude Moulin

21

CHAPITRE 2. LANGAGES

22

NF11

Chapitre 3 Expressions r eguli` eres


Les expressions r eguli` eres sont une fa con d eclarative de d ecrire la formation des cha nes dun langage. Si E est une expression r eguli` ere on notera L(E ) le langage engendr e par E .

3.1

Op erateurs et |

Consid erons lalphabet = {0,1} 1. Expression 1 : 0* Cette expression r eguli` ere d ecrit toutes les cha nes compos ees uniquement du symbole 0 ainsi que la cha ne vide . 2. Expression 2 : 110*1 Cette expression r eguli` ere d ecrit les cha nes contenant deux fois le symbole 1 suivis dun nombre quelconque de symboles 0, eventuellement nul, et du symbole 1. 3. 0*110*1 est la concat enation des expressions 1 et 2. Elle d ecrit les cha nes commen cant par un nombre quelconque de 0 suivis de deux 1, suivi dun nombre quelconque de 0 et dun 1. 4. 0* | 110*1 est lexpression r eguli` ere d ecrivant les cha nes g en er ees soit par lexpression 1, soit par lexpression 2. Les r` egles suivantes permettent de d ecrire les expressions r eguli` eres d enies sur un alphabet : D enition 3.1 (Expressions r eguli` eres) 1. la cha ne vide et lensemble vide sont des expressions r eguli` eres. L() = {} et L() = . 2. a , la cha ne a form ee de lunique symbole a est une expression r eguli` ere. Claude Moulin 23

` CHAPITRE 3. EXPRESSIONS REGULI ERES 3. Si E et E sont des expressions r eguli` eres alors : (a) EE est une expression r eguli` ere, concat enation de E et E . Elle d ecrit L(EE ) = L(E )L(F ) (b) E | E est une expression r eguli` ere. Elle d ecrit L(E | E ) = L(E ) L(F ) (c) (E ) est une expression r eguli` ere, d ecrivant le m eme langage que E . L((E )) = L(E ). (d) E est une expression r eguli` ere. L(E ) = L(E ) D enition 3.2 (Langage r egulier) Un langage r egulier est un langage repr esent e par une expression r eguli` ere.

3.2

Exemples dexpressions r eguli` eres

a|b (a | b) abba a b ( a b ) ( a | b) b (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)(0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)

3.3

Extension des notations

Soit E une expression r eguli` ere : Op erateur unaire + : au moins une fois E + = EE Op erateur unaire ? : 0 ou 1 fois E? = E | Classes de caract` eres : [abc] = a | b | c [a z ] = a | b | c | ... | z [A Ca z ] = A | B | C | a | b | c | ... | z

3.4

Priorit e des op erateurs

Les op erateurs unaires + et * ont la plus haute priorit e. La concat enation a la deuxi` eme plus haute priorit e et est associative ` a gauche. | a la plus faible priorit e et est associative ` a gauche. Exemple : (a) | ((b) (c)) equivaut ` a a | b c 24 NF11

` 3.5. LOIS ALGEBRIQUES SUR LES EXPRESSIONS REGULI ERES

3.5

Lois alg ebriques sur les expressions r eguli` eres

D enition 3.3 (Expressions egales) Deux expressions r eguli` eres sont egales si elles engendrent le m eme langage. Propri et es E | E = E | E E | (E | E ) = (E | E ) | E |E=E |=E E |E=E E (E E ) = (EE )E E = E = E E = E = E (E | E ) = EE | EE (E | E )E = EE | E E commutativit e de la r eunion associativit e de la r eunion. est l el ement neutre pour la r eunion. idempotence de la r eunion. associativit e de la concat enation. est l el ement unit e pour la concat enation. est el ement absorbant pour la concat enation. distributivit e` a gauche de la concat enation par rapport ` a la r eunion. distributivit e` a droite de la concat enation par rapport ` a la r eunion.

Quelques cons equences (E ) = E = = E + = EE = E E E+ | = E E? = E | p(qp) = (pq ) p (p|q ) = (p |q ) (p q ) = (p|q ) = (p |q )

3.6

D enition r eguli` ere

Pour des raisons de commodit e, il est possible de donner des noms explicites ` a des expressions r eguli` eres. On utilise le symbole pour ecrire leur d enition. Exemples : lettre [A-Za-z] chire [0-9] id lettre ( lettre | chire )* chires chire (chire)* fraction . chires | exposant E( + | - | ) chires | nombre chires fraction exposant A partir de cette d enition : Claude Moulin 25

` CHAPITRE 3. EXPRESSIONS REGULI ERES

id reconna t : a, a0b, begin nombre reconna t : 0, 1.0, 2E4, 1.5E-8, 0.25E-0 nombre ne reconna t pas : 0., .1, 1E2.0

26

NF11

Chapitre 4

Expressions r eguli` eres et Langage de programmation

La plupart des langages de programmation int` egrent des possibilit es danalyse de cha nes ` a partir dexpressions r eguli` eres. Ces possibilit es etendent les op erateurs vus dans le chapitre pr ec edent. Des m ethodes permettent de d eterminer si la totalit e dune cha ne satisfait le patron dune expression r eguli` ere ou si seulement une portion de la cha ne le satisfait. Dans ce cas, il est possible de recommencer plusieurs fois la recherche et de trouver lensemble des parties de la cha ne qui satisfont lexpression r eguli` ere. Claude Moulin 27

` CHAPITRE 4. EXPRESSIONS REGULI ERES ET LANGAGE DE PROGRAMMATION

4.1
4.1.1

Principales caract eristiques


Classes de caract` eres
Union des caract` eres entre les crochets Compl ementaire des symboles entre les crochets Lun des symboles entre x et y [0-9] [ 0-9] [a-zA-Z0-9] [ a-zA-Z0-9] [\t\n\x0B\f\r] [^\t\n\x0B\f\r] Un caract` ere minuscule Un caract` ere majuscule Un caract` ere dont le code ascii est compris entre 0 et 128 Un caract` ere minuscule ou majuscule \p{Alpha} \p{Digit} [! "#$%&()*+,-./:;<=>?@[\]^_{|}~] \p{Alnum} \p{Punct} Caract` eres espace ou tabulation Un chire hexad ecimal [0-9a-fA-F] Un caract` ere quelconque Union des classes cl1 et cl2 Intersection des classes cl1 et cl2

[. . .] [ . . .] [x y ] \d \D \w \W \s ou \p{Space} \S \p{Lower} \p{Upper} \p{ASCII} \p{Alpha} \p{Alnum} \p{Punct} \p{Print} \p{Blank} \p{XDigit} . < cl1 > | < cl2 > [< cl1 > && < cl2 >]

4.1.2

Groupes

Les parenth` eses dans une expression r eguli` ere sont des m eta symboles permettant de d elimiter des groupes. Chaque groupe poss` ede un rang unique. Pour conna tre le rang dun groupe dans une expression r eguli` ere, il sut de compter le nombre de parenth` eses ouvrantes le pr ec edant. Le rang du groupe est egal ` a ce nombre de parenth` eses. Il est possible dindiquer quun groupe est non capturant. Dans ce cas, le groupe na pas de rang attribu e. Pour d eterminer le rang dun groupe, il faut retirer le nombre de groupes non capturant le pr ec edant en appliquant la r` egle pr ec edente. Dans une expression r eguli` ere, il est possible de faire r ef erence ` a un groupe capturant pr ec edent et de lins erer dans le patron. (. . . ) (?:. . .) \n 28 Groupe capturant Groupe non capturant R ef erence arri` ere au groupe capturant de rang n NF11

4.1. PRINCIPALES CARACTERISTIQUES

4.1.3

Caract` eres limites


^ ou \a $ ou \z (?m)^ (?m)$ \b \B \G D ebut de cha ne Fin de cha ne D ebut de ligne ou de cha ne Fin de ligne ou de cha ne D ebut ou n de mot Absence de d ebut ou de n de mot Fin du pr ec edent groupe satisfaisant le gabarit

4.1.4

Facteurs de r ep etition
{n} + ou {n,} {n,p} ? * *?, +? ?+, *+, ++ Exactement n occurrences dune classe de caract` eres Au moins n occurrences dune classe de caract` eres De n ` a p occurrences dune classe de caract` eres 0 ou 1 occurrence Un nombre quelconque de fois, eventuellement z ero Op erateurs passifs Op erateurs possessifs

Les op erateurs ?, *, +, {n,p} sont avides, cest-` a-dire quils essaient de satisfaire le patron en utilisant le maximum de caract` eres possible. On peut les rendre passifs en leur adjoignant le symbole ?. Dans ce cas, ils essaient de satisfaire le patron en utilisant le minimum de caract` eres possible. On les rend possessifs en leur adjoignant le caract` ere +. Ils sont alors ind ependants du contexte. Il est ` a noter que lop erateur *? est satisfait par une cha ne vide.

4.1.5

Caract` eres de pr evision


(?=. . . ) (?!. . . ) (?<=. . . ) (?<!. . . ) Pr evision Pr evision Pr evision Pr evision positive avant n egative avant positive arri` ere n egative arri` ere

Les s equences de caract` eres de pr evision permettent de faire des assertions, positives ou n egatives sur les caract` eres qui suivent ou pr ec` edent sans consommer de caract` eres : le pointeur dans la cha ne ` a partir duquel se fait lanalyse nest pas avanc e ou recul e selon les caract` eres satisfaisant le patron. Claude Moulin 29

` CHAPITRE 4. EXPRESSIONS REGULI ERES ET LANGAGE DE PROGRAMMATION

4.1.6
(?i)

Drapeaux
Lanalyse est faite ind ependamment de la casse des caract` eres, minuscule ou majuscule Pour rendre ^ et $ d ebut et n de ligne ou de cha ne Pour que le caract` ere . satisfasse nimporte quel caract` ere, y compris le retour ` a la ligne Annule (?i) Annule (?m) Annule (?s) Pour plusieurs drapeaux

(?m) (?s) (?-i) (?-m) (?-s) (?ims)

4.2

Exemples
Patron Texte R esultat Patron Texte R esultat Patron Texte R esultat Patron Texte R esultat Patron Texte R esultat Patron Texte R esultat \d+ rge5r43 5 \p{Upper}+ rgEF5r-43 EF (?i)(\w{1,3})(\d{1,2})\2\1 -abC4141aBcabC4141aBc <B>.*</B> ...<B>millions</B> et des <B>milliards</B> <B>millions</B> et des <B>milliards</B> <B>.*?</B> ...<B>millions</B> et des <B>milliards</B> <B>millions</B> (?<=\D\d).(?=\d{2,}) 25.3a512b.3.5135 a

Les exemples suivant montrent des sous-cha nes satisfaisant un patron.

4.3
4.3.1

Impl ementation en Java


Classes

Classe java.util.regex.Pattern Cette classe permet dinstancier des patrons bas es sur une expression r eguli` ere. Ainsi, si patternString est une cha ne contenant une expression r eguli` ere, on peut cr eer un objet p de type Pattern : Pattern p = Pattern.compile(patternString); 30 NF11

4.3. IMPLEMENTATION EN JAVA Classe java.util.regex.Matcher Cette classe permet dinstancier des objets Matcher associ es ` a un objet Pattern et bas es sur une cha ne ` a tester. Ainsi si p est un objet de type Pattern et text une cha ne ` a tester, on peut cr eer un objet Matcher par : Matcher m = p.matcher(text);

4.3.2
nd

M ethodes de la classe Matcher

Cette m ethode analyse la cha ne dentr ee en cherchant la prochaine s equence qui satisfait le patron. matches Cette m ethode essaie de satisfaire la cha ne enti` ere en regard du patron. start Cette m ethode retourne le rang du premier caract` ere de la s equence qui satisfait le patron. end Cette m ethode retourne le rang du dernier caract` ere de la s equence qui satisfait le patron. group Cette m ethode retourne la cha ne qui satisfait le patron. groupCount Cette m ethode retourne le nombre de groupes dans la cha ne qui satisfait le patron. group(int n) Cette m ethode retourne le groupe de rang n dans la cha ne qui satisfait le patron. appendReplacement(StringBuer sb,String s) Cette m ethode ajoute au buer la cha ne s en remplacement de la s equence qui satisfait le patron. Claude Moulin 31

` CHAPITRE 4. EXPRESSIONS REGULI ERES ET LANGAGE DE PROGRAMMATION appendTail(StringBuer sb) Cette m ethode ajoute au buer la n de la cha ne dentr ee.

4.3.3

Exemple de programme

import java.util.regex.Matcher; import java.util.regex.Pattern; ... public static void scan() { String patternString = "^.*?\\p{Alpha}|[.].*?\\p{Alpha}"; String text = "il. est. conseill e de. souvent. rire."; Pattern p = Pattern.compile(patternString); Matcher m = p.matcher(text); StringBuilder sb = new StringBuilder(); boolean found = m.find(); while (found) { m.appendReplacement(sb,m.group().toUpperCase()); found = m.find(); } m.appendTail(sb); System.out.println(sb.toString()); }

32

NF11

Chapitre 5 Automate ` a etats nis


5.1 Introduction

Les automates sont des mod` eles math ematiques qui prennent en entr ee une cha ne de symboles et qui eectuent un algorithme de reconnaissance de la cha ne. Si lalgorithme se termine dans certaines conditions, lautomate est dit accepter la cha ne correspondante. Le langage reconnu par un automate est lensemble des cha nes quil accepte. La gure 5.1 repr esente un automate qui accepte toute cha ne comportant une suite de caract` eres 01.
1 Dbut 0 0

q0

q2

q1

0, 1

Fig. 5.1 Exemple dautomate

5.2

Automate ni d eterministe - AFD

D enition 5.1 (AFD) un automate ni d eterministe (AFD) est un mod` ele math ematique qui consiste en : Q un ensemble d etats. un ensemble de symboles dentr ee (alphabet). une fonction de transition qui prend comme argument un etat et un symbole dentr ee et qui retourne un etat. : Q Q. q0 , un etat initial appartenant ` a Q. F , un ensemble d etats nals ou etats dacceptation, F Q. Un automate A est un quintuplet : A = (Q,,,q0 ,F ) Claude Moulin 33

` ETATS CHAPITRE 5. AUTOMATE A FINIS

5.2.1

Diagramme de transition - graphe dautomate

Un automate est repr esent e par un graphe orient e etiquet e, appel e graphe de transition tel que : Pour chaque etat q , q Q, il existe un nud etiquet e q. Pour chaque etat q et chaque symbole a de tel que (q,a) = p, il existe un arc du nud q vers le nud p etiquet e a. Les nuds correspondant aux etats de satisfaction ( etats appartenant ` a F) sont repr esent es par un cercle double. Exemple : Soit le langage L = {w|w poss` ede un nombre pair de 0 et de 1 }
Dbut

1 q0 0 q2 1 0 1 1 0 q3 q1 0

Fig. 5.2 Le graphe du langage L L etat L etat L etat L etat q0 q1 q2 q3 correspond correspond correspond correspond a ` ` a a ` a ` un un un un nombre nombre nombre nombre pair de 0 et de 1 impair de 1 impair de 0 impair de 0 et de 1

5.2.2

Table de transition
* q0 q1 q2 q3 0 q2 q3 q0 q1 1 q1 q0 q3 q2

exemple : (q0 ,0) = q2 d esigne l etat initial * d esigne les etats nals

D enition 5.2 (Langage engendr e par un automate - 1) Le langage dun automate ` a etats nis d eterministe est lensemble des cha nes obtenues sur tout chemin du graphe partant du nud initial et sachevant sur un nud nal.

5.2.3

Extension de la fonction de transition

d La fonction de transition etendue appel ee ecrit ce qui se passe lorsquon se positionne dans un etat quelconque de lautomate et que lon suit une s equence 34 NF11

5.3. AUTOMATE FINI NON DETERMINISTE - AFN : Q Q est d quelconque dentr ees. enie par induction sur la longueur de la cha ne de symboles dentr ee par : (q,) = q Soit w = xa, a le dernier symbole de w et x la cha ne contenant tous les autres symboles de w, (q,x) = p, alors (q,w) = (p,a) = ( (q,x),a) si

5.2.4

Exemple

Lautomate de la section 5.2.1, ` a partir de lentr ee 110101 poss` ede la fonction de transition telle que : (q0 ,) = q0 (q0 ,1) = ( (q0 ,),1) = (q0 ,1) = q1 (q0 ,11) = ( (q0 ,1),1) = (q1 ,1) = q0 (q0 ,110) = ( (q0 ,11),0) = (q0 ,1) = q2 (q0 ,1101) = ( (q0 ,110),1) = (q2 ,1) = q3 (q0 ,11010) = ( (q0 ,1101),0) = (q3 ,1) = q1 (q0 ,110101) = ( (q0 ,11010),1) = (q1 ,1) = q0

D enition 5.3 (Langage engendr e par un automate - 2) Le langage dun automate ` a etats nis d eterministe A = (Q,,,q0 ,F ) est d eni par : L(A) = {w | (q0 ,w) F } Th eor` eme 5.1 Pour tout automate ` a etats nis d eterministe A, il existe une expression r eguli` ere R, telle que L(A) = L(R)

5.3
5.3.1

Automate ni non d eterministe - AFN


Exemple

Un automate non d eterministe poss` ede un nombre ni d etats, un ensemble ni de symboles dentr ee, un etat de d epart et un ensemble d etats nals. Il poss` ede une fonction de transition, mais la di erence avec un automate d eterministe est que cette fonction renvoie un ensemble d etats. La gure 5.3 repr esente un automate non d eterministe dont le travail est de naccepter que les cha nes compos ees de 0 et de 1 et termin ees par la s equence 01. Il reste en l etat q0 tant quil na pas devin e que lultime s equence na pas commenc e. Claude Moulin 35

` ETATS CHAPITRE 5. AUTOMATE A FINIS

0, 1 Dbut 0 1

q0

q1

q2

Fig. 5.3 Exemple dautomate non d eterministe

qo

qo q1

qo q1

qo

qo q1

qo

impasse

q2
impasse

q2

Fig. 5.4 Reconnaissance de la cha ne 00101

5.3.2

D enition

D enition 5.4 (Automate non d eterministe) Un automate non d eterministe est un quintuplet A = (Q,,,q0 ,F ) o` u: Q est un ensemble ni d etats. est un ensemble ni de symboles dentr ee. q0 l etat initial (q0 Q). F, sous-ensemble de Q, est lensemble des etats nals. , la fonction de transition, qui prend en argument un etat et un symbole dentr ee et qui retourne un ensemble d etats. : Q P (Q) La di erence entre un AFD et un AFN tient dans la nature de la fonction de transition. LAFN repr esent e par la gure 5.3 est sp eci e formellement par : A = ({q0 ,q1 ,q2 },{0,1},,q0 ,{q2 }) Sa table de transition est la suivante : 0 1 q0 {q0 ,q1 } {q0 } q1 {q2 } q2

5.3.3

Extension de la fonction de transition

par : La fonction de transition est etendue ` a une fonction (q,) = {q }

36

NF11

5.4. AUTOMATE FINI AVEC -TRANSITIONS (-AFN) Pour tout w = , w = xa o` u a est le symbole nal de w et x le reste de w. En supposant que (q,x) = {p1 ,p2 , . . . ,pk }
k

i=1

(pi ,a) = {r1 ,r2 , . . . ,rm }

(q,w) = {r1 ,r2 , . . . ,rm } alors

5.3.4

Exemple

telle Lautomate de la section 5.3.1, ` a partir de la lentr ee 00101 donne la fonction que : (q0 ,) = {q0 } (q0 ,0) = (q0 ,0) = {q0 ,q1 } (q0 ,00) = (q0 ,0) (q1 ,0) = {q0 ,q1 } = {q0 ,q1 } (q0 ,001) = (q0 ,1) (q1 ,1) = {q0 } {q2 } = {q0 ,q2 } (q0 ,0010) = (q0 ,0) (q2 ,0) = {q0 ,q1 } = {q0 ,q1 } (q0 ,00101) = (q0 ,1) (q1 ,1) = {q0 } {q2 } = {q0 ,q2 } D enition 5.5 (Langage dun AFN) Soit A = (Q,,,q0 ,F ) un AFN, alors le langage engendr e par lautomate A est d eni par L(A) = {w | (q0 ,w) F = }

5.4
5.4.1

Automate ni avec -transitions (-AFN)


introduction

Les automates nis poss edant des -transitions sont des automates pouvant faire spontan ement des transitions. Les arcs correspondants sont etiquet es par le symbole et ne consomment aucun caract` ere de la cha ne dentr ee.

5.4.2

D enition

La d enition dun automate avec -transitions est similaire ` a celle dun automate non d eterministe. La fonction de transition inclut des informations sur les transitions concernant . D enition 5.6 (Automate avec -transitions) Un automate non d eterministe avec -transitions est un quintuplet A = (Q,,,q0 ,F ) o` u: Q est un ensemble ni d etats Claude Moulin 37

` ETATS CHAPITRE 5. AUTOMATE A FINIS est un ensemble nis de symboles dentr ee q0 l etat initial (q0 Q) F, sous-ensemble de Q, est lensemble des etats nals , la fonction de transition, qui prend en argument un etat et un el ement de {} et qui retourne un ensemble d etats
0,1,...,9 Dbut 0,1,...,9

q0

eps,+,-

q1
0,1,...,9

q2

0,1,...,9

q3

eps

q5

.
q4

Fig. 5.5 Exemple dautomate ni non d eterministe avec -transitions L-AFN de la gure 5.5 est repr esent e de fa con formelle par : A = ({q0 ,q1 ,q2 ,q3 ,q4 ,q5 },{., + , ,0,1,2,3,4,5,6,7,8,9},,q0 ,{q5 }) Sa table de transition est la suivante : +, . 0, 1, . . . , 9 q0 {q1 } {q1 } {q2 } {q1 ,q4 } q1 F = {q5 } q2 {q3 } q3 {q5 } {q3 } q4 {q3 } * q5

5.5

Automates nis et expressions r eguli` eres

Les automates nis et les expressions r eguli` eres, bien que daspect totalement di erents permettent de repr esenter exactement la m eme cat egorie de langages.
epsAFN

AFN

RE

AFD

Fig. 5.6 Equivalence des quatre notions

38

NF11

` 5.5. AUTOMATES FINIS ET EXPRESSIONS REGULI ERES

5.5.1

Passage dun AFD ` a une expression r eguli` ere

Th eor` eme 5.2 Soit L(A) le langage d eni par un AFD, A. Il existe une expression r eguli` ere R, telle L(R) = L(A). D emonstration Soit A un AFD ayant n etats. Soit {1, 2, . . . , n} lensemble de ses etats. (k ) eguli` ere dont le langage est lensemble des Notons Rij le nom de lexpression r cha nes w construites sur un chemin allant de l etat i ` a l etat j qui ne passe pas par un etat dont le rang est sup erieur ` a k. Lorsque k = 0 il ny a que deux possibilit es : si i = j on ne consid` ere que le nud i lui-m eme ; les chemins l egaux sont le chemin de longueur 0 etiquet e et les boucles sur l etat i. (0) Rij = lorsquil ny a pas de transition etiquet ee a Rij = | a lorsquil ny a quune transition Rij = | a1 | a2 | . . . | ap lorsquil y a p transitions si i = j on ne consid` ere que les arcs reliant le nud i au nud j . (0) Rij = lorsquil ny a pas de transition etiquet ee a Rij = a lorsquil ny a quune transition Rij = a1 | a2 | . . . | ap lorsquil y a p transitions etiquet ees de a1 ` a ap R ecurrence : Lorsque k = 0 On consid` ere les chemins allant du nud i au nud j passant par des nuds dont lindice est k. Un chemin peut ne pas passer par le nud k et dans ce cas son etiquette est d ecrite (k ) (k1) par Rij = Rij Un chemin peut passer par le nud k au moins une fois et repasser eventuellement par ce m eme nud puis terminer sur le nud j . Dans ce cas son etiquette satisfait lexpression r eguli` ere : (k1) (k1) (k1) Rik (Rkk ) Rkj Par suite : (k1) (k1) (k1) (k1) (k ) | Rik (Rkk ) Rkj Rij = Rij Rij ne d epend que dexpressions de degr e inf erieur ` a k et lexpression r eguli` ere d ecrivant un AFD est donn ee par : u les nuds p1 , p2 , . . . , pm sont les nuds nals. R1p1 | R1p2 | . . . | R1pm o` Illustration Lautomate de la gure 5.7 correspond ` a la partie droite de lautomate de la gure 5.1 o` u q1 et q2 ont pour noms 3 et 2. Claude Moulin 39
(n ) (n ) (n ) (k ) (0) (0) (0) (0)

` ETATS CHAPITRE 5. AUTOMATE A FINIS

0 Dbut

0, 1

Fig. 5.7 Automate simple

Dapr` es les d enitons pr ec edentes : R11 (0) R12 (0) R21 (0) R22
(0)

|0 1 |0|1
(1) (0) (0) (0) (0)

De mani` ere g en erale, dapr` es lhypoth` ese de r ecurrence : Rij = Rij | Ri1 (R11 ) R1j On obtient : Par substitution directe Simplication R11 (1) R12 (1) R21 (1) R22
(2) (1) (1) (1)

| 0 | ( | 0)( | 0)*( | 0) 1 | ( | 0)( | 0)*1 | ( | 0)*( | 0) | 0 | 1 | ( | 0)*1


(1) (1)

0* 0*1 |0|1

Puis : Rij = Rij | Ri2 (R22 ) R2j


(2)

Par substitution directe R11 (2) R12 (2) R21 (2) R22
(2)

Simplication 0* 0*1(0 | 1)* (0 | 1)*

0* | 0*1( | 0 | 1)* 0*1 | 0*1( | 0 | 1)*( | 0 | 1) | ( | 0 | 1)( | 0 | 1)* | 0 | 1 | ( | 0 | 1)( | 0 | 1)* ( | 0 | 1)

Lexpression R12 donne le r esultat. Reprenons lautomate de la gure 5.1 et rebaptisons respectivement q0 , q1 et q2 en 3, 1 et 2. lexpression r eguli` ere ` a d eterminer (3) est : R32 (3) (2) (1) (0) On d emontre ais ement que R13 = R13 = R13 = R13 = (3) (2) (3) Par suite R12 = R12 = 0*1(0 | 1)* et R32 = 1*00*1(0 | 1)*

5.5.2

M ethode par elimination d etats

La m ethode pr ec edente est tr` es p enalisante en nombre dexpressions ` a cr eer. Pour 3 n etats, il faut consid erer n expressions. Une autre m ethode consiste ` a eliminer des etats de lautomate sans changer le langage quil d enit. Lorsquon elimine un etat s, tous les chemins allant dun etat q ` a 40 NF11

` 5.5. AUTOMATES FINIS ET EXPRESSIONS REGULI ERES un etat p et passant par s nexistent plus. Comme le langage de lautomate ne doit pas changer, il faut cr eer un chemin allant de q ` a p. L etiquette de celui-ci comporte une cha ne et non plus un seul symbole. On consid` ere ainsi des automates dont les etiquettes des arcs sont des expressions r eguli` eres. Les automates d ej` a rencontr es en sont des cas particuliers puisque tout symbole peut etre consid er e comme une expression r eguli` ere. Le langage de lautomate est lunion de tous les chemins allant de l etat initial jusqu` a un etat dacceptation. Pour eliminer un etat s, il faut consid erer tous les chemins allant dun etat q ` a un etat p et passant par s. L etat q peut- etre identique ` a l etat p mais s est distinct des etats q et p. Cas g en eral : larc qs est etiquet e par une expression r eguli` ere Q ; larc sp est etiquet e par lexpression r eguli` ere P et l etat s poss` ede une boucle etiquet ee par lexpression r eguli` ere S . Un tel chemin q , s, p sera remplac e par un chemin q , p etiquet e par QS P .

Elimination dun etat La gure 5.8 montrent un stade auxquel on peut arriver apr` es avoir supprim e tous les etats except es l etat initial et les etats dacceptation. Dans ce cas lexpression r eguli` ere associ ee ` a lautomate est : (R | SU T ) SU , (R, U, T peuvent etre lexpression ).
R S Dbut T U

Fig. 5.8 Cas g en eral : deux etats La gure 5.9 montre le stade auxquel on arrive lorsque l etat initial est un etat dacceptation. Dans ce cas lexpression r eguli` ere associ ee ` a lautomate est : R.
R Dbut

Fig. 5.9 Cas g en eral : un etat Dans le cas g en eral, il reste plusieurs chemins issus de l etat intial et sachevant sur un etat dacceptation di erent. Lexpression r eguli` ere r esultante est alors la disjonction des expressions r eguli` eres similaires aux pr ec edentes. Claude Moulin 41

` ETATS CHAPITRE 5. AUTOMATE A FINIS La gure 5.10 montre un stade possible lorsque deux etats dacceptation sont situ es sur le m eme chemin. Lexpression r esultante est la disjonction des expressions r eguli` eres obtenues en eliminant un des etats dacceptation. Lexpression r eguli` ere correspondant ` a lautomate de la gure 5.10 est : R SU T | R SU .

R Dbut S

U T

Fig. 5.10 Deux etats dacceptation

5.5.3

Passage dun AFN ` a un AFD

Algorithme 1. Soit E = {q0 }. 2. Construire E (1) (a) = (E,a) =


q E

(q,a) pour tout a .

3. Recommencer 2 pour toute transition et pour chaque nouvel ensemble E (i) (a). 4. Tous les ensembles d etats E (i) (a) contenant au moins un etat nal deviennent des etats nals. 5. Renum eroter les ensembles d etats en tant que simples etats.

Exemple Consid erons lAFN d eni par la table de transition suivante : etat q0 q1 * q2 * q3 q4 a q0 , q2 q3 q3 , q4 q2 b q1 q0 , q2 q2 q1 q3

q0 etat initial ; F = {q2 , q3 }

Par application de lalgorithme, on obtient le tableau de gauche puis en substituant par un nom unique les ensembles d etats on obtient le tableau de droite, table de transition de lautomate ni d eterministe recherch e. 42 NF11

` 5.5. AUTOMATES FINIS ET EXPRESSIONS REGULI ERES

etat q0 q0 , q2 q1 q0 , q2 , q3 , q4 q1 , q2 q3 q1 , q2 , q3 q3 , q4 q2 q2 , q3 , q4 q0 , q1 , q2 q1 , q3 q2 , q3

a q0 , q2 q0 , q2 , q3 , q4 q3 q0 , q2 , q3 , q4 q3 , q4 q2 q2 , q3 , q4 q2 q3 , q4 q2 , q3 , q4 q0 , q2 , q3 , q4 q2 , q3 q2 , q3 , q4

b q1 q1 , q2 q0 , q2 q1 , q2 , q3 q0 , q2 q1 q0 , q1 , q2 q1 , q3 q2 q1 , q2 , q3 q0 , q1 , q2 q0 , q1 , q2 q1 , q2

etat 0 1 2 3 4 5 6 7 8 9 10 11 12

a 1 3 5 3 7 8 9 8 7 9 3 12 9

b 2 4 1 6 1 2 10 11 8 6 10 10 4

0 etat initial ; F = {1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }

5.5.4

Passage dun -AFN ` a un AFD

-fermeture D enition 5.7 L-fermeture dun etat q est lensemble des etats obtenus en suivant des transitions a partir de q. ` R` egles dappartenance : q -fermeture(q) si p -fermeture(q) et sil existe une -transition entre p et un etat r alors r -fermeture(q). D enition 5.8 L-fermeture dun ensemble d etats Q est lensemble des etats obtenus en suivant des -transitions ` a partir de tout etat de Q. Construction de l-fermeture dun ensemble d etats pour tout e Q empiler e dans la pile P initialiser -fermeture(Q) avec Q tant que P est non vide faire d epiler P dans s pour chaque etat q tel quil existe un arc de s vers q si q nest pas dans -fermeture(Q) alors ajouter q dans -fermeture(Q) empiler q dans P Claude Moulin 43

` ETATS CHAPITRE 5. AUTOMATE A FINIS Algorithme Partir de H , l-fermeture de l etat initial. (1) Construire E , lensemble des etats obtenus ` a partir de H par la transition (1) a. D eterminer l-fermeture de E et la r eunir avec E (1) . (1) (1) (1) H = E -fermeture(E ). Recommencer l etape 2 avec les autres transitions et tant quil y a de nouveaux etats cr e es. Tous les nouveaux etats contenant au moins un etat nal sont des etats nals. Renommer les etats obtenus. Exemple Consid erons l-AFN d eni par la table de transition suivante : etat q0 q1 q2 q3 q4 q1 q0 q2 a q2 q3 b q4 q1 c q0 q1 , q4 q3

q0 etat initial ; F = {q4 }

-fermeture({q0 }) = {q0 , q1 } -fermeture({q2 , q3 }) = {q0 , q1 , q2 , q3 } -fermeture({q1 , q4 }) = {q0 , q1 , q2 , q4 } ... etat q0 , q1 q0 , q1 , q2 , q3 q0 , q1 , q2 , q4 q0 , q1 , q2 , q3 , q4 q0 , q0 , q0 , q0 , a q1 , q2 , q1 , q2 , q1 , q2 , q1 , q2 , q3 q3 q3 q3 q0 , q0 , q0 , q0 , b q1 , q2 , q1 , q2 , q1 , q2 , q1 , q2 , q4 q4 q4 q4 c q0 , q1 q0 , q1 , q2 , q4 q0 , q1 , q2 , q3 , q4 q0 , q1 , q2 , q3 , q4

En renommant les etats, on etat 0 1 2 3

obtient : a b c 1 2 0 1 2 2 1 2 3 1 2 3

F = {2, 3}

5.5.5

Conversion dune expression r eguli` ere en -AFN

Th eor` eme 5.3 Tout langage d eni par une expression r eguli` ere est egalement d eni par un automate ni. 44 NF11

` 5.5. AUTOMATES FINIS ET EXPRESSIONS REGULI ERES Si L(R) est le langage d enot e par une expression r eguli` ere R, on d emontre quil existe un -AF N , A, tel que L(A) = L(R). La preuve, bas ee sur les constructions de Thompson, est construite par r ecurrence a partir des expressions r ` eguli` eres de base. Tous les automates construits sont des -AF N ayant un unique etat dacceptation, ce qui nintroduit pas de restriction. Il faut combiner les automates au fur et ` a mesure pour construire des automates composites acceptant les op erations : Union (|) Concat enation Fermeture (*) La gure 5.11 montre les automates correspondant aux expressions de base. a) - L = b) - L = {} c) - L = {a}
eps a

(a)

(b)

(c)

Fig. 5.11 , , symbole La gure 5.12 montre lautomate construit ` a partir de la disjonction de deux expressions r egili` eres.

R eps eps

eps S

eps

Fig. 5.12 R | S

Claude Moulin

45

` ETATS CHAPITRE 5. AUTOMATE A FINIS La gure 5.13 montre lautomate construit ` a partir de la concat enation de deux expressions r egili` eres.
eps

Fig. 5.13 R S La gure 5.14 montre lautomate construit ` a partir de la fermeture dune expression r eguli` ere.
eps eps eps

eps

Fig. 5.14 R*

46

NF11

Chapitre 6 Analyse Lexicale


6.1 R ole dun lanalyseur lexical
Programme source Analyseur lexical unit lexicale
prochaine unit lexicale ?

Analyseur syntaxique

Table des symboles

Fig. 6.1 R ole de lanalyseur lexical

6.1.1

Introduction

Lanalyse lexicale doit permettre de d eterminer correctement les cha nes comprises dans le programme source. Ainsi dans linstruction Pascal suivante : aire := base hauteur/2 Lanalyse lexicale reconna t les lex` emes suivants : aire := base * hauteur / 2 (6.1)

6.1.2

Fonctions de lanalyseur lexical

La t ache principale dun analyseur lexical est de lire les caract` eres dentr ee et produire comme r esultat une suite dunit es lexicales que lanalyseur syntaxique va utiliser. Cest en g en eral un sous-module de lanalyseur syntaxique qui lui commande la prochaine unit e lexicale ` a extraire. Claude Moulin 47

CHAPITRE 6. ANALYSE LEXICALE Autres t aches initialiser la table des symboles. eliminer les commentaires et les s eparateurs. relier les erreurs de compilation au programme source (erreur en ligne ...).

6.1.3

Int er ets de lanalyse lexicale

Conception modulaire plus simple du compilateur. Simplication de l ecriture de lanalyseur syntaxique. Ecacit e accrue du compilateur. Portabilit e accrue (modications de lalphabet dentr ee). Existence de techniques g en erales danalyse lexicale.

6.2
6.2.1

Description
D enitions

D enition 6.1 (Lex` eme) Un lex` eme est une cha ne de caract` eres. D enition 6.2 (Unit e lexicale) Une unit e lexicale est un type de lex` emes (pour la syntaxe). D enition 6.3 (Mod` ele) Un mod` ele est une r` egle d ecrivant les cha nes qui correspondent ` a une unit e lexicale. D enition 6.4 (Attribut) Un attribut est une information additionnelle (pour la s emantique). Un analyseur lexical est un programme qui reconna t des unit es lexicales. Les expressions r eguli` eres permettent dexprimer les unit es lexicales. Donc : Un analyseur lexical est un programme qui reconna t des expressions r eguli` eres. Pour ecrire un analyseur lexical, il sut d ecrire un programme simulant un AFD (automate ni d eterministe).

6.2.2

Exemple

Apr` es lanalyse lexicale de lexpression aire := base * hauteur / 2 La cha ne source est divis ee en tokens lexicaux ou lex` emes gr ace ` a un analyseur 48 NF11

6.3. CONSTRUCTIONS DE LANALYSEUR LEXICAL lexical. lex` emes aire := base * < unit e lexicale Attribut identicateur pointeur vers la table des symboles op-aectation aucun identicateur pointeur vers la table des symboles op-arithm etique code op-relation code

En pratique les unit es lexicales nont quun seul attribut, un pointeur vers la table des symboles dans laquelle linformation sur lunit e lexicale est conserv ee. Les d enitions r eguli` eres qui en permettent lanalyse pourraient etre : lettre [A-Za-z] chire [0-9] chires chire (chire)* identicateur lettre ( lettre | chire )* fraction . chires | exposant E( + | - | ) chires | nombre chires fraction exposant op-aectation := op-relation = | < | > | <> | | op-arithm etique * | / | + | -

6.3
6.3.1

Constructions de lanalyseur lexical


Principe

La gure 6.2 repr esente la d emarche danalyseur lexical. Les unit es lexicales sont d enies par des expressions r eguli` eres. A chaque unit e lexicale u1 , u2 , . . . un est associ e un AFN. Un AFN g en eral est b ati ` a partir de ces AFN.
u1 eps eps eps u2 ... eps eps eps un

Dbut

q0

eps eps

Fig. 6.2 -AFN pour un analyseur lexical

Claude Moulin

49

CHAPITRE 6. ANALYSE LEXICALE

6.3.2

Ecuils

Pr evision Les analyseurs lexicaux sont oblig es pour reconna tre certaines constructions de langages de programmation, de lire des caract` eres en avant au-del` a de la n dun lex` eme avant de d eterminer avec certitude lunit e lexicale correspondante. Ambigu t e Plusieurs mod` eles peuvent repr esenter le m eme lex` eme : . Le prochain token le plus long est celui qui v erie une expression r eguli` ere. . Le premier mod` ele (la premi` ere expression r eguli` ere) qui est v eri e d etermine lunit e lexicale du token (Il y a un ordre dans l ecriture des d enitions r eguli` eres). Les mots cl es sont des mots r eserv es et ne peuvent servir didenticateurs : . Comme les mots-cl es sont des suites de lettres, ils sont des exceptions au mod` ele identicateur. Plut ot que de d enir un mod` ele particulier, une astuce consiste ` a traiter les mots-cl es comme des identicateurs particuliers. On les recherche ` a laide de lex ecution dun code particulier lorsque lautomate se trouve en etat dacceptation. Exemples : . if8 est un identicateur (r` egle du plus long). . if 8 est une erreur (une parenth` ese est en g en eral requise apr` es if). . if est un mot r eserv e.

6.3.3

Compromis : temps dex ecution - place occup ee

Probl` eme : Pour une expression r eguli` ere r, d eterminer si une cha ne x L(r). A laide dun AFN . Temps de construction : O(|r|) . Nombre d etats |r|. . Au plus deux transitions par etat. . Taille de la table : O(|r|) . Temps danalyse O(|r| x |x|). . Plut ot utilis e lorsque les cha nes x ne sont pas tr` es longues A laide dun AFD . On construit dabord un AFN ` a partir de la construction de Thompson, puis on le transforme en AFD. . Gr ace ` a certains algorithmes, on peut simuler lAFD r esultant sur une cha ne x en un temps proportionnel ` a |x| ind ependamment du nombre d etats. Place occup ee : O(2|r| ) 50 NF11

6.3. CONSTRUCTIONS DE LANALYSEUR LEXICAL . Cette approche est avantageuse lorsque les cha nes dentr ee sont longues. Evaluation paresseuse : ne calculer de lAFD que la partie eectivement utilis ee par la cha ne ` a tester. . Bon compromis g en eral.

Claude Moulin

51

CHAPITRE 6. ANALYSE LEXICALE

52

NF11

Chapitre 7 Grammaires hors contexte


7.1
7.1.1

Introduction
Existence de langages non r eguliers

Th eor` eme 7.1 Il existe des langages non r eguliers. Consid erons le langage L01 = {0n 1n | n 1}. Il consiste en un nombre quelconque de 0 suivi du m eme nombre de 1. Ce langage nest pas r egulier. D emonstration rapide Si ce langage est r egulier alors il existe un AFD le d enotant. Cet AFD a un nombre ni d etats (k par exemple). Consid erons lAFD lisant une cha ne commen cant par des 0. Il est possible de trouver deux nombres i et j di erents tels que, i j apr` es avoir lu les pr exes 0 et 0 , lAFD soit dans le m eme etat (sinon lAFD aurait un nombre inni d etats). Consid erons qu` a partir de ce moment, lAFD lise des 1. Sil existait un etat nal, lAFD lattendrait apr` es avoir lu p caract` eres 1. Or p ne pourra etre simultan ement egal ` a i et ` a j.

7.1.2
S S S S S

Exemple : fragment de grammaire

0 1 0S 0 1S 1

Cette grammaire permet de d enir le langage des palindromes sur {0,1}

Claude Moulin

53

CHAPITRE 7. GRAMMAIRES HORS CONTEXTE

7.2

D enition formelle

D enition 7.1 (Grammaire hors contexte - CFG) Une grammaire hors contexte (en anglais Context Free Grammar) est d enie par 4 el ements : T : un alphabet, ensemble ni non vide de symboles permettant de composer les cha nes du langage. Cet alphabet est appel e ensemble des symboles terminaux ou terminaux. V : Un ensemble ni non vide de variables, appel ees non terminaux ou cat egories syntaxiques. T V = . S : une variable particuli` ere appel ee symbole de d epart P : un ensemble ni non vide de r` egles de production . de forme A . o` u A est une variable et une cha ne de 0 ou plus terminaux et variables. . Les parties gauche et droite de la ` eche sont appel ees les t ete et corps de la production. . P {(A,) | A V ; (V T )} Une grammaire G est donc un quadruplet G = (T,V,S,P )

7.2.1

Conventions d ecriture
symboles terminaux variables cha nes de terminaux terminaux ou variables cha nes de terminaux et de variables

Minuscules de d ebut dalphabet (a,b,c) Majuscules de d ebut dalphabet (A,B,C ) Minuscules de n dalphabet (w,x,z ) Majuscules de n dalphabet (W,X,Z ) Lettres grecques (, )

7.3
7.3.1

Exemples
Grammaire des palindromes sur {0,1}

T = {0,1} V = {S } S : symbole de d epart P={ S S 0 S 1 S 0S 0 S 1S 1 } 54 NF11

7.4. DERIVATION

7.3.2

Petit sous-ensemble de la grammaire fran caise

T = { d m, d f, nom m, nom f, vb } V = { PH, GN, N, V, D } S = PH P={ PH GN V GN GN D N N nom m N nom f D d m D d f V vb } Les symboles terminaux sont des identiants dunit es lexicales d enies par exemple par : dm le la df nom m chat nom f balle vb regarde Quelques cha nes syntaxiquement correctes 1. le chat regarde la balle (s emantiquement correct) 2. la balle regarde le chat (s emantiquement incorrect) 3. le chat regarde le balle (accord incorrect) Utilisation des r` egles GN V GN = D N V GN = d m N V GN = d m nom m V GN = d m nom m vb GN = d m nom m vb D N d m nom m vb d f nom f = d m nom m vb d f N = Et apr` es substitution par les lex` emes correspondants : le chat regarde la balle
=

PH

7.4
7.4.1

D erivation
Extension des r` egles de production

Pour d enir le langage engendr e par une grammaire, on d enit chacune des cha nes ainsi : Choisir une r` egle dont la t ete est le symbole de d epart Claude Moulin 55

CHAPITRE 7. GRAMMAIRES HORS CONTEXTE Remplacer une des variables du corps de la cha ne produite par le corps de lune de ses productions Continuer jusqu` a ce que le corps ne contiennent plus que des symboles terminaux Soient G = (T,V,S,P ) une grammaire et A une cha ne telle que : . (V T ) , . (V T ) . AV . et A une production de G alors : . A se d erive selon G en et on ecrit : . A = ou plus simplement A =
G

Il est possible d etendre la relation de d erivation. Pour tout (V T ) on ecrit . =

en

pour repr esenter 0, 1 ou plusieurs pas

. Si = et = alors =

D enition 7.2 (Langage engendr e par une grammaire) Le langage d eni par la grammaire G = (T,V,S,P ) appel e L(G) est lensemble des cha nes d eriv ees du symbole de d epart : L(G) = {w T * | S = w }
G

Remarque importante : Une grammaire d enit un seul langage. Par contre, un m eme langage peut etre engendr e par plusieurs grammaires di erentes. D enition 7.3 (Syntagme) Etant donn ee une grammaire G = (T,V,S,P ), un syntagme est une cha ne de (T V ) telle que S = . D enition 7.4 (D erivation terminale) Une d erivation terminale w est un syntagme appartenant ` a T : S = w (un programme correct).

7.4.2

D erivation la plus ` a gauche, la plus ` a droite

Etant donn e que plusieurs variables peuvent appara tre dans le corps dune r` egle de production, il est possible dimposer le choix de la variable ` a remplacer. On peut ainsi imposer celle gurant le plus ` a gauche (respectivement le plus ` a droite). La d erivation de la section 7.3.2 est une d erivation la plus ` a gauche. Soit la grammaire suivante : 56 NF11

7.4. DERIVATION Symboles terminaux : = {a,b,0,1, + , ,(,)}. Variables : V = {E,I }. Symbole de d epart E . R` egles de production P , telles que : E I E E + E E E E E (E ) I a I b I Ia I Ib I I 0 I I 1 D erivation la plus ` a gauche de : a (b + a0) E = E E = I E = a E = a (E ) = a (E + E ) = a (I + E ) lm lm lm lm lm lm = a (b + E ) = a (b + I ) = a (b + I 0) = a (b + a0)
lm lm lm lm

D erivation la plus ` a droite de : a (b + a0) E = E E = E (E ) = E (E + E ) = E (E + I ) = E (E + I 0) = E (E + a0) rm rm rm rm rm rm = E (I + a0) = E (b + a0) = I (b + a0) = a (b + a0)


rm rm rm rm

7.4.3

Arbre de d erivation

Pour d eterminer si une cha ne terminale appartient au langage engendr e par une grammaire, on etablit un arbre de d erivation dont la racine est laxiome, les feuilles sont des terminaux formant la cha ne donn ee et les nuds sont des variables d ecrivant les r` egles utilis ees. Soit la grammaire suivante : Symboles terminaux : = {a,b,0,1, + , ,(,)}. Variables : V = {E,I }. Symbole de d epart E . R` egles de production P, telles que : E I E E + E E E E E (E ) I a I b I Ia I Ib I I 0 I I 1

Claude Moulin

57

CHAPITRE 7. GRAMMAIRES HORS CONTEXTE La gure 7.1 repr esente larbre de d erivation de lexpression : a (a + b00). La d erivation la plus a ` gauche et la plus ` a droite fournissent le m eme arbre.
E E I a

*
( E I a

E E ) E I I I b 0 0

Fig. 7.1 Arbre de d erivation

D enition 7.5 (Arbre de d erivation) On appelle arbre de d erivation (ou arbre syntaxique), tout arbre tel que : . la racine est le symbole de d epart. . les feuilles sont des symboles terminaux ou . . les nuds sont des non-terminaux. . les ls dun nud X sont Y0 ,Y1 , . . . ,Yn si et seulement si X Y0 Y1 . . . Yn avec les Yi T V.

7.4.4

Ambigu t e

D enition 7.6 (Ambigu t e) Une grammaire G est ambigu e sil existe une cha ne du langage L(G) qui poss` ede plusieurs arbres de d erivation. Exemple de grammaire ambigu e La grammaire suivante : Symboles terminaux : = {id, + , ,(,)}. Variables : V = {E }. Symbole de d epart E . R` egles de production P, telles que : E E + E E E E E (E ) | id est ambigu e. La gure 7.2 montre les deux arbres de d erivation possibles de lexpression : id id + id. E = E E = E E + E = id E + E = id id + E 58 NF11

7.5. FORME DE BACKUS-NAUR


E E id

E E E id + E id E E id * E id

E id

Fig. 7.2 Ambigu t e de la d erivation

id id + id

E = E + E = E E + E = id E + E = id id + E = id id + id

7.5

Forme de BACKUS-NAUR

La notation de Backus-Naur (en anglais Backus-Naur Form, ou BNF) a et e utilis ee d` es 1960 pour d ecrire le langage ALGOL 60, et depuis est employ ee pour d enir de nombreux langages de programmation. L ecriture BNF des r` egles de grammaire est d enie comme suit : Le symbole des r` egles de r e ecriture est remplac e par le symbole ::=. Les symboles d esignant les el ements non-terminaux sont inclus entre un chevron ouvrant < et un chevron fermant >, ceci an de les distinguer des terminaux. Un ensemble de r` egles dont les parties gauches sont identiques, telles que : A ::= 1 A ::= 2 A ::= . . . A ::= p peut etre ecrit de mani` ere abr eg ee : A ::= 1 | 2 | . . . | p Certains auteurs proposent des extensions (forme EBNF) : Lop erateur ? (0 ou 1 fois) Les items optionnels sont plac es entre les m eta symboles [ et ]. Exemple : <if_statement> ::= if <boolean_expression> then <statement_sequence> [ else <statement_sequence> ] end if ; Lop erateur * (0 ou plusieurs fois) Les items ` a r ep eter sont plac es entre les m eta symboles { et }. Exemple : <identifier> ::= <letter> { <letter> | <digit> } Claude Moulin 59

CHAPITRE 7. GRAMMAIRES HORS CONTEXTE

7.6

Types de grammaires

En introduisant des crit` eres plus ou moins restrictifs sur les r` egles de production, on obtient des classes de grammaires hi erarchis ees, ordonn ees par inclusion. La classication des grammaires, d enie en 1957 par Noam CHOMSKY 1 , distingue les quatre classes suivantes : Type 0 Pas de restriction sur les r` egles. Elles sont de la forme ; avec (V T )+ et (V T ) Toute sous-cha ne de peut etre remplac ee par une cha ne quelconque. Type 1 Grammaires sensibles au contexte ou contextuelles (CSG). Les r` egles sont de la forme : A avec A V ; , (V T ) et (V T )+ . Autrement dit, le symbole non terminal A est remplac e par la forme de (V T )+ si les contextes et sont pr esents ` a gauche et ` a droite. Type 2 Grammaires hors-contexte (CFG). Les r` egles sont de la forme : A avec A V et (V T ) . Autrement dit, le membre de gauche de chaque r` egle est constitu e dun seul symbole non terminal. Type 3 Grammaires r eguli` eres ` a droite (respectivement ` a gauche). Les r` egles sont de la forme : A aB , (respectivement A Ba) avec A,B V et a T . ou de la forme : A a avec A V et a T . Autrement dit, le membre de gauche de chaque r` egle est constitu e dun seul symbole non terminal, et le membre de droite est constitu e dun symbole terminal eventuellement suivi (respectivement pr ec ed e) dun seul non terminal.

7.7

Expression r eguli` ere sous forme de grammaire

Th eor` eme 7.2 Pour toute expression r eguli` ere R, il existe une grammaire G telle que L(G) = L(R).
1. Bibliographie : http://web.mit.edu/linguistics/www/biography/noambio.html

60

NF11

7.8. EQUIVALENCE La d emonstration se fait par r ecurrence sur le nombre n dop erateurs de lexpression r eguli` ere. Soit R une expression r eguli` ere sur un alphabet . n=0 R = ou R = ou R = x o` ux On cr ee un symbole S et une grammaire G = (T,V,S,P ) ayant au plus une r` egle de d erivation : T = , V = {S} R = , pas de r` egle, L(G) = R = , 1 r` egle, S , L(G) = {} R = x, 1 r` egle, S x, L(G) = {x} n0 On suppose lhypoth` ese de r ecurrence vraie pour des expressions comportant au plus n occurrences dop erateurs. Soit R une expressions ayant n+1 occurrences dop erateurs. R = R1 |R2 ou R = R1 R2 ou R = R1 o` u R1 et R2 poss` edent au plus n occurrences dop erateurs. Selon lhypoth` ese de r ecurrence : il existe G1 = (T,V1 ,S1 ,P1 ) et G2 = (T,V2 ,S2 ,P2 ) telles que L(R1 ) = L(G1 ) et L(R2 ) = L(G2 ) (si G1 et G2 nont pas le m eme ensemble de terminaux, T est pris comme la r eunion de ces ensembles). Il est possible de construire G1 et G2 telles que V1 V2 = , en renommant eventuellement quelques variables. R = R1 | R2 Soit G = (T,V,S,P ) telle que : V = V1 V2 {S } P = P1 P2 P o` u P contient la r` egle : S S1 |S2 L( G ) = L( R 1 ) L( R 2 ) R = R1 R2 Soit G = (T,V,S,P ) telle que : V = V1 V2 {S } P = P1 P2 P o` u P contient la r` egle : S S1 S2 L( G ) = L( R 1 ) L( R 2 ) R = R1 Soit G = (T,V,S,P ) telle que : V = V1 {S } P = P1 P o` u P contient la r` egle : S S1 S | L( G ) = L( R 1 )

7.8

Equivalence

Th eor` eme 7.3 Etant donn ees une grammaire G = (T,V,S,P ), une variable A et une cha ne de terminaux w, les quatre propositions suivantes sont equivalentes : . A = w . A = w
lm

. A = w
rm

Claude Moulin

61

CHAPITRE 7. GRAMMAIRES HORS CONTEXTE . Il existe un arbre de d erivation de racine A et qui produit w Remarque : le th eor` eme est egalement vrai si w est remplac ee par une cha ne de T V

7.9

Types danalyse

Il existe deux grandes classes de techniques di erentes pour construire un arbre syntaxique et v erier si une cha ne appartient au langage. Lanalyse de la cha ne se fait toujours de la gauche vers la droite (Left scanning). Lapproche descendante. Un analyseur gauche construit larbre de d erivation a partir de sa racine et en eectuant des d ` erivations en consid erant la t ete des r` egles de production et en faisant des d erivations les plus ` a gauche. Cest la famille des analyseurs LL (left scanning, leftmost derivation). Lapproche ascendante. Un analyseur droit construit larbre de d erivation ` a partir de ses feuilles et en eectuant des d erivations en consid erant la partie droite des r` egles de production et en faisant des d erivations les plus ` a droite. Cest la famille des analyseurs LR (left scanning, rightmost derivation).

7.9.1

Exemple danalyse

Soit la grammaire G suivante : T = {a,c,d} V = {S,T } P ={ 1. 2. 3. 4. 5. 6. } Consid erons la cha ne : w = accbbadbc. S S S T T T aSbT cT d aT bS c

7.9.2

Analyse LL
= 6

La d erivation permettant de construire larbre est la suivante : S = aSbT = acT bT = accbT = accbbS = accbbaSbT = accbbadbT
1 2 6 5 1 3

accbbadbc NF11

62

7.9. TYPES DANALYSE

7.9.3

Analyse LR
= 1

Pour le m eme exemple une analyse ascendante donnerait : accbbadbc = acT bbadbc = aSbbadbc = aSbbaSbc = aSbbaSbT 6 3 2 6 = aSbT =S
5 1

aSbbS

Claude Moulin

63

CHAPITRE 7. GRAMMAIRES HORS CONTEXTE

64

NF11

Chapitre 8 Automates ` a piles


8.1
8.1.1

Introduction
Fonctionnement sch ematique

Un automate ` a pile est un automate (en g en eral non d eterministe) ayant la capacit e en plus de pouvoir g erer une pile de symboles. Cela permet ` a lautomate de m emoriser un nombre important dinformations. Lacc` es ` a linformation est cependant de type Last In First Out. Ces automates ne reconnaissent quun certain type de langages, ceux g en er es par les grammaires hors contexte.

Entre

Contrle

Acceptation / Rejet

Pile

Fig. 8.1 Suggestion dun automate ` a pile

La gure 8.1 montre le fonctionnement sch ematique dun automate ` a pile. Le contr ole de lautomate ` a pile lit un ` a un les symboles dentr ee. Il base sa transition sur son etat courant, le prochain symbole dentr ee et le symbole en sommet de pile. Il peut faire des transitions spontan ees consumant au lieu du prochain symbole dentr ee. Claude Moulin 65

` PILES CHAPITRE 8. AUTOMATES A

8.1.2

Exemple

eterminons un autoConsid erons le langage LwcwR = {wcwR ; w (0|1)}. D mate ` a pile permettant de reconna tre les mots de ce langage. Sa strat egie sera de stocker dans la pile les 0 et les 1 tant quil na pas rencontr e le marqueur central (c). Il d epilera ensuite les symboles a ` condition quils correspondent aux caract` eres dentr ee. Sil r eussit ` a vider la pile sans quil reste de caract` eres ` a traiter, alors il accepte la cha ne en entr ee. La gure 8.2 simule le fonctionnement de lautomate sur la cha ne 10c01, faisant partie du langage LwcwR .
( q0, 10c01 , Z
0

empile

( q0, 0c01 , 1Z ( q0, c01 , 01Z

empile milieu atteint

0 )

( q1, 01 , 01Z ( q 1, 1, 1Z

dpile

dpile

( q1, eps , Z 0 ) ( q 2, eps , Z 0 ) succs

Fig. 8.2 Simulation de lautomate La gure 8.3 repr esente le diagramme de transition de cet automate.
0, Z0 / 0 Z0 1, Z0 / 1 Z0 0, 0 / 0 0 0, 1 / 0 1 1, 0 / 1 0 1, 1 / 1 1 Dbut

0, 0 / eps 1,1 / eps

q0
c, Z0 c, 0 c, 1

q1
/ Z0 /0 /1
eps,

q2
Z0 / Z0

Fig. 8.3 Diagramme de transition

66

NF11

8.2. DEFINITION FORMELLE

8.2
8.2.1

D enition formelle
D enition

D enition 8.1 (Automate ni ` a pile - AFP) Un automate ni ` a pile comprend sept composants : P = (Q,,,,q0 ,Z0 ,F ) Q est un ensemble ni d etats est un ensemble ni de symboles dentr ee est un ensemble ni dit alphabet de pile. Cest lensemble des symboles qui peuvent etre empil es est la fonction de transition. Elle prend en argument trois param` etres : q un etat de Q a un symbole dentr ee ou X un symbole de pile Elle renvoie un ensemble ni de couples (p, ) o` u p est le nouvel etat et est la nouvelle cha ne de symboles qui remplace X au sommet de la pile. q0 est l etat initial Z0 est le symbole de d epart de la pile F est lensemble des etats nals

8.2.2

R` egles de transition

Lors dune transition lautomate : . consume le symbole utilis e dans la transition. Si est utilis e aucun symbole dentr e nest consum e. . passe dans un nouvel etat qui peut etre le m eme que le pr ec edent. . remplace le symbole au sommet de la pile par un nombre quelconque de symboles. Cette cha ne de symboles peut etre : . ; ce qui correspond ` a un d epilement (pop). . le m eme symbole que le sommet actuel ; aucun changement dans la pile. . un autre symbole (pop du sommet suivi de push). . une suite de symboles ; d epilement du sommet (pop) et empilement (push) des symboles.

8.2.3

Automate ` a pile d eterministe

Un automate ` a pile est d eterministe sil nexiste pas dalternative de d eplacement dans aucune situation. Un automate ` a pile P = (Q,,,,q0 ,Z0 ,F ) est d eterministe, si et seulement si : (q,a,X ) contient au plus un el ement, pour tout etat q Q, a ou a = et X . si (q,a,X ) est non vide pour un el ement a , alors (q,,X ) doit etre vide. Claude Moulin 67

` PILES CHAPITRE 8. AUTOMATES A

8.3

Exemple

Consid erons le langage qui accepte les cha nes palindromes de longueur paire sur r lalphabet = {0,1}. Lwwr = {ww |w } Un AFP qui engendre ce langage peut etre d ecrit par : P = ({q0 ,q1 ,q2 },{0,1},{0,1,Z0 },,q0 ,Z0 ,{q2 }) La fonction est d enie par les egalit es suivantes. Le fond de la pile est ` a droite : (q0 ,0,Z0 ) = (q0 ,1,Z0 ) = (q0 ,0,0) = (q0 ,0,1) = (q0 ,1,0) = (q0 ,1,1) = (q0 ,,Z0 ) = (q0 ,,0) = (q0 ,,1) = (q1 ,0,0) = (q1 ,1,1) = (q1 ,,Z0 ) = Il est ` a remarquer que cet {(q0 ,0Z0 )} {(q0 ,1Z0 )} lecture, empilement {(q0 ,00)} {(q0 ,01)} {(q0 ,10)} {(q0 ,11)} lecture, empilement {(q1 ,Z0 )} {(q1 ,0)} pas de lecture {(q1 ,1)} pile inchang ee {(q1 ,)} d epilement si le sommet de pile {(q1 ,)} correspond ` a la lecture {(q2 ,Z0 )} fond de pile etat nal automate nest pas d eterministe.

8.3.1

Diagramme de transition

Le diagramme de transition illustr e sur le gure 8.4 g en eralise celui d eni pour les automates nis. Il comporte : Un ensemble de nuds correspondant aux etats de lAFP. Une ` eche etiquet ee d ebut indiquant l etat initial. Un etat nal est indiqu e par deux cercles concentriques. Les arcs correspondent aux transitions. Un arc etiquet e a,X/ de l etat q vers l etat p signie que (q,a,X ) contient le couple (p,), parmi dautres couples. L etiquette de larc indique ce qui est utilis e et les ancien et nouveau sommets de la pile. Il faut convenir du symbole de fond de pile (par d efaut Z0 ).

8.3.2

Simulation

La gure 8.5 simule une s equence enti` ere du fonctionnement de lautomate ` a pile ` partir de lentr a ee 1111. La conguration initiale est (q0 , 1111 , Z0 ). Lautomate a lopportunit e de se tromper plusieurs fois. A partir de la conguration initiale, lautomate a deux choix possibles : Estimer que le milieu de la cha ne na pas et e atteint. Cela conduit ` a la conguration : (q0 , 111 , 1Z0 ). 68 NF11

8.4. EXTENSION DE LA FONCTION DE TRANSITION


0, Z0 / 0 Z0 1, Z0 / 1 Z0 0, 0 / 0 0 0, 1 / 0 1 1, 0 / 1 0 1, 1 / 1 1 Dbut

0, 0 / eps 1,1 / eps

q0
eps, Z0 eps, 0 eps, 1

q1
/ Z0 /0 /1
eps,

q2
Z0 / Z0

Fig. 8.4 Diagramme de transition g en eralis e

Estimer que le milieu de la cha ne a et e atteint. Cela conduit ` a la conguration : (q1 , 1111 , Z0 ).
( q0, 1111 , Z ( q0, 111 , 1Z ( q0, 11 , 11Z ( q0, 1 , 111Z ) ) ) ) milieu atteint

( q1, 1111 , Z ( q1, 111 , 1Z ( q1, 11 , 11Z ( q1, 1 , 111Z

) ) ) )

( q2, 1111 , Z ( q1, 11 , Z ( q2, 11 , Z ( q1, 1 , 1Z

impasse

) ) ) impasse

( q0, eps , 1111Z 0 ) ( q0, eps , 1111Z 0 ) impasse

( q1, eps , 11Z 0 ) impasse

( q1, eps , Z 0 ) ( q2, eps , Z 0 ) succs

Fig. 8.5 Simulation du fonctionnement de lautomate

8.4
8.4.1

Extension de la fonction de transition


Conguration

Un AFP passe de conguration en conguration en r eponse aux symboles dentr ee ou . Une conguration comprend l etat actuel de lautomate ainsi que le contenu Claude Moulin 69

` PILES CHAPITRE 8. AUTOMATES A de la pile. D enition 8.2 (Conguration) Une conguration dun AFP est un triplet (q,w, ) o` u: . q est l etat de la conguration. . w est la cha ne dentr ee restant ` a analyser. . est le contenu de la pile.

8.4.2

D enition
P

Soit P = (Q,,,,q0 ,Z0 ,F ) un automate ` a pile, on symbolise par , lorsque lautomate est sous-entendu, la fonction d enie par : . On suppose que (q,a,X ) contienne (p,) . w : (q,aw,X ) (p,w, )

ou seulement

Ce qui signie que, en consumant le symbole dentr ee a (ce pourrait etre eventuellement ) et en rempla cant X au sommet de la pile par , lautomate passe de l etat q ` a l etat p. On utilise ou plus simplement pour repr esenter un ou plusieurs pas de lautoP mate. G en eralisation I I

I J sil existe K tel que I

K et K J

8.5

Langage dun automate ` a pile

Le langage dun automate ` a pile peut etre d eni de deux fa cons selon le type dacceptation de lautomate.

8.5.1

Acceptation par etat nal

Lautomate reconna t une cha ne sil a consum e tous les symboles dentr ee et sil se trouve dans un etat nal. La pile peut etre vide ou non. D enition 8.3 (Acceptation par etat nal) Soit P = (Q,,,,q0 ,Z0 ,F ) un AFP. Le langage accept e par P par etat nal est : (q,,)} L(P ) = {w | (q0 ,w,Z0 ) P o` u q est un etat nal et une suite quelconque de symboles. 70 NF11

` PILE 8.5. LANGAGE DUN AUTOMATE A

8.5.2

Acceptation par pile vide

Lautomate reconna t une cha ne sil a consum e tous les symboles dentr ee et si la pile est vide. D enition 8.4 (Acceptation par pile vide) Soit P = (Q,,,,q0 ,Z0 ,F ) un AFP. Le langage accept e par P par pile vide est : N (P ) = {w | (q0 ,w,Z0 ) (q,,)} P o` u q est un etat quelconque.

8.5.3

Th eor` emes

Automate par pile vide

Grammaire Hors Contexte

Automate par tat final

Fig. 8.6 Equivalence : grammaire - automate La classe des langages qui sont L(P ) est la m eme que la classe des langages N (P ). Cest aussi la classe des langages hors contexte (cf. gure 8.6). Th eor` eme 8.1 Si L = N (PN ) pour un automate ` a pile PN = (Q,,,N ,q0 ,Z0 ,F ) alors il existe un automate ` a pile PF tel que L = L(PF ). Th eor` eme 8.2 Si L = L(PF ) pour un automate ` a pile PF = (Q,,,F ,q0 ,Z0 ,F ) alors il existe un automate ` a pile PN tel que L = N (PN ). Th eor` eme 8.3 Etant donn ee une grammaire hors contexte G, il est possible de construire un automate ` a pile P tel que N (P ) = L(G). Th eor` eme 8.4 Soit P = (Q,,,,q0 ,Z0 ,F ) un AFP. Il existe une grammaire hors contexte G telle que L(G) = N (P ). Claude Moulin 71

` PILES CHAPITRE 8. AUTOMATES A

72

NF11

Chapitre 9 Analyse Syntaxique Descendante


9.1 Introduction

Un analyseur syntaxique prend en entr ee une cha ne dunit es lexicales fournie par lanalyseur lexical et d etermine si celle-ci fait partie du langage en construisant larbre syntaxique correspondant. Il doit donc ecrire une d erivation, cest-` a dire la suite des r` egles de production ` a utiliser pour obtenir la cha ne en entr ee. Si G est une grammaire hors contexte pour un langage de programmation alors L(G) est lensemble de tous les programmes que lon peut ecrire dans ce langage. Les symboles terminaux de la grammaire sont des unit es lexicales qui ont une repr esentation sous forme de cha nes de caract` eres que lon peut saisir au clavier et qui sont imprimables. Pour lanalyse on ajoute g en eralement une variable S qui devient le nouvel axiome de la grammaire, un terminal $ d esignant la n de cha ne et une nouvelle r` egle de production S S $.

9.2
9.2.1

Analyseur descendant LL(1)


Probl ematique

Etant donn e un non terminal A, un symbole dentr ee a, ` a la position p de lentr ee, un analyseur descendant doit d ecider de la r` egle ` a appliquer pour que le sous-arbre etiquet e A soit le sous-arbre correct ` a la position p. Une premi` ere id ee consiste ` a essayer toutes les r` egles. La premi` ere r` egle qui fonctionne est la bonne. On peut m emoriser ainsi la bonne d erivation pour les autres occurrences de A. Ce proc ed e ne permet cependant pas de reconna tre toutes les cha nes du langage. Le plus simple est de cr eer au pr ealable une table donnant la r` egle ` a appliquer connaissant A et a. On construit alors ce que lon appelle un analyseur pr edictif. Claude Moulin 73

CHAPITRE 9. ANALYSE SYNTAXIQUE DESCENDANTE

w a ..... PREM(A)

b SUIV(A)

Fig. 9.1 Pr ediction

D ebut de r esolution Une r` egle telle que A X1 X2 . . . Xn permet de dire que les premiers symboles que peux g en erer A contiennent ceux que peut g en erer X1 . Mais si X1 est nulliable (pouvant g en erer ), il faut consid erer aussi ceux que peut g en erer X2 . Et ainsi de suite. Si X1 ne g en` ere pas , wA = wX1 X2 . . . Xn = wa1 w1 X2 . . . Xn . Si X1 g en` ere et X2 ne g en` ere pas , on aura : wA = wX1 X2 . . . Xn = wX2 . . . Xn = wa2 w2 X3 . . . Xn .
Si A = , wA = w . Il faut ainsi prendre en compte les premiers symboles terminaux que peut g en erer et qui sont en fait des symboles qui peuvent suivre A. On est donc amen e` a prendre en compte et ` a calculer les premiers de chaque cha ne de symboles apparaissant dans la partie droite dune r` egle de production ainsi que les suivants de chacune des variables.

Illustration Les sections suivantes sont illustr ees ` a partir de la grammaire d enie par : T = {+, , ,/,(,),nb} ; V = {E,E ,T,T ,F } ; Axiome : E ; P ={ 1. E T E 2. E +T E 3. E T E 4. E 5. T F T 6. T F T 7. T /F T 8. T 74 NF11

9.2. ANALYSEUR DESCENDANT LL(1) 9. F (E ) 10. F nb }

9.2.2

Premiers

D enition 9.1 (Choix) On appelle choix toute cha ne d el ements de V T pouvant gurer dans la partie droite dune r` egle de production. D enition 9.2 (Fin de choix) Une n de choix est une cha ne de 0 ou plus el ements de V T telle quil existe A V T tel que A soit un choix ou une n de choix. D enition 9.3 (PREM) Soit X V T . PREM(X ) est lensemble des terminaux (y compris ) qui peuvent commencer une cha ne d eriv ee de X . a P REM (X ), si X = a . Soit un choix ou une n de choix. PREM() est lensemble des terminaux (y compris ) qui peuvent commencer une cha ne d eriv ee de . a PREM(), si = a Initialisation . . . . a T , PREM(a) = {a}. A V , PREM(A) = . Pour tout choix ou n de choix non vide, PREM() = . PREM() = .

Algorithme de construction des PREM() . Pour chaque r` egle de production A , ajouter les el ements de PREM() a ceux de PREM(A) y compris . ` . Pour chaque choix ou n de choix de la forme X , ajouter les el ements de PREM(X ) ` a ceux de PREM(X ), sauf . - Lorsque PREM(X ) contient , ajouter les el ements de PREM( ) ` a ceux de PREM() y compris . R ep eter les phases pr ec edentes tant que lun des PREM() est modi e.

Choix commen cant par un terminal Soit un choix de la forme a, a T , le seul caract` ere pouvant commencer ce choix est a. P REM (a) = P REM (a) = a. Claude Moulin 75

CHAPITRE 9. ANALYSE SYNTAXIQUE DESCENDANTE Choix dont les premiers sont imm ediats +TE -TE *FT /FT (E) {+} {} {} {/} {(}

Construction des premiers des autres choix E TE E T FT T F E) Init 1 2 3 {nb,(} {} {nb} {} {nb} {, + ,} {nb,(} {nb,(} {, ,/,} {nb,(} {nb,(} 4 {nb,(} PREM() {nb,(} {nb,(} {, + ,} {nb,(} {nb,(} {, ,/,} {nb,(} {nb,(}

9.2.3

Suivants

Les suivants sont d enis pour tous les non terminaux dune grammaire. D enition 9.4 (SUIV) Soit X V . SUIV(X ) est lensemble des terminaux qui peuvent suivre imm ediatement X dans une d erivation. a SUIV(X ) sil existe un choix contenant Xa. Si un choix contient XY a et que Y est nulliable alors a est un suivant de X . Initialisation . Pour toute variable A, SUIV(A) = . . Ajouter un marqueur de n de cha ne ` a laxiome ($ par exemple). . Calculer les premiers pour tous les choix et ns de choix de la grammaire. Algorithme 1. Pour chaque r` egle A B , ajouter les el ements de PREM( ) ` a ceux de SUIV(B ), sauf le cas ech eant. 2. Pour chaque r` egle A B , ajouter les el ements de SUIV(A) aux el ements de SUIV(B ). 3. Pour chaque r` egle A B , lorsque PREM( ), ajouter les el ements de SUIV(A) aux el ements de SUIV(B ). R ep eter les phases 2 et 3 tant que lun des SUIV(A) est modi e.

76

NF11

9.2. ANALYSEUR DESCENDANT LL(1) Illustration E E T T F Init 1 {$,)} {$,)} {+, ,$} {+, ,$} {,/, + , ,$} 2 3 SUIV(A) {),$} {$,)} {+, ,$,)} {+, ,$,)} {,/, + , ,$,)}

{+, ,$,)} {+, ,$,)} {,/, + , ,$,)}

9.2.4

Table danalyse

D enition 9.5 (Table danalyse) Une table danalyse est un tableau M ` a deux dimensions qui indique, pour chaque variable A et chaque terminal a (ainsi que $), la r` egle de production ` a appliquer. Algorithme de construction Pour chaque production A pour tout a PREM() et a = ajouter A dans la case M[A,a] si PREM(), alors pour chaque b SUIV(A), ajouter A dans la case M[A,b] Une case vide qui devrait etre utilis ee lors de lanalyse correspond ` a une erreur de syntaxe. Illustration + E E T T F 2 8 3 5 8 6 7 9 8 10 * / ( 1 ) 4 5 8 nb 1 $ 4

9.2.5

Simulation par un automate ` a pile


lautomate P = (Q,,,,q0 ,Z0 ,F ) d eni par : lensemble des etats. lensemble des symboles dentr ee. lalphabet de pile. la fonction de transition. l etat initial. le symbole de d epart de la pile. acceptation par pile vide. 77

On consid` ere Q = {q } = T = T V q0 = q Z0 = $ F = Claude Moulin

CHAPITRE 9. ANALYSE SYNTAXIQUE DESCENDANTE est d eni par les transitions suivantes (auxquelles on ajoute un param` etre de sortie pour rendre compte des r` egles utilis ees) : Match : (q,ax,a,y ) (q,x,,y ) Le symbole dentr ee est le symbole de sommet de la pile. Il est consum e et le sommet de la pile est d epil e. Production : (q,x,A,y ) (q,x,,yyi ) Le sommet de la pile est une variable A. Il existe une r` egle de production : A donn ee par M[A,b] o` u b est le premier symbole de x. Dans ce cas, A est remplac e au sommet de la pile par le choix de la r` egle, en empilant ` a partir des symboles les plus ` a droite. En sortie, le rang yi de la r` egle utilis ee, est ajout e. Acceptation : (q,$,$,y ) (q,,,y )

Illustration La table suivante illustre les transitions successives de lautomate ` a partir de la cha ne dentr ee : 3 + 4 * 5. Lanalyseur lexical substitue nb ` a chaque nombre de la cha ne pour communiquer nb + nb * nb, mais pour une meilleure lisibilit e, la cha ne dentr ee est laiss ee intacte. Le fond de la pile est ` a droite. Laxiome est empil e. Entr ee + 4 * 5$ + 4 * 5$ + 4 * 5$ + 4 * 5$ + 4 * 5$ + 4 * 5$ + 4 * 5$ 4 * 5$ 4 * 5$ 4 * 5$ * 5$ * 5$ 5$ 5$ $ $ $ Pile E$ TE$ FTE$ nb TE$ TE$ E$ +TE$ TE$ FTE$ nb TE$ TE$ *FTE$ FTE$ nb TE$ TE$ E$ $ Transition Production Production Production Match Production Production Match Production Production Match Production Match Production Match Production Production Accept Sortie 1 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

3 3 3 3

10 10 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,

8 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,

2 2 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

5 5, 5, 5, 5, 5, 5, 5, 5, 5,

10 10 10, 10, 10, 10, 10, 10, 10,

6 6 6, 6, 6, 6, 6,

10 10 10, 8 10, 8, 4 10, 8, 4

Il est simple de construire larbre danalyse au fur et ` a mesure de la sortie de lautomate. 78 NF11

9.3. GRAMMAIRE LL(1) Une table plus simple est parfois susante. Elle ne fait appara tre en sortie que la r` egle de production utilis ee : Entr ee + 4 * 5$ + 4 * 5$ + 4 * 5$ + 4 * 5$ + 4 * 5$ + 4 * 5$ + 4 * 5$ 4 * 5$ 4 * 5$ 4 * 5$ * 5$ * 5$ 5$ 5$ $ $ $ Pile E$ TE$ FTE$ nb TE$ TE$ E$ +TE$ TE$ FTE$ nb TE$ TE$ *FTE$ FTE$ nb TE$ TE$ E$ $ Sortie E TE T FT F nb T T +TE T FT F nb T *FT F nb T E Acceptation

3 3 3 3

9.3

Grammaire LL(1)

Toutes les grammaires ne permettent pas de construire une table danalyse. Certaines font appara tre plusieurs r` egles pour un couple (A , a) de la table. D enition 9.6 (Grammaire LL(1)) Une grammaire est dite LL(1) lorsque sa table danalyse ne comporte pas plusieurs r` egles de production pour une m eme case. Th eor` eme 9.1 Une grammaire ambigu e, r ecursive ` a gauche ou non factoris ee ` a gauche nest pas LL(1). Lorsquune grammaire nest pas LL(1), il nexiste quune alternative : essayer de la rendre LL(1) ou choisir un analyseur syntaxique de nature di erente.

9.3.1

R ecursivit e` a gauche

D enition 9.7 (Grammaire propre) Une grammaire est propre si elle ne contient aucune r` egle de la forme : A . D enition 9.8 (Grammaire imm ediatement r ecursive ` a gauche) Une grammaire est imm ediatement r ecursive ` a gauche si elle contient une r` egle de la forme : A A. Claude Moulin 79

CHAPITRE 9. ANALYSE SYNTAXIQUE DESCENDANTE Une telle grammaire poss` ede une r` egle de la forme : A , sinon la r` egle pr ec edente ne serait pas utilisable. Pour chaque premier( ), il existe au moins deux r` egles applicables. La grammaire nest pas LL(1). D enition 9.9 (Grammaire r ecursive ` a gauche) Une grammaire est r ecursive ` a gauche si elle contient une variable A se d erivant en A (A = A). Une telle grammaire nest pas LL(1) pour la m eme raison que pour la r ecursivit e` a gauche imm ediate. Une grammaire peut poss eder une r ecursivit e` a gauche cach ee. Cest le cas lorsque : A = A et = Elimination de la r ecursivit e` a gauche imm ediate On observe que A A et A , permettent de d eduire que A produit des cha nes de la forme : . Pour eliminer la r ecursivit e` a gauche imm ediate, il sut dajouter une variable A et de remplacer les r` egles telles que : . A A . A par les r` egles : . A A . A A | Elimination de la r ecursivit e` a gauche Lorsque la grammaire est propre, lalgorithme suivant permet d eliminer la r ecursivit e` a gauche : Ordonner les non terminaux en A1 , A2 , . . . An . Pour i de 1 ` an Pour j de 1 ` ai-1 Remplacer les productions Ai Aj o` u Aj 1 |2 | . . . |p par Ai 1 |2 | . . . |p Eliminer la r ecursivit e` a gauche imm ediate des productions concernant Aj

9.3.2

Factorisation ` a gauche

D enition 9.10 (Grammaire non factoris ee ` a gauche) Une grammaire nest pas factoris ee a ` gauche lorsque deux choix dune m eme variable commencent par le m eme symbole. 80 NF11

9.4. CONFLITS A X et A X sont deux r` egles applicables pour chaque prem(X). La grammaire nest pas LL(1). Lalgorithme suivant permet de factoriser ` a gauche une grammaire : Pour chaque variable A Trouver le plus long pr exe commun ` a deux ou plusieurs de ses choix si = Remplacer A 1 | . . . |n |1 | . . . |p (les i ne commencent pas par ) par : A A |1 | . . . |p A 1 | . . . |n Recommencer tant que deux productions commencent par le m eme symbole

9.4
9.4.1

Conits
Conit Premier-Premier

Exemple 1 La grammaire d enie par les r` egles suivantes pr esente un conit. 1. S aAb 2. A cd 3. A ce Le tableau suivant donne les premiers et suivants des variables de la grammaire : PREM(S) = { a } SUIV(S) = {$} PREM(A) = { c } SUIV(A) = {b} La table danalyse est donn ee par : a S 1 A b c 2; 3
S a A b

Entre : acdb

Fig. 9.2 Conit : premier-premier La table pr esente un conit premier-premier ` a cause de la non-factorisation ` a gauche de la grammaire. La gure 9.2 montre le conit lors de lanalyse de la cha ne acdb. Exemple 2 La grammaire d enie par les r` egles suivantes pr esente egalement un conit premierClaude Moulin 81

CHAPITRE 9. ANALYSE SYNTAXIQUE DESCENDANTE premier. 1. S aT d 2. T T b 3. T c Le tableau suivant donne les premiers et suivants des variables de la grammaire : PREM(S) = { a } SUIV(S) = {$} PREM(T) = { c } SUIV(T) = {b, d} La table danalyse est donn ee par : a S 1 T b 2; 3
S a T d

c d

Entre : acbd

Fig. 9.3 Conit : premier-premier - R ecursivit e La table pr esente un conit prem-prem ` a cause de la r ecursivit e ` a gauche de la grammaire. La gure 9.3 montre le conit lors de lanalyse de la cha ne acbd. Lookahead(k) Pour lever un conit premier-premier, on peut indiquer un lookahead > pour un non terminal particulier. Lorsque deux r` egles entrent en conit, on consid` ere alors les k prochains caract` eres de la cha ne dentr ee.

9.4.2

Conit Premier-Suivant

Exemple 3 La grammaire d enie par les r` egles suivantes pr esente un conit premier-suivant. 1. S aT b 2. T bT 3. T Le tableau suivant donne les premiers et suivants des variables de la grammaire : PREM(S) = { a } SUIV(S) = {$} PREM(T) = { b, } SUIV(T) = {b} La table danalyse est donn ee par : S T 82 a 1 b 2; 3 NF11 $

9.4. CONFLITS

Entre : abb a

S T b

Fig. 9.4 Conit : premier-suivant La table pr esente un conit premier-suivant ` a cause de la variable T. T est nulliable et PREM(T) SUIV(T) = . La gure 9.4 montre le conit lors de lanalyse de la cha ne abb. Exemple 4 La grammaire d enie par les r` egles suivantes ne pr esente pas de conit bien quune variable soit nulliable. 1. S aT b 2. T cT 3. T Le tableau suivant donne les premiers et suivants des variables de la grammaire : PREM(S) = { a } SUIV(S) = {$} PREM(T) = { c, } SUIV(T) = {b} La table danalyse est donn ee par : S T a 1 b 3 c 2 $

La table ne pr esente pas de conit bien que T soit nulliable. Choix arbitraire Lorsque deux r` egles entrent en conit, il est possible egalement de choisir arbitrairement la r` egle applicable. On choisira par exemple, la premi` ere gurant dans la grammaire.

9.4.3

Conclusion

Une grammaire est LL(1) lorsque : 1. Il ny a pas de conit Premier-Premier. Pour chaque non terminal, les premiers des choix doivent etre tous distincts. 2. Il ny a pas de conit Premier-Suivant. Pour chaque non terminal ayant un choix nulliable, les Premier et Suivant doivent etre distincts. 3. Il ny a pas de choix nulliables multiples.

Claude Moulin

83

CHAPITRE 9. ANALYSE SYNTAXIQUE DESCENDANTE

84

NF11

Chapitre 10 Analyse Ascendante LR(0)


10.1 Principe danalyse ascendante

Lanalyse ascendante ou par d ecalage r eduction a pour but de construire un arbre danalyse pour une cha ne dentr ee donn ee w ` a partir de ses feuilles. La racine est construite apr` es que tous les nuds inf erieurs ont et e construits. A chaque etape de r eduction une sous-cha ne correspondant ` a la partie droite dune r` egle de production est remplac ee par la variable de la partie gauche.

10.1.1

Exemple danalyse

Soit la grammaire G suivante : T = {a,b,c,d} V = {S,T } P ={ 1. S aSbT 2. S cT 3. S d 4. T aT 5. T bS 6. T c } La cha ne w = accbbadbc peut etre r eduite vers S par les etapes suivantes : accbbadbc acT bbadbc aSbbadbc aSbbaSbc aSbbaSbT aSbbS aSbT S

Claude Moulin

85

CHAPITRE 10. ANALYSE ASCENDANTE LR(0)

10.1.2

D ecalage - R eduction

Sur cette cha ne w = accbbadbc, les d ecalages - r eductions sont explicit es par la table :

accbbadbc

d ecalage d ecalage d ecalage r eduction par T c d ecalage d ecalage d ecalage d ecalage

aSbbadb c

r eduction par S d d ecalage d ecalage r eduction par T c r eduction par S aSbT r eduction par T bS r eduction par S aSbT

ac cbbadbc acc bbadbc

aSbbaS b c

aSbbaSbc aSbbaSbc

accb badbc

acT b badbc r eduction par S cT aS b badbc

aSbbaSbT aSbbS aSbT S

aSbb adbc

aSbbadbc

aSbbadbc

Ce qui donne la d erivation droite suivante : S = aSbT


=

aSbbS = aSbbaSbT

aSbbaSbc = aSbbadbc = acT bbadbc = accbbadbc

10.1.3

M ethodes danalyse

Il est ` a peu pr` es impossible d ecrire un analyseur ascendant ` a la main. Il faut pour cela utiliser un g en erateur danalyseur. Il existe plusieurs algorithmes danalyse ascendante, di erents principalement dans leur premi` ere partie ; la n de lanalyse etant ensuite la m eme pour chaque algorithme. Les principales m ethodes sont : LR(0) : th eoriquement importante mais trop faible SLR(1) : version renforc ee de LR(0) mais assez faible LR(1) : tr` es puissante mais n ecessite une m emoire importante LALR(1) : version aaiblie de LR(1) puissante et ex ecutable

10.1.4

Manche

La t ache principale dun analyseur ascendant est de trouver le nud le plus ` a gauche qui na pas encore et e construit mais dont tous les ls sont d ej` a construits. 86 NF11

10.2. ITEM LR(0) Cette suite de nuds est appel e un manche (pivot). Les algorithmes danalyse ascendante di` erent uniquement dans la mani` ere de d eterminer les manches successifs. D enition 10.1 (Manche) Un manche dun syntagme = w est une sous-cha ne qui correspond ` a un choix (la partie droite) dune r` egle de production A et une position dans la cha ne o` u la cha ne peut etre trouv ee et remplac ee par A pour d eterminer le syntagme pr ec edent dans une d erivation droite de . Si S = w alors Aw = rm rm A ou plus simplement est un manche de w pour la position suivant . Dans une grammaire non ambigu e, ` a chaque d erivation droite ne correspond quun seul manche. Exemples : 1. T c est le manche de accbbadbc en position 3. 2. S cT est le manche de acT bbadbc en position 2. 3. S aSbT est le manche de aSbbaSbT en position 5. Lors de lanalyse ascendante dune cha ne, on est amen e ` a reconna tre une forme w dans des syntagmes, la partie correspondant ` a un manche au moment o` u le pointeur dentr ee est sur le premier symbole de w. La cha ne w est une cha ne de symboles terminaux non encore explor ee. D enition 10.2 (Pr exe viable) Les pr exes viables sont les pr exes des syntagmes qui ne s etendent pas au-del` a de lextr emit e droite du manche le plus ` a droite. Ces pr exes sont ceux que lon peut trouver sur la pile dun analyseur. Lors de lanalyse de lexemple pr ec edent, le syntagme aSbbadbc est consid er e lorsque

le buer dentr ee ne contient plus que adbc. le prochain manche est S d. Les symboles a, S , b, b constituent un pr exe viable et sont sur la pile de lanalyseur.

10.2
10.2.1

Item LR(0)
D enition

Les items LR(0) ont la forme A 1 2 o` u A 1 2 est une r` egle de production. Ils nindiquent que des possibilit es danalyse. La forme A 1 2 repr esente lhypoth` ese que 1 2 est un pivot possible et quil Claude Moulin 87

CHAPITRE 10. ANALYSE ASCENDANTE LR(0) sera r eduit ` a A. Le point repr esente lavancement de lanalyseur quand il lit la r` egle de gauche ` a droite : 1 a d ej` a et e reconnu et 2 doit encore etre analys e lorsque la production est utilis ee. La forme A 1 2 signie que le pivot est atteint puisque 1 et 2 ont et e reconnus. S aSbT fournit 5 items : S aSbT S a SbT S aS bT S aSb T S aSbT Une production telle que A ne donne quun seul item : A .

10.2.2

Fermeture dun ensemble ditems

Si I est un ensemble ditems pour une grammaire G, Fermeture(I) est lensemble des items construit par lalgorithme suivant : Placer chaque item de I dans Fermeture(I ) Si A 1 B2 Fermeture(I ) et B est une production de G ajouter B dans Fermeture(I ) Recommencer tant quun nouvel item est ajout e

Exemples Si I = {S a SbT } Fermeture(I ) = {S a SbT,S cT,S d} Si I = {S aSb T } Fermeture(I ) = {S aSb T,T aT,T bS,T c}

10.3
10.3.1

Automate caract eristique canonique


D enition

On construit un automate caract eristique canonique LR(0). Il est d eni sur V T . Cet automate ni d eterministe re` ete les d ecisions que prend lanalyseur lorsquil choisit une r` egle ` a appliquer. Analyser B dans A 1 B2 se traduit par lanalyse dune r` egle issue de B . Chaque fermeture densemble ditems forme un etat de lautomate. Les items de I , tels que S aSb T forment le noyau de Fermeture(I). 88 NF11

10.3. AUTOMATE CARACTERISTIQUE CANONIQUE

10.3.2

Diagramme de transition

La gure 10.1 repr esente le diagramme de transition de lautomate caract eristique canonique LR(0) issu de la table construite ` a la sectionn 10.3.5.

I0

I1

S' S S S c
I3

.S$ .aSbT .cT .d


c

S'

S $

I5

S'

S$

S T T T T

.T .aT .bS .c
c T a c

a c c b c

a
I2

I4

S S S S

a SbT a SbT cT d a

. . . .

d S

I7

cT

.
I8 T T T T T

.
I10

T S S S S T

b S a SbT cT d
I9

. . . .

S
I11

aS bT b

I6

a T aT bS c

. . .

bS
I13

.
I14

S T T T

aSb T aT bS c

. . .

I12

T S aSbT

aT

Fig. 10.1 Diagramme de transition

10.3.3

Transitions

La fonction de transition d etermine l etat successeur dun etat donn e apr` es lanalyse dun symbole terminal ou non. Claude Moulin 89

CHAPITRE 10. ANALYSE ASCENDANTE LR(0) Calcul des transitions Transition(I ,X ), I est un ensemble ditems et X T V . Pour chaque item A 1 X2 de I on d etermine litem A 1 X 2 . La fermeture de lensemble de ces derniers donne Transition(I ,X ).

10.3.4

Collection des items dune grammaire

Ajouter laxiome S et la production S S $ I0 Fermeture({S S $}) C {I0 } Pour chaque I C Pour chaque X V T tel que Transition(I ,X ) = Ajouter Transition(I ,X ) ` aC Recommencer tant que C nest pas stable

10.3.5

Construction des items

Nous utilisons la grammaire G d enie dans la section 10.1.1 : T = {a,b,c,d} V = {S,T } P ={ 1. 2. 3. 4. 5. 6. S S S T T T aSbT cT d aT bS c }

La table suivante montre la construction des items : I0 = I1 I2 I3 I4 = = = = {S S $,S aSbT,S cT,S d} (I0 ,S ) = (I0 ,a) = (I0 ,c) = (I0 ,d) = (I1 ,$) = (I2 ,S ) = (I2 ,a) = (I2 ,c) = (I2 ,d) = {S S $} {S a SbT,S aSbT,S cT,S d} {S c T,T aT,T bS,T c} {S d } {S S $ } {S aS bT } {S a SbT,S aSbT,S cT,S d} {S c T,T aT,T bS,T c} {S d }

I5 = I6 =

= I2 = I3 = I4

90

NF11

10.4. ANALYSE LR(0) I7 = I8 = I9 = I10 = I11 = I12 = (I3 ,T ) = (I3 ,a) = (I3 ,b) = (I3 ,c) = (I6 ,b) = (I8 ,T ) = (I8 ,a) = (I8 ,b) = (I8 ,c) = (I9 ,S ) = (I9 ,a) = (I9 ,c) = (I9 ,d) = (I11 ,T ) = (I11 ,a) = (I11 ,b) = (I11 ,c) = {S {T {T {T cT } a T,T aT,T bS,T c} b S,S aSbT,S cT,S d} c }

{S aSb T,T aT,T bS,T c} {T {T {T {T {T {S {S {S aT } a T,T aT,T bS,T c} b S,S aSbT,S cT,S d} c }

= I8 = I9 = I10

I13 =

bS } a SbT,S aSbT,S cT,S d} c T,T aT,T bS,T c} d } aSbT } a T,T aT,T bS,T c} b S,S aSbT,S cT,S d} c }

= I2 = I3 = I4

I14 =

{S {T {T {T

= I8 = I9 = I10

10.4
10.4.1

Analyse LR(0)
Table des actions

La table des Actions de lanalyseur est remplie selon lalgorithme : Pour tout etat s si s contient un item tel que A a alors Action[s] D ecalage sinon si s contient A (r` egle i) et A = S alors Action[s] R eduction i si s contient S S $ alors Action[s] Acceptation D enition 10.3 (Grammaire LR(0)) Une grammaire est LR(0) si aucune entr ee de la table des actions ne contient plus dune action. Table des successeurs La table des successeurs nest quune simple table de transition dun automate. La d enition des transitions entre les etats permet de remplir cette table. Claude Moulin 91

CHAPITRE 10. ANALYSE ASCENDANTE LR(0)

10.4.2

Illustration
Etats 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Action D ecalage D ecalage D ecalage D ecalage R eduction 3 Acceptation D ecalage R eduction 2 D ecalage D ecalage R eduction 6 D ecalage R eduction 4 R eduction 5 R eduction 1 a 2 2 8 b Successeurs c d S T 3 4 1 3 10 4 6 7 $ 5 9

11 8 2 8 9 10 3 10 12 4 13 14

10.4.3

Algorithme danalyse

Lanalyse est r ealis ee gr ace ` a un automate ` a pile. Son fonctionnement est le suivant : Syntaxe : ( etat, entr ee, pile, sortie). Le fond de la pile est situ e` a droite. Soit s l etat courant Si Action[s] = D ecalage (s,ax,s,y ) (s ,x,s as,y ) avec s = successeur[s,a] Lautomate : - consume le caract` ere dentr ee (a), - empile le caract` ere et le successeur de l etat actuel, - et se positionne dans l etat successeur. Si Action[s] = R eduction j ; (par la r` egle j : A ) = X1 X2 Xn (s,x,sXn s2 X2 s1 X1 t,y ) (s ,x,s At,yj ) avec s = successeur[t,A] Lautomate : - d epile les symboles correspondant ` a la partie droite de la r` egle j , ainsi que les sommets interm ediaires, - empile le symbole gauche de la r` egle j et le successeur de l etat apparu sur la pile, - et se positionne dans cet etat.

92

NF11

10.4. ANALYSE LR(0) Si Action[s] = Acceptation cha ne syntaxiquement correcte. Si Successeur[s] = (le successeur recherch e nappara t pas dans la table) erreur

10.4.4

Simulation de lautomate

Soit ` a analyser la cha ne : accbbadbc. L etat initial est empil e. La table suivante illustre le fonctionnement de lautomate (Acceptation par etat nal). Entr ee accbbadbc$ ccbbadbc$ cbbadbc$ bbadbc$ bbadbc$ bbadbc$ badbc$ adbc$ dbc$ bc$ bc$ c$ $ $ $ $ $ Pile 0 2a0 3c2a0 10c3c2a0 7T3c2a0 6S2a0 11b6S2a0 9b11b6S2a0 2a9b11b6S2a0 4d2a9b11b6S2a0 6S2a9b11b6S2a0 11b6S2a9b11b6S2a0 10c11b6S2a9b11b6S2a0 14T11b6S2a9b11b6S2a0 13S9b11b6S2a0 14T11b6S2a0 1S0 5$1S0 Action D ecalage D ecalage D ecalage R eduction 6 R eduction 2 D ecalage D ecalage D ecalage D ecalage R eduction 3 D ecalage D ecalage R eduction 6 R eduction 1 R eduction 5 R eduction 1 D ecalage Acceptation Sortie

6 6 6 6 6 6 6 6 6 6 6 6 6 6 6

2 2 2 2 2 2 2 2 2 2 2 2 2 2

3 3 3 3 3 3 3 3 3

6 6 6 6 6 6

1 1 1 1 1

5 51 51 51

10.4.5

Conits

Conit D ecaler - R eduire Certains etats peuvent contenir un item de la forme A a et un item de la forme A . Ceci engendre un conit D ecaler - R eduire. Conit R eduire - R eduire Certains etats peuvent contenir deux items de la forme A , repr esentant deux situations de r eduction par deux productions di erentes. Ceci engendre un conit R eduire - R eduire.

Claude Moulin

93

CHAPITRE 10. ANALYSE ASCENDANTE LR(0)

94

NF11

Chapitre 11 Analyse Ascendante SLR(1)


11.1 Introduction

Tr` es peu de grammaires sont LR(0). Par exemple, une grammaire avec une production vide ne peut etre LR(0). Si nous consid erons une production telle que T , un ensemble ditems contenant un item de la forme A T contient aussi litem T do` u un conit D ecaler - R eduire. La m ethode danalyse SLR(1) (ou Simple LR(1)) est un peu plus puissante que la m ethode LR(0), mais encore insusante en pratique.

11.2

Algorithme de construction

La m ethode LR(0) du chapitre 10 ne consid` ere aucun caract` ere de pr evision. La m ethode SLR(1) quant ` a elle prend en compte les suivants globaux de chaque variable pour construire les tables dactions et de successeurs. La table des actions est ` a deux dimensions. La m ethode SLR(1) sappuie sur la remarque quun pivot ne doit pas etre r eduit ` a un non terminal A si le caract` ere de pr evision nappartient pas ` a SUIV(A). Le diagramme de transition de lautomate SLR(1) est le m eme que celui de lautomate LR(0), le nombre d etats est le m eme, la table des successeurs est la m eme, mais la table dactions est di erente. Lalgorithme de construction des tables est le suivant :

1. Construire la collections des ensembles ditems LR(0) : {I0 ,I1 , In } Chaque item Ip permet de construire l etat p de lanalyseur. 2. Pour chaque (Ii ,a) = Ij , a T mettre D ecalage dans la case MA [i,a] de la table des actions. mettre j dans la case MS [i,a] de la table des successeurs.

Claude Moulin

95

CHAPITRE 11. ANALYSE ASCENDANTE SLR(1) 3. Pour chaque (Ii ,A) = Ij , A V mettre j dans la case MS [i,A] de la table des successeurs. 4. Pour chaque r` egle k , A , telle que A Ip (sauf pour A = S ), mettre R eduction k dans chaque case MA [p,a] o` u a SUIV(A). 5. Si S S $ Ip , mettre Acceptation dans la ligne MA [p] de la table des actions.

11.3

Tables SLR(1)

Reprenons la grammaire de la section 10.3.5. Les premiers et suivants sont pr ecis es dans les tables suivantes : Premiers et suivants Premiers S {a,c,d} SbT {a,c,d} T {a,b,c} Etats 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 a D D D b Action c d D D Suivants {$,b} {$,b}

S T

$ D

a 2 2 8

D D D

D D D D R3 Acceptation D R2 D D D D R6 D D R4 R5 R1

Successeurs c d $ S 3 4 1 5 3 4 6 10

R3 11 R2 8 2 R6 8 R4 R5 R1 9 10 14 9 10 3 12 4 13

Il est possible de fondre ces deux tables. Il sut de faire suivre laction de d ecalage du num ero de l etat successeur lorsquil sagit dun symbole terminal. 96 NF11

11.4. GRAMMAIRE SLR(1), NON LR(0) Tables danalyse Etats 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 a D2 D2 D8 b Action c d D3 D4 D3 D 10 D4 R3 $ D5 6 7 D9 R3 Acceptation D 11 R2 D 9 D 10 D3 D4 R6 D 9 D 10 R4 R5 R1 Succ S T 1

R2 12 13 R6 14 R4 R5 R1

D8 D2 D8

11.4

Grammaire SLR(1), non LR(0)

Soit G la grammaire suivante : T = {id, + ,(,),[,]} V = {E,T } P ={ 1. E T 2. E E + T 3. T id 4. T (E ) 5. T id[E ] } Cette grammaire illustre la cr eation dune expression. Les productions 1 ` a 4 ne posent pas de probl` eme. Lintroduction de la r` egle 5 signiant quun terme peut etre un el ement de tableau produit un conit D ecalage - R eduction en analyse LR(0). En eet, apr` es la rencontre du symbole id, on ne peut d ecider si lon doit r eduire en appliquant la r` egle 3 ou si lon doit d ecaler pour compl eter le choix de la r` egle 5. Lanalyse SLR(1), prenant en compte les caract` eres suivant globalement chacune des variables permet de lever ce conit. Le terminal [ napparaissant pas dans les suivants possibles de la variable T indique un d ecalage obligatoire lorsqua et e reconnue la s equence id [. Ceci est illustr e par lanalyse suivante. Claude Moulin 97

CHAPITRE 11. ANALYSE ASCENDANTE SLR(1) Etats I0 = I1 I2 I3 I4 = = = = {S E $,E T,E E + T,T id,T (E ),T id[E ]} (I0 ,E ) = (I0 ,T ) = (I0 ,id) = (I0 ,() = (I1 ,$) = (I1 ,+) = (I3 ,[) = (I4 ,E ) = (I4 ,T ) = (I4 ,id) = (I4 ,() = {S E $,E E +T } {E T } {T id ,T id [E ]} {T ( E ),E T,E E + T,T id,T (E ),T id[E ]} {S E $ } {E E + T,T id,T (E ),T id[E ]} {T id[ E ],E T,E E + T,T id,T (E ),T id[E ]} {T (E ),E E +T } {E T } {T id ,T id [E ]} {T ( E ),E T,E E + T,T id, T (E ),T id[E ]} {E E + T } {T id ,T id [E ]} {T ( E ),E T,E E + T,T id, T (E ),T id[E ]} {T id[E ],E E +T } {E T } {T id ,T id [E ]} {T ( E ),E T,E E + T,T id, T (E ),T id[E ]}

I5 = I6 = I7 = I8 =

= I2 = I3 = I4

I9 =

(I6 ,T ) = (I6 ,id) = (I6 ,() =

= I3 = I4

I10 =

(I7 ,E ) = (I7 ,T ) = (I7 ,id) = (I7 ,() =

= I2 = I3 = I4

I11 =

(I8 ,)) = (I8 ,+) = (I10 ,]) = (I10 ,+) =

{T (E ) } {E E + T,T id,T (E ),T id[E ]} {T id[E ] } {E E + T,T id,T (E ),T id[E ]}

= I6

I12 =

= I6

11.4.1

Premiers - Suivants
E T E+T Premiers {id,(} {id,(} {id,(} E T Suivants {$, + ,),]} {$, + ,),]} NF11

98

11.4. GRAMMAIRE SLR(1), NON LR(0)

11.4.2

Tables danalyse
Etats 0 1 2 3 4 5 6 7 8 9 10 11 12 id D3 + D6 R1 R3 D3 D3 D3 D R D R R 6 2 6 4 5 ( D4 Action ) [ ] $ D5 R1 R3 8 2 9 2 Succ E T 1 2

D7 D4 Acceptation D4 D4 D 11 R2 R4 R5

R1 R3

R1 R3

10 R2 D 12 R4 R5 R2 R4 R5

11.4.3

Simulation de lautomate

Soit ` a analyser la cha ne : tab[i] + p Lanalyse lexicale transforme lentr ee en : id[id] + id. La table suivante illustre le fonctionnement de lautomate (Acceptation par etat nal). Entr ee Pile id[id] + id$ [id] + id$ 3 id id] + id$ 7 [ 3 id ] + id$ 3 id 7 [ 3 id ] + id$ 2 T 7 [ 3 id ] + id$ 10 E 7 [ 3 id + id$ 12 ] 10 E 7 [ 3 id + id$ 2T + id$ 1E id$ 6+1E $ 3 id 6 + 1 E $ 9T6+1E $ 1E 5$1E Action D ecalage D ecalage D ecalage R eduction R eduction D ecalage R eduction R eduction D ecalage D ecalage R eduction R eduction D ecalage Acceptation Sortie

0 0 0 0 0 0 0 0 0 0 0 0 0 0

3 3 3 3 3 3 3 3 3 3 3

1 1 1 1 1 1 1 1 1 1

5 5 5 5 5 5 5 5

1 1 1 1 1 1 1

3 32 32 32

Claude Moulin

99

CHAPITRE 11. ANALYSE ASCENDANTE SLR(1)

11.5

Conits

Les m emes types de conits que dans le cas des grammaires LR(0) subsistent.

11.5.1

Conit D ecaler - R eduire

Certains etats peuvent contenir un item de la forme A a et un item de la forme A . Ceci engendre un conit D ecaler - R eduire.

11.5.2

Conit R eduire - R eduire

Certains etats peuvent contenir deux items de la forme A , repr esentant deux situations de r eduction par deux productions di erentes. Ceci engendre un conit R eduire - R eduire.

100

NF11

Chapitre 12 Analyse LR(1)


12.1 Exemple

Consid erons la grammaire G : T = {= , ,id} V = {S,G,D} P={ S G = D S D G D G id D G } Le symbole = appartient ` a SU IV (D). En eet on peut d eriver : S = G = D = D = D I0 = {S S $,S G = D,S D,D G,G D,G id} I1 = Transition(I0 ,G)= {S G = D,D G }. En analyse SLR(1), cette grammaire poss` ede un etat LR(0), qui indique de r eduire par la production D G en pr esence de tout suivant de D et en particulier =. Un syntagme tel que G = id pourrait etre r eduit en D = id or un tel syntagme commen cant par D = ne peut exister. Cette grammaire nest donc pas SLR(1).

12.2

Introduction

Si un ensemble ditems Ii contient A et si a SU IV (A) alors la table des actions SLR indiquera de r eduire. Cependant cette d ecision peut etre illicite. En eet, il peut exister des pr exes ne pouvant pas etre suivis de a. Des conits D ecaler-R eduire peuvent provenir du fait que la m ethode SLR nest pas susamment puissante pour se rappeler assez de contexte gauche pour d ecider de laction ` a eectuer par lanalyseur. Il faut attacher davantage dinformation aux items LR(0), ce qui permet d eviter Claude Moulin 101

CHAPITRE 12. ANALYSE LR(1) certaines r eductions invalides. Pour cela, il faut que chaque etat dun analyseur LR indique exactement les symboles dentr ee qui peuvent suivre un manche A pour lesquels une r eduction vers A est possible.

12.3
12.3.1

Items LR(1)
D enition

D enition 12.1 (Item LR(1)) Un item LR(1) est une forme telle que [A ,a] o` u A est une production de la grammaire et a est un symbole terminal, ou la marque de n dentr ee $. Un item [A ,a] signie R eduire par la production A uniquement si le prochain symbole dentr ee est a. Il ne sera pas ainsi obligatoire de r eduire pour tout suivant de A. Un item [A b,a] impliquera un d ecalage. D enition 12.2 (Item LR(1) valide) Un item LR(1) [A ,a] est valide pour un pr exe viable , sil existe une d erivation droite telle que : S = Aaw = aw
rm rm

12.3.2

Fermeture dun ensemble ditems LR(1)

Consid erons un item [A B,a], valide pour un pr exe . Il existe une erivation d erivation : S = Aaw = Baw. Pour une production B , la d rm rm devient : S = Aaw = Baw = aw. rm rm rm Les items valides pour le m eme pr exe sont les items [B ,b] tels que b P REM (aw). Remarque : P REM (aw) = P REM (a) Si est nulliable alors a P REM (a) Si nest pas nulliable alors P REM (a) = P REM ( )

Algorithme de fermeture Soit I un ensemble ditems dune grammaire G. Placer chaque item de I dans Fermeture(I). Si litem [A B,a] Fermeture(I) et si B est une production de G Pour chaque terminal b PREM(a) Ajouter litem [B ,b] ` a Fermeture(I). Recommencer tant que Fermeture(I) nest pas stable.

102

NF11

12.3. ITEMS LR(1)

12.3.3

Transition

D etermination de T ransition(I,X ), o` u I est un ensemble ditems dune grammaire G et X un el ement de T V . Consid erer les items de la forme [A 1 X2 ,a] I Construire J lensemble des items de la forme [A 1 X 2 ,a] Transition(I,X) = Fermeture(J)

12.3.4

Calcul de lensemble des items

Soit a ` calculer lensemble des items LR(1) dune grammaire. Ajouter laxiome S et la production S S $ I0 Fermeture({[S S $,]}) C {I0 } Pour chaque I C Pour chaque X V T tel que Transition(I ,X ) = Ajouter Transition(I ,X ) ` aC Recommencer tant que C nest pas stable

12.3.5

Tables danalyse LR(1)

1. Construire C = {I0 ,I1 , . . . In } lensemble des items LR(1). Chaque Ii permet de construire l etat i de lanalyseur. 2. Si [A a,b] Ii mettre D ecalage dans MA [i,a] de la table des actions. On ne se pr eoccupe pas de b. mettre j dans MS [i,a] de la table des successeurs o` u Ij = (Ii ,a) 3. Si [A ,a] Ii et A = S mettre R eduction p (o` u p est le rang de la production A ) dans MA [i,a] de la table des actions. 4. Si [S S $ ,] Ii mettre Acceptation dans MA [i] de la table des actions. 5. Si (Ii ,A) = Ij mettre j dans MS [i,A] de la table des successeurs D enition 12.3 (Grammaire LR(1)) Une grammaire est LR(1) si aucune case de la table des actions ne contient plus dune action.

12.3.6

Illustration

Soit G la grammaire : T = {c,d}, V = {S,C } Claude Moulin 103

CHAPITRE 12. ANALYSE LR(1) P = { 1. S CC 2. C cC 3. C d }

PREM(C) = {c,d}.

Ensemble des Items LR(1) I0 = {[S S $,],[S CC,$],[C cC,c], [C cC,d],[C d,c],[C d,d]} (I0 ,S ) = (I0 ,C ) = (I0 ,c) = (I0 ,d) = (I1 ,$) = (I2 ,C ) = (I2 ,c) = (I2 ,d) = (I3 ,C ) = (I3 ,c) = (I3 ,d) = I10 = (I7 ,C ) = (I7 ,c) = (I7 ,d) = {[S S $,]} {[S C C,$],[C cC,$],[C d,$]} {[C c C,c],[C c C,d],[C cC,c], [C cC,d],[C d,c],[C d,d]} {[C d ,c][C d ,d]} {[S S $ ,]} {[S CC ,$]} {[C c C,$],[C cC,$],[C d,$]} {[C d ,$]} {[C cC ,c],[C cC ,d]} {[C c C,c],[C c C,d],[C cC,c], [C cC,d],[C d,c],[C d,d]} {[C d ,c][C d ,d]} {[C cC ,$]} {[C c C,$],[C cC,$],[C d,$]} {[C d ,$]}

I1 = I2 = I3 = I4 = I5 = I6 = I7 = I8 = I9 =

= I3 = I4

= I7 = I8

Tables danalyse Etats 0 1 2 3 4 5 104 Action c d $ D3 D4 D5 D7 D8 D3 D4 R3 R3 Acceptation Succ S C 1 2 6 9

NF11

12.4. ANALYSE LALR(1) 6 7 8 9 10 Analyse de la cha ne ccdcd Entr ee ccdcd$ cdcd$ dcd$ cd$ cd$ cd$ cd$ d$ $ $ $ $ Pile 3c 3c3c 4d3c3c 9C3c3c 9C3c 2C 7c2C 8d7c2C 10 C 7 c 2 C 6C2C 1S 5$1S 0 0 0 0 0 0 0 0 0 0 0 0 0 Action D ecalage D ecalage D ecalage R eduction R eduction R eduction D ecalage D ecalage R eduction R eduction R eduction D ecalage Acceptation Sortie R1 D7 R2 D8 R3 R2 R2 10

3 3 3 3 3 3 3 3 3

2 2 2 2 2 2 2 2

2 2 2 2 2 2 2

3 32 321 321

12.3.7

Exemples de conits LR(1)

D ecaler - R eduire Lorsquun etat contient des items tels que : [A ,a] et [A a,b], il d enote un conit D ecaler - R eduire ` a la rencontre du caract` ere a. R eduire - R eduire Lorsquun etat contient des items tels que : [A ,a] et [B ,a], il d enote un conit R eduire - R eduire ` a la rencontre du caract` ere a commun aux suivants de A et de B .

12.4

Analyse LALR(1)

La m ethode LALR(1) (LookAheadLR) est presque aussi puissante que la m ethode LR(1) et aussi compacte que la m ethode SLR(1). Cest certainement la plus utilis ee par les g en erateurs danalyseur syntaxique. Les tables SLR et LALR ont le m eme nombre d etats. Nous construirons les etats LALR ` a partir des etats LR bien quen pratique un algorithme permette de les g en erer ` a partir des items LR(0). Claude Moulin 105

CHAPITRE 12. ANALYSE LR(1)

12.4.1

Cur dun ensemble ditems

I3 = { [C c C,c], [C c C,d] [C cC,c], [C cC,d] [C d,c], [C d,d] } I3 peut etre r e ecrit en compactant les items b atis sur le m eme item LR(0) : I3 = { [C c C,c/d] [C cC,c/d] [C d,c/d] } Le noyau de l etat est lensemble des items plac es initialement dans celui-ci et permettant de g en erer les autres par fermeture. Sauf pour l etat initial, le noyau ne contient pas ditems dont le point est situ e en premi` ere position. Le cur de l etat est lensemble des items LR(0) obtenus ` a partir des items LR(1), par restriction sur les symboles de pr evision. La gure 12.1 indique les noyau et cur de l etat 3.

Etat 3 C C C c.C, .cC, .d, c/d c/d c/d Noyau

Coeur

Fig. 12.1 Noyau et cur de l etat 3 Dans lexemple de la section 12.3.6 les items I3 et I7 , I4 et I8 , I9 et I10 ont respectivement le m eme cur.

12.4.2

Fusion de deux etats

Il est possible de fusionner deux etats ayant le m eme cur. Il sut de r eunir les listes de symboles de pr evision pour chaque item LR(0) correspondant. I3 I7 = J37 J37 = { [C c C,c/d/$] [C cC,c/d/$] [C d,c/d/$] } I4 I8 = J48 J48 = { [C d ,c/d/$] }

106

NF11

12.4. ANALYSE LALR(1) La fusion de deux ou plusieurs etats est consistante par transition. En eet : Si I et J ont le m eme cur alors Transition(I,X) et Transition(J,X) auront le m eme cur puisquils ne di` ereront que sur les symboles de pr evision (voir illustration en gure 12.2).
Etat I B C d.Xb, e c.Xa, f Transition(I,X) B C dX.b, e cX.a, f

Etat J B C d.Xb, a c.Xa, b

Transition(J,X) B C dX.b, b cX.a, a

Fig. 12.2 Consistance de la fusion et de la fonction de transition

12.4.3

Tables danalyse LALR

1. Construire C = {I0 ,I1 , . . . In } lensemble des items LR(1) pour la grammaire augment ee. 2. Pour chaque cur, trouver les etats ayant ce m eme cur et les remplacer par leur fusion. Soit C = {J0 ,J1 , . . . Jm } lensemble des items LALR(1) qui en r esultent (m n). Chaque Ji permet de construire l etat i de lanalyseur. 3. Soit et les fonctions de transition sur les etats LR(1) et LALR(1). Si Ik na pas fusionn e, il est renomm e Jk et (Jk ,X ) = (Ik ,X ) pour tout X . Si (Ik ,X ) = Ip et si Ik a fusionn e en Jl alors Ip a fusionn e en Jq et (Jl ,X ) = Jq 4. Si [A a,b] Ji mettre D ecalage dans MA [i,a] de la table des actions. On ne se pr eoccupe pas de b. mettre j dans MS [i,a] de la table des successeurs o` u Jj = (Ji ,a) 5. Si [A ,a] Ji et A = S mettre R eduction p (o` u p est le rang de la production A ) dans MA [i,a] de la table des actions. 6. Si [S S $ ,] Ji mettre Acceptation dans MA [i] de la table des actions. 7. Si (Ji ,A) = Jj mettre j dans MS [i,A] de la table des successeurs Claude Moulin 107

CHAPITRE 12. ANALYSE LR(1) D enition 12.4 (Grammaire LALR(1)) Une grammaire est LALR(1) si aucune case de la table des actions ne contient plus dune action.

12.4.4

Exemple

Reprenons lexemple de la section 12.3.6. Les etats pouvant fusionner sont les etats I3 et I7 , I4 et I8 , I9 et I10 . On obtient les nouveaux etats J37 , J48 et J910 . J37 = { [C c C,c/d/$] [C cC,c/d/$] [C d,c/d/$] } J48 = { [C d ,c/d/$] } J910 = { [C cC ,c/d/$] }

Tables danalyse Etats 0 1 2 3 4 5 6 7 8 9 10 Analyse LR Action c d $ D3 D4 D5 D7 D8 D3 D4 R3 R3 Acceptation R1 D7 D8 R3 R2 R2 R2 Succ S C 1 2 6 9

Etats 0 1 2 37 48 5 6 910

10

Analyse LALR Action c d $ D 37 D 48 D5 D 37 D 48 D 37 D 48 R3 R3 R3 Acceptation R1 R2 R2 R2

Succ S C 1 2 6 910

12.4.5

Conits

La fusion de deux etats ne peut entra ner de nouveaux conits D ecaler - R eduire qui nauraient pas gur e dans les etats LR(1). En eet : Soit Jkl un etat LALR pr esentant un conit D ecaler - R eduire. Jkl est de la forme : Jkl = {[A ,a],[B a,b], } Soit Ik l etat LR contenant [A ,a]. Puisque Ik et Il ont le m eme cur, il contient egalement un item tel que [B a,c]. Ik pr esente donc d ej` a un conit D ecaler - R eduire.

108

NF11

12.4. ANALYSE LALR(1) La fusion de deux etats peut entra ner de nouveaux conits R eduire - R eduire qui nauraient pas gur e dans les etats LR(1). Ceci explique lexistence de grammaire LR(1) non LALR(1).

12.4.6

Grammaire LR(1) non LALR(1)

Soit G la grammaire : T = {a,b,c,d,e}, V = {S,A,B } P={ 1. S aAd/bBd/aBe/bAe 2. A c 3. B c } I0 = {[S S $,], [S aAd,$] [S bBd,$] [S aBe,$] [S bAe,$]} I2 = (I0 ,a) = {[S a Ad,$],[S a Be,$],[A c,d],[B c,e]} I3 = (I0 ,b) = {[S b Bd,$],[S b Ae,$],[B c,d],[A c,e]} Ik = (I2 ,c) = {[A c ,d],[B c ,e]} Il = (I3 ,c) = {[A c ,e],[B c ,d]} Ik et Il ne pr esentent pas de conit R eduire - R eduire. Le pr exe ac est viable et les cha nes acd et ace sont reconnues : S = aAd = acd rm rm S = aBe = ace
rm rm

Apr` es fusion : Jkl = {[A c ,d/e],[B c ,e/d]} Jkl pr esente un conit R eduire - R eduire a ` la rencontre des symboles d et e.

Claude Moulin

109

CHAPITRE 12. ANALYSE LR(1)

110

NF11

Chapitre 13 Analyse S emantique


13.1 Introduction
Programme source

Analyseur lexical

Analyseur syntaxique Table des symboles

Analyseur smantique

Erreurs

Gnrateur de code intermdiaire

Optimisateur de code

Gnrateur de code

Programme cible

Fig. 13.1 Les di erentes etapes de la compilation

La gure 13.1 repr esente de fa con th eorique les phases dun compilateur. Lanalyse syntaxique produit une repr esentation sous forme darbre du texte dentr ee. Larbre syntaxique (ou concret) nest cependant pas la repr esentation la plus usuelle de la structure du programme source. On lui pr ef` ere larbre abstrait plus compacte dont les nuds internes sont les mots-cl es du langage ou les op erateurs et leurs ls Claude Moulin 111

CHAPITRE 13. ANALYSE SEMANTIQUE les op erandes. La construction de cet arbre est bas ee sur les m emes concepts que ceux utilis es par lanalyse s emantique. Celle-ci peut dailleurs etre eectu ee en parall` ele de lanalyse syntaxique. La phase danalyse s emantique rassemble des informations qui serviront dans la production de code et contr ole un certain nombre de coh erences s emantiques. Par exemple, cest au cours de cette phase que sont d etermin es les instructions, les expressions et les identicateurs. Sont egalement contr ol es les type dans les aectations et les passages de param` etres. Les types dindices utilis es pour les tableaux peuvent aussi etre v eri es. Les grammaires hors contexte ne contiennent pas tous les el ements dont lanalyse s emantique a besoin. Ceux-ci d ependent du contexte dans lequel est con cu un programme. On pourrait faire appel ` a des grammaires contextuelles pour repr esenter de tels programmes, mais elles sont cependant plus d elicates ` a manipuler et les processus evoqu es lors de lanalyse s emantique sont dicilement automatisables. Ils d ependent de la cat egorie de programmes et sont en g en eral impl ement es ` a la main. Nous regroupons sous le terme de ((d enition dirig ee par la syntaxe)) les concepts requis pendant lanalyse s emantique et par ((traduction dirig ee par la syntaxe)) limpl ementation des processus qui les mettent en uvre.

13.2

Grammaire attribu ee

On utilise un formalisme qui permet dassocier des actions aux r` egles de production dune grammaire. Ainsi : Chaque symbole de la grammaire poss` ede des attributs. On note X.a lattribut a du symbole X . Si plusieurs symboles X gurent dans une r` egle, on note X le symbole lorsquil est en partie gauche, X1 , X2 , . . . , les symboles X en partie droite, ` a partir du plus ` a gauche. Chaque r` egle de production de la grammaire poss` ede un ensemble de r` egles s emantiques ou actions permettant de calculer les valeurs des attributs. Une r` egle s emantique est une suite dinstructions algorithmiques. D enition 13.1 (D enition dirig ee par la syntaxe) On appelle D enition dirig ee par la syntaxe (DDS) la donn ee dune grammaire et de r` egles s emantiques.

13.2.1

Exemple

Soit la grammaire G d enie par les r` egles suivantes : S aSb/aS/ Il sagit de d eterminer le nombre de a. 112 NF11

13.3. ATTRIBUTS

Production R` egle s emantique S aSb S.nba := S1 .nba + 1 S aS S.nba := S1 .nba + 1 S S.nba := 0 S S $ // S.nba contient la valeur Dans cet exemple, on saper coit que lattribut en partie gauche est calcul e en fonction de lattribut en partie droite.

13.3
13.3.1

Attributs
Arbre d ecor e

D enition 13.2 (Arbre d ecor e) Un arbre d ecor e est un arbre syntaxique sur les nuds duquel on fait gurer ` a gauche et ` a droite du symbole ses attributs. La gure 13.2 repr esente larbre d ecor e lors de la validation de la cha ne : aaab. On peut calculer la valeur de lattribut dun nud d` es que lattribut des ls a et e calcul e.
S 3 a a a S 2 b S 1 S 0
eps

Fig. 13.2 Arbre d ecor e L ecriture des r` egles s emantiques impose un ordre d evaluation des attributs. On distingue deux sortes dattributs : les attributs synth etis es et les attributs h erit es. Dans larbre d ecor e on place a ` gauche du nud les attributs h erit es et ` a droite les attributs synth etis es. D enition 13.3 (Attribut synth etis e) Un attribut synth etis e est attach e au non terminal en partie gauche et se calcule en fonction des attributs des symboles de la partie droite. Dans larbre d ecor e, un attribut synth etis e est attach e` a un nud et se calcule en fonction des attributs de ses ls. D enition 13.4 (Attribut h erit e) Un attribut est h erit e lorsquil est calcul e` a partir des attributs du non terminal de la partie gauche et des attributs des autres symboles de la partie droite. Claude Moulin 113

CHAPITRE 13. ANALYSE SEMANTIQUE Dans larbre d ecor e, un attribut h erit e d epend des attributs du nud p` ere et des attributs des nuds fr` eres. D enition 13.5 (D enition S-attribu ee) Une d enition dirig ee par la syntaxe nayant que des attributs synth etis es est appel ee d enition S-attribu ee. D enition 13.6 (D enition L-attribu ee) Une d enition dirig ee par la syntaxe est L-attribu ee si tout attribut h erit e dun symbole de la partie droite dune production ne d epend que : . des attributs h erit es du symbole en partie gauche et . des attributs des symboles le pr ec edant dans la production.

13.3.2

D enition formelle

Dans une d enition dirig ee par la syntaxe, chaque production A de la grammaire poss` ede un ensemble de r` egles s emantiques de la forme : b := f (c1 ,c2 , . . . ck ), o` u: . f est une fonction, . b est soit un attribut synth etis e de A, soit un attribut h erit e dun des symboles gurant en partie droite de la production . les ci,1ik sont des attributs quelconques des symboles. On consid` ere quun terminal ne peut avoir que des attributs synth etis es d enis ` a partir des caract` eres qui composent son lex` eme. Parfois, il est n ecessaire que certaines r` egles s emantiques produisent des eets de bord. On les consid` ere alors comme des fonctions associ ees ` a des attributs factices.

13.3.3

Ordre d evaluation des attributs

Une DDS peut utiliser ` a la fois des attributs h erit es et des attributs synth etis es. Il est donc n ecessaire d etablir un ordre d evaluation des r` egles s emantiques. D enition 13.7 (Graphe de d ependances) Un graphe de d ependances est un graphe orient e repr esentant lordre d evaluation des attributs dune grammaire attribu ee. Chaque attribut constitue un sommet du graphe. Il y a un arc de a vers b si le calcul de b d epend de celui de a. Lorsque le graphe de d ependance contient un cycle, l evaluation est impossible. 114 NF11

PAR LA SYNTAXE 13.4. TRADUCTION DIRIGEE

13.3.4

Exemple
R` egle s emantique L.type = T.val L1 .type = L.type setType(id.ref,L.type) setType(id.ref,L.type) T.val = integer T.val = real

D eclaration des variables en C : Production D T L L L,id L id T int T real D eclaration : real x, y, z

T val = real

type = real

L setType

real

type = real L setType

id

ref = 3

type = rea l

L setType

id

ref = 2

id ref = 1

Fig. 13.3 Graphe de d ependances

13.4

Traduction dirig ee par la syntaxe

D enition 13.8 (Sch ema de traduction) Un sch ema de traduction est une d enition dans laquelle lordre dex ecution des actions s emantiques est impos e. La production A X {action}Y signie que laction est ex ecut ee apr` es que le sous-arbre issu de X a et e construit et parcouru et avant que celui issu de Y ne le soit. On peut evaluer les attributs en m eme tant que lon eectue lanalyse syntaxique. Dans ce cas, on utilise souvent une pile pour conserver les valeurs des attributs, cette pile pouvant etre la m eme que celle de lanalyseur syntaxique, ou une autre. Lordre d evaluation des attributs est tributaire de lordre dans lequel les noeuds de larbre syntaxique sont cr e es (soit par une m ethode ascendante, soit par une m ethode descendante). Cependant il ne faut pas perdre de vue que larbre entier nest pas r eellement construit lors de lanalyse syntaxique. Claude Moulin 115

CHAPITRE 13. ANALYSE SEMANTIQUE

13.4.1

Analyse ascendante

Lanalyse ascendante se pr ete bien ` a la traduction de d enitions S-attribu ees puisque larbre syntaxique est cr e e des feuilles vers la racine. On empile et d epile les attributs synth etis es. Exemple : evaluation dune expression. Production R` egle s emantique Traduction S E $ S.val := E.val ecrire p.depiler() E E + T E.val := E1 .val+T.val tmpT = p.depiler() tmpE = p.depiler() p.empiler(tmpE + tmpT) E E T E.val := E1 .val-T.val tmpT = p.depiler() tmpE = p.depiler() p.empiler(tmpE - tmpT) E T E.val := T.val T T F T.val := T1 .val*F.val tmpF = p.depiler() tmpT = p.depiler() p.empiler(tmpT x tmpF) T F T.val := F.val F (E ) F.val := E.val F nb F.val := nb.val p.empiler(nb) Analyse de 9 - 5 + 2
S val = 6

E val = 6

E val = 4

T val = 2

E val = 9

T val = 5

F val = 2 9

5 9

2 4

T val = 9

F val = 5

nb val = 2

F val = 9

nb val = 5

nb val = 9

Fig. 13.4 Analyse ascendante

116

NF11

PAR LA SYNTAXE 13.4. TRADUCTION DIRIGEE

13.4.2

Analyse descendante

Lanalyse descendante se pr ete bien ` a la traduction de d enitions L-attribu ees nayant que des attributs h erit es puisque larbre syntaxique est cr e e de la racine vers les feuilles. On empile et d epile les attributs h erit es. Exemple : calcul du niveau dimbrication de parenth` eses. Production S S $ S (S )S R` egle s emantique S.nb := 0 S1 .nb := S.nb + 1 S2 .nb := S.nb ecrire S.nb Traduction p.empiler(0) tmp = p.depiler() p.empiler(tmp) p.empiler(tmp + 1) ecrire p.depiler()

S Analyse de ( ( ) ) ( )

S'

nb = 0 S

nb = 1 S

nb = 0 S

nb = 2 S

nb = 1 S

nb = 1 S

nb = 0 S

0
eps eps eps eps

1 0

2 1 0

1 0

1 0

Fig. 13.5 Analyse descendante

13.4.3

Principe

On ins` ere les actions dans les r` egles de production comme suit : Un attribut h erit e attach e` a une variable en partie droite de r` egle est calcul e par une action intervenant avant cette variable. Un attribut synth etis e attach e` a la variable en partie gauche est calcul e apr` es que tous les arguments dont il d epend ont et e calcul es. Laction est en g en eral plac ee en n de r` egle. Dans les d enitions L-attribu ees une action ne peut faire r ef erence ` a un attribut dun symbole plac ea ` sa droite. Claude Moulin 117

CHAPITRE 13. ANALYSE SEMANTIQUE

13.4.4

D enition L-attribu ee

Lexemple suivant repr esente l evaluation dune expression somme d enie par une grammaire LL. E signie expression et T signie terme. Production E T R R +T R R T R R T nb R` egle s emantique R.he := T.val E.val := R.s R1 .he := R.he + T.val R.s := R1 .s R1 .he := R.he - T.val R.s := R1 .s R.s := R.he T.val := nb.val Traduction rhe = t e = rs rhe = rhe + t rhe = rhe - t rs = rhe t=n

Production E T R R +T R R T R R T nb

Sch ema de Traduction E T {rhe = t;} R {e = rs; } R +T {rhe = rhe + t; } R R T {rhe = rhe - t;} R R {rs = rhe;} T nb {t = n;}

Analyse de 9 - 5 + 2

E val = 6

T val = 9

he = 9 R

val = 6

nb val = 9

T val = 5

he = 4 R

val = 6

nb val = 5

T val = 2

he = 6 R val = 6

nb val = 2

eps

Fig. 13.6 Analyse L-attribu ee

118

NF11

13.5. ARBRE ABSTRAIT - ANTLR Ordre des actions Action t=9 rhe = t t=5 rhe = rhe - t t=2 rhe = rhe + t rs = rhe e = rs Valeur 9 4 6 6 6

13.5

Arbre abstrait - AntLR

Une d enition dirig ee par la syntaxe peut etre utilis ee pour construire un arbre abstrait repr esentant un programme satisfaisant une grammaire. Le g en erateur AntLR 1 construit cet arbre lors de lanalyse syntaxique. Le symbole plac e derri` ere une cat egorie lexicale indique que ce token est consid er e comme racine interm ediaire dune arborescence de larbre abstrait. Un nud est construit pour ce token et devient la racine de toute portion de larbre d ej` a construite. Les feuilles de larbre syntaxique sont automatiquement ins er ees dans larbre abstrait sauf si elles sont suivies du symbole !. Si A, B et C repr esentent des cat egories lexicales : A B^ C donne larbre ^(B A C). B est la racine, A et C sont les ls. A B^ C^ donne larbre ^(C ^(B A)). C est la racine et a un seul ls dont la racine est B et qui a pour ls A.

13.5.1

Exemple : expression arithm etique

La grammaire suivante permet de d ecrire des expressions arithm etiques sur des entiers. Les symboles ^ permettent de construire larbre abstrait dune expression. grammar Expr; options { output = AST; } tokens{ PLUS = +; MOINS = -; MULT = *;
1. Terence Parr, Universit e de San Francisco, http://www.antlr.org/

Claude Moulin

119

CHAPITRE 13. ANALYSE SEMANTIQUE DIV = /; EXP = ^; } expr : sumExpr ; sumExpr : prodExpr ((PLUS^|MINUS^) prodExpr)* ; prodExpr : powExpr ((MUL^|DIV^) powExpr)* ; powExpr : atom (EXP^ atom)? ; atom : INT ; INT : 0..9+ ;

13.5.2

Arbre abstrait

A partir de lexpression 10 - 5 + 4 * 20 / 2, lenvironnement AntLR permet de construire larbre abstrait suivant :

Fig. 13.7 Arbre abstrait

13.5.3

Evaluation r ecursive

AntLR permet de d enir des grammaires sur des arbres abstraits. La grammaire suivante permet d evaluer r ecursivement lexpression de la section pr ec edente. Le r esultat en est 45.0. tree grammar ExprEval; options { tokenVocab = Expr; ASTLabelType=CommonTree; } exp returns[double v] : ^(PLUS x=exp y=exp) {$v = $x.v + $y.v;} 120 NF11

13.6. TRADUCTION DE LANGAGE | | | | | ; ^(MOINS x=exp y=exp) {$v = $x.v - $y.v;} ^(MULT x=exp y=exp) {$v = $x.v * $y.v;} ^(DIV x=exp y=exp) {$v = $x.v / $y.v;} ^(EXP x=exp y=exp) {$v = Math.exp($y.v * Math.log($x.v));} INT {$v = Double.parseDouble($INT.text);}

13.6

Traduction de langage

Traduction de texte ecrits en langage csv (comma separated values) en langage xhtml.

R` egles de production : grammar CSV; COMMA : , ; RECORD : (A..Z | a..z |0..9)+ ; NEWLINE : \r? \n ; WS : ( |\t)+ {skip();} ; file : line (NEWLINE line)* NEWLINE? EOF line : record+ ; record : RECORD COMMA? ; Achage de la trace danalyse : Les r` egles sont compl et ees par des actions ecrites dans le langage de programmation d esir e. Elles indiquent ici les r` egles appel ees et les records trouv es. grammar CSV; ... file : {System.out.println("file called");} line (NEWLINE line)* NEWLINE? EOF {System.out.println("file matched");} ; line : {System.out.println("line called");} record+ {System.out.println("line matched");} ; record : {System.out.println("record called");} r=RECORD COMMA? Claude Moulin 121

CHAPITRE 13. ANALYSE SEMANTIQUE {System.out.println("record = " + $r.getText()); System.out.println("record matched");} ; Achage xHTML : En substituant les actions, il est possible dacher une table xHTML. grammar CSV; ... file : {System.out.println("<table align=\"center\" border=\"1\">");} line (NEWLINE line)* NEWLINE? EOF {System.out.println("</table>");} ; line : {System.out.println(" <tr>");} record+ {System.out.println(" </tr>");} ; record : {System.out.print(" <td>");} r=RECORD COMMA? {System.out.print($r.getText()); System.out.println("</td>");} ; M ethode retournant une cha ne : Il est possible de modier les r` egles pour que les m ethodes correspondantes construisent une cha ne r eutilisable. grammar CSV; @members{ StringBuilder sb = new StringBuilder(); } ... file returns [String s] : {sb.append("<table align=\"center\" border=\"1\"> \n");} line (NEWLINE line)* NEWLINE? EOF {sb.append("</table>\n"); s = sb.toString();} ; line : {sb.append(" <tr>\n");} record+ {sb.append(" </tr>\n");} 122 NF11

13.6. TRADUCTION DE LANGAGE ; record : {sb.append(" <td>");} r=RECORD COMMA? {sb.append($r.getText()); sb.append("</td>\n");} ;

Claude Moulin

123

CHAPITRE 13. ANALYSE SEMANTIQUE

124

NF11

BIBLIOGRAPHIE

Bibliographie
[1] A. Aho, R. Sethi, and J. D. Ullman. Compilateurs Principes, techniques et outils. InterEditions, 1991. [2] A. Aho and J. D. Ullman. Concepts fondamentaux de lInformatique. Dunod, 1993. [3] A. W. Appel. Modern compiler implementation in java. Cambridge, 2002. [4] Jerey E.F. Friedl. Ma trise des Expressions R eguli` eres. OReilly, 2003. [5] D. Grune, H. E. Bal, C. J. H. Jacobs, and K. G. Langendoen. Compilateurs, Cours et exercices corrig es. Dunod, 2002. [6] J. E. Hopcroft, R. Motwani, and J. D. Ullman. Introduction to Automata Theory, Languages and Computation. Addison Wesley, 2001. [7] Terence Parr. The Denitive ANTLR Reference. The Pragmatic Programmers, 2007. [8] Terence Parr. Language Implementation Patterns. The Pragmatic Programmers, 2007.

Claude Moulin

125

BIBLIOGRAPHIE

126

NF11

Annexe A G en erateurs danalyseur


A.1 Commandes unix

lex (Lexical Analyzer Generator) ex : version gnu de lex yacc (Yet Another Compiler-Compiler)

Exemple de sp ecications ex Principe : {sp ecications ex} ex programme C

%{ int nbVoyelles, nbConsonnes, nbPonct; %} consonne [b-df-hj-np-xy] ponctuation [,;:?!\.] %% [aeiouy] nbVoyelles++; {consonne} nbConsonnes++; {ponctuation} nbPonct++; \n // ne rien faire %% main() { nbVoyelles = nbConsonnes = nbPonct = 0; yylex(); printf(Nb voyelles : %d - Nb consonnes : %d - Ponctuation : %d, nbVoyelles, nbConsonnes, nbPonct); }

Claude Moulin

127

ERATEURS ANNEXE A. GEN DANALYSEUR

A.2

G en erateurs en langage Java

JLex : Princeton University http://www.cs.princeton.edu/appel/modern/java/JLex/ javaCC : https://javacc.dev.java.net/ AntLR : http://www.antlr.org/ Exemple javacc Principe : {sp ecications javacc} javacc chiers .java

Exemple de lexer reconnaissant des identicateurs ou des entiers PARSER_BEGIN(Parser) package spec; class Parser{ public static void main(String args[]) throws ParseException { java.util.Scanner s = new java.util.Scanner(System.in); System.out.println("Write a string"); String s = scanner.nextLine(); Parser p = new Parser(new StringReader(s)); p.Input(); } } PARSER_END(Parser) TOKEN : { < #CAR: ["a"-"z","A"-"Z"] > | < #DIGIT: ["0"-"9"] > | < ID: <CAR>(<CAR>|<DIGIT>)* > | < #INTPLUS: (["0"-"9"])+ > | < NUM: (<INTPLUS>"."<INTPLUS>) | (<INTPLUS>".") > } void Input() : {Token t = null;} {t = <ID> {System.out.println("Token: " + t.image + "type: " + t.kind);} | t = <NUM> {System.out.println("Token: " + t.image + "type: " + t.kind);} }

128

NF11

Annexe B Le g en erateur AntLR


Cette annexe d ecrit lutilisation de la version 3 du g en erateur de parser AntLR 1 .

B.1
B.1.1

Exemple simple
Introduction

Pour r ealiser les analyses lexicale et syntactique, il faut sp ecier une grammaire (Lexer, Parser) qui d ecrit la fa con de regrouper le ux de caract` eres en un ux de tokens puis danalyser le ux de tokens sortant. Il sut de cr eer un chier dextension .g d enissant les unit es lexicales et syntaxiques de la grammaire. AntLR cr eera de lui-m eme un chier annexe contenant la grammaire du lexer. On peut ajouter ` a la grammaire des actions regroupant des lignes de code du m eme langage que celui utilis e pour le code g en er e pour les lexer et parser. Les unit es lexicales sont ecrites en majuscules. Une r` egle du parser est utilis ee comme axiome de la grammaire. AntLR g en` ere les classes correspondant au lexer et au parser.

B.1.2

Grammaire

grammar SimpleGrammar; ALPHA : (a..z|A..Z)+ {System.out.println("Found alpha: "+getText());} ; NUMERIC : 0..9+ {System.out.println("Found numeric: "+getText());} ; EXIT : . {System.exit(0);}; prog : ALPHA NUMERIC EXIT ;
1. Site AntLR : http://www.antlr.org

Claude Moulin

129

ERATEUR ANNEXE B. LE GEN ANTLR

B.2
B.2.1

Mise en uvre
G en eration des classes en ligne de commande

Il faut ex ecuter AntLR sur le chier SimpleGrammar.g qui contient la description des unit es lexicales. Le nom du chier doit etre identique au nom de la grammaire. A partir de lexemple pr ec edent, les classes cr e ees porteront les noms : SimpleGrammarLexer et SimpleGrammarParser. Apr` es avoir mis ` a jour la variable PATH (pour acc eder ` a Java - version 1.4 ou sup erieure) et la variable CLASSPATH (les librairies utiles sont disponibles sur le site AntLR : antlr-3.0.jar, stringtemplate-3.0.jar et antlr-2.7.7.jar ), il sut dex ecuter une ligne de commande telle que :
java org.antlr.Tool SimpleGrammar.g

B.2.2

Exemple de chier batch sous Windows

On suppose Java, install e sur la machine h ote. Dans un r epertoire on copie le chier de grammaire (SimpleGrammar.g). On cr ee un r epertoire lib contenant les librairies java requises pour le fonctionnement de AntLR (antlr-3.0.jar, stringtemplate3.0.jar, antlr-2.7.7.jar). On cr ee au m eme niveau le chier .bat suivant :
set SAVECLASSPATH=%CLASSPATH% set CLASSPATH=../lib/antlr-3.0.jar;../lib/stringtemplate-3.0.jar; ../lib/antlr-2.7.7.jar java org.antlr.Tool SimpleGrammar.g pause set CLASSPATH=%SAVECLASSPATH%

B.2.3

Outil ANTLRWorks

Il est recommand e d ecrire la grammaire avec loutil ANTLRWorks 2 . Cet editeur poss` ede de nombreuses fonctionnalit es et en particulier g en` ere les classes correspondant ` a la grammaire. Il est possible de congurer cet outil de fa con ` a ce que les classes g en er ees soient accessibles ` a partir dun environnement de d eveloppement tel quEclipse 3 , o` u lon peut visualiser les erreurs de compilation dues au code ins er e dans les actions. ANTLRWorks permet dindiquer lendroit o` u les classes sont g en er ees et le package quelles respectent. La gure B.1 montre linterface de loutil ANTLRworks ` a partir de la grammaire de la section B.3. Elle montre egalement larbre de d erivation de lexpression : ab = 5 4 + 1.
2. Site ANTLRWorks : http://www.antlr.org/works/ 3. Site Eclipse : http://www.eclipse.org

130

NF11

B.2. MISE EN UVRE

B.2.4

Ex ecution

Programme principal On peut ajouter les lignes suivantes ` a la grammaire juste apr` es la d eclaration du nom de la grammaire pour d enir les packages des classes cr e ees :
@header { package annexeb; } @lexer::header {package annexeb;}

Fig. B.1 Interface de ANTLRWorks Pour utiliser les classes cr e ees, il faut les instancier. On peut par exemple dans le m eme package cr eer une classe contant une m ethode main telle que :
package annexeb; import java.io.ByteArrayInputStream; import java.util.Scanner; import org.antlr.runtime.ANTLRInputStream;

Claude Moulin

131

ERATEUR ANNEXE B. LE GEN ANTLR


import org.antlr.runtime.CommonTokenStream; public class SimpleGrammarMain { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Texte : "); String s = scanner.nextLine(); ByteArrayInputStream bais = new ByteArrayInputStream(s.getBytes()); try { ANTLRInputStream input = new ANTLRInputStream(bais); SimpleGrammarLexer lexer = new SimpleGrammarLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); SimpleGrammarParser parser = new SimpleGrammarParser(tokens); parser.prog(); } catch(Exception ex) { ex.printStackTrace(); } } }

La saisie dun exemple se fait au clavier apr` es linvite Texte. La m ethode cr ee un ux de caract` eres qui est associ e au lexer. Un ux de tokens est cr e e ` a partir du lexer qui est associ e au parser. Il sut alors dappeler la m ethode correspondant a laxiome de la grammaire. Selon celle-ci, il sut de taper deux fois une suite de ` lettres et une suite de chires puis un point. Le point fait sortir du programme. Le programme ache les lettres et les chires tap es. Fonctionnement AntLr a cr e e une classe lexer et une classe parser dans le package sp eci e (dans lexemple appel ees SimpleGrammarLexer et SimpleGrammarParser). Les unit es lexicales permettent dajouter des m ethodes de la classe lexer. Ainsi lunit e ALPHA sera associ ee ` a la m ethode mALPHA() permettant danalyser une suite de lettres. Les r` egles du parser sont associ ees ` a des m ethodes de la classe parser : ainsi la r` egle prog donne une m ethode prog(). M eta-langage AntLr () ( )* ( )+ ( )? | .. . 132 R` egle 0 ou plus 1 ou plus 0 ou 1 Alternative Intervalle N egation caract` ere quelconque NF11

B.3. AUTRE EXEMPLE

B.3

Autre exemple

La grammaire suivante permet d ecrire des expressions num eriques. Les r` egles du parser sont en minuscule ; celles du lexer en majuscule. Lexer et parser ne sont pas s epar es.

B.3.1

Grammaire

grammar Expression; @lexer::header { package expression; } @header { package expression; } prog: stat: | | ; expr: ; stat+ ; expr NEWLINE ID = expr NEWLINE NEWLINE

multExpr ((+|-) multExpr)*

multExpr : atom (* atom)* ; atom: | | ; INT ID ( expr )

ID : (a..z|A..Z)+ ; INT : 0..9+ ; NEWLINE:\r? \n ; WS : ( |\t)+ {skip();} ;

expression.ExpressionLexer et expression.ExpressionParser sont les deux classes cr e ees par AntLR. La m ethode associ ee ` a laxiome de la grammaire est prog. Claude Moulin 133

ERATEUR ANNEXE B. LE GEN ANTLR

B.3.2

Ex ecution

Lex ecution est r ealis ee ` a partir dun chier contenant des expressions par une m ethode main telle que :
public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("expression/expression.prg"); ANTLRInputStream input = new ANTLRInputStream(fis); ExpressionLexer lexer = new ExpressionLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); ExpressionParser parser = new ExpressionParser(tokens); parser.prog(); } catch(Exception ex) { ex.printStackTrace(); } }

A ce stade, le parser na pas de sortie et nindique pas les expressions mal construites. Il serait n ecessaire de compl eter la grammaire en vue dune utilisation particuli` ere du parser.

B.4
B.4.1

Cr eation de larbre AST


Cr eation par d efault

AntLR donne la possibilit e de cr eer automatiquement, semi-automatiquement ou manuellement larbre AST, structure interm ediaire dun programme compatible avec la grammaire. Il faut tout dabord ajouter une section options indiquant au parser de cr eer larbre : grammar Expression; options { language = Java; output = AST; } Les m ethodes du parser associ ees aux r` egles de la grammaire ne sont alors plus de type void mais dun type structur e dont le nom reprend celui de la m ethode. Ainsi la m ethode stat sera de type stat_return sous-classe de ParserRuleReturnScope. Pour chaque r` egle, AntLR cr ee une racine darborescence. Pour chaque token pr esent dans une r` egle, il cr ee un noeud (Tree) et lajoute comme ls du noeud courant. Par d efaut les noeuds forment une liste et antlr attache les noeuds de la liste ` a un noeud racine de type nil. 134 NF11

B.4. CREATION DE LARBRE AST

B.4.2

Cr eation automatique

Pour ne pas cr eer un noeud pour un token particulier, il sut de le suxer avec un !. Pour cr eer un noeud racine ` a partir dun token particulier, il sut de le suxer avec un ^. A partir des r` egles du parser suivantes : prog: stat+ ; stat: expr NEWLINE! | ID =^ expr NEWLINE! | NEWLINE! ; expr: multExpr ((+^|-^) multExpr)* ; multExpr : atom (*^ atom)* ; atom: n=INT {System.out.println("Entier : " + $n.text);} | ID | (! expr )! ; et avec le programme suivant : 25 + 3 * 4 ab = 10 * (5 - 2) On obtient larbre suivant qui est une liste : (+ 25 (* 3 4)) (= ab (* 10 (- 5 2)))

B.4.3

Code

public static void mainAST() { try { FileInputStream fis = new FileInputStream("expression/expression.prg"); ANTLRInputStream input = new ANTLRInputStream(fis); ExpressionLexer lexer = new ExpressionLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); ExpressionParser parser = new ExpressionParser(tokens); prog_return r = parser.prog(); CommonTree t = (CommonTree) r.getTree(); System.out.println(t.toStringTree()); } catch(Exception ex) { ex.printStackTrace(); } }

Claude Moulin

135

ERATEUR ANNEXE B. LE GEN ANTLR

B.4.4

Achage de larbre

En utilisant les classes ASTFrame et ASTtoTreeModelAdapter ecrites par J. Werner, il est possible de cr eer une fen etre pr esentant larbre : Il sut dajouter les deux

Fig. B.2 Arbre AST lignes suivantes au code pr ec edent : ASTFrame af = new ASTFrame("Arbre", t); af.setVisible(true);

B.4.5

Cr eation manuelle de larbre

Il est parfois plus simple dindiquer directement larborescence qui doit etre construite ` a partir dune r` egle. La g en eration de larbre peut etre d ecrite dans la grammaire en utilisant -> : prog: stat+ ; stat: expr NEWLINE -> expr | ID = expr NEWLINE -> ^(= ID expr) | NEWLINE -> ; expr: multExpr ((+^|-^) multExpr)* ; multExpr : atom (*^ atom)* ; atom: n=INT {System.out.println("Entier : " + $n.text);} | ID | ( expr ) -> expr ; On peut ins erer des noeuds imaginaires facilitant lanalyse ult erieure : prog: stat+ -> ^(PROG stat+) PROG est simplement d eclar e comme un token non d eni par une expression r eguli` ere. 136 NF11

B.5. ACTIONS ANTLR

B.5

Actions AntLR

Il est possible dins erer des actions ecrites dans le langage cible ` a tout endroit de la grammaire.

B.5.1

Actions du parser

Il est possible de r eutiliser les tokens issus du lexer. atom: n=INT {System.out.println("Entier : " + $n.text);} | ID | ( expr ) ; Dans la r` egle pr ec edente n est un objet de type Token. On le r eutilise en ecrivant $n dans le code de laction. text est un attribut de lobjet Token.

B.5.2

Variables et m ethodes globales

La section @members permet de d enir des m ethodes et des variables dinstance de lobjet parser cr e e. Elles sont appel ees dans le code sans ajouter de symbole particulier. La communication dinformation entre les r` egles appel ees lors dune analyse est ainsi simpli ee. Une r` egle peut avoir besoin de variables locales. Elles sont alors d eclar ees et initialis ees dans la section @init de la r` egle. Lexemple suivant montre lusage de ces divers el ements. grammar CSVString; @header{ package csv; } @lexer::header{ package csv; } @members{ StringBuilder sb = new StringBuilder(); } COMMA : , ; RECORD : (A..Z | a..z |0..9)+ ; NEWLINE : \r? \n ; WS : ( |\t)+ {skip();} ; file returns [String s] : {sb.append("<table align=\"center\" border=\"1\"> \n");} line (NEWLINE line)* NEWLINE? EOF {sb.append("</table>\n"); s = sb.toString();} Claude Moulin 137

ERATEUR ANNEXE B. LE GEN ANTLR ; line @init {String tagin = " <tr>\n", tagout = " </tr>\n";}: {sb.append(tagin);} record+ {sb.append(tagout);} ; record : {sb.append(" <td>");} r=RECORD COMMA? {sb.append($r.getText()); sb.append("</td>\n");} ;

138

NF11

Annexe C Introduction ` a Java 5.0


C.1
C.1.1

Introduction
Objectifs

Lobjectif de cette annexe est dintroduire les principales notions de la programmation objet et les principaux el ements de la syntaxe Java. La version de Java utilis ee est la version 5.0 Tiger. Il ne sagit pas dune liste exhaustive des caract eristiques de java. Les exemples sont volontairement choisis en direction de la th eorie des langages. Introduction de fa con lin eaire

C.1.2

Environnements de d eveloppement

Il y a deux fa cons d ecrire des programmes Java et de les ex ecuter : Sans utiliser denvironnement de d eveloppement Ecrire le code dans un simple editeur de texte Compiler et ex ecuter le code en ligne de commande En utilisant un environnement de d eveloppement Les environnements les plus utilis es sont : Eclipse : http://www.eclipse.org/ Netbeans : http://www.netbeans.com Borland JBuilder : http://www.borland.com/jbuilder Avantages Compilation, ex ecution, debugging dans un seul environnement Compl etion du code source Possibilit e daugmenter lenvironnement Claude Moulin 139

` JAVA 5.0 ANNEXE C. INTRODUCTION A Dans cette initiation, tous les exemples sont suppos es cr e es dans lenvironnement Eclipse, version 3.2. Certaines actions d ecrites comme obligatoires sont en r ealit e parfois simplement conseill ees, mais une bonne programmation orient ee objet les requiert comme telles.

C.2
C.2.1

Programmation orient ee objet


Classes et Objets

Lunit e de base est lobjet. Une application est un ensemble dobjets communiquant entre eux. Un objets contient notamment des donn ees (appel ees attributs) et stock es dans les variables dinstance. Un objet peut eectuer une s erie dactions (traditionnellement nomm ee m ethodes) utilisant les donn ees internes de lobjets et des param` etres. A un moment donn e de lex ecution dun programme, chaque attribut a une valeur. Lensemble des valeurs des attributs de lobjet d etermine l etat courant de lobjet. Cet etat ne peut changer que si une m ethode de lobjet est invoqu ee. Il faut commencer par d enir les cat egories des objets (leurs classes) en d ecrivant leurs attributs et leurs m ethodes. Le concept permettant cela est celui de classe. Une classe d ecrit une m ethode particuli` ere destin ee ` a construire un objet correspondant, une instance de cette classe. Une classe doit etre egalement consid er ee comme une entit e faisant partie dun programme. Elle peut contenir des attributs, stock es dans des variables de classe et des m ethodes de classe. A cet egard, il faut concevoir une classe comme une instance de la classe Class. Pour di erencier les champs des objets de ceux de la classe ces derniers sont pr ec ed es du modicateur static. L ecriture dune classe comporte donc : la d eclaration des variables des instances de cette classe la d eclaration des m ethodes des instances de cette classe la d eclaration des variables de cette classe la d eclaration des m ethodes de cette classe la d eclaration des m ethodes constructeurs des instances de cette classe

C.2.2

API Java

Java d enit un ensemble de classes pr etes ` a etre utilis ees. Elles constituent lAPI java (Application Programming Interface) cest-` a-dire lensemble des ressources utilisables par toute application. Il est int eressant de consulter r eguli` erement la description de cette API (http://java.sun.com/j2se/1.5.0/docs/api/index.html). Les classes sont regroup ees en packages ayant une nalit e particuli` ere. Par exemple les packages suivant sont fr equemment utilis es : java.io : Classes pour le syst` eme dentr ee/sortie (ex: File) java.lang : Classes fondamentales pour la conception (ex : Math, String, System) 140 NF11

OBJET C.2. PROGRAMMATION ORIENTEE java.util : Classes collections de structures, classes utilitaires diverses (ex : Vector, Scanner) javax.swing : Interfaces graphiques (ex : Frame) Le nom complet dune classe est compos e du nom du package auquel elle appartient suivi du nom local. Une classe est encore appel ee le type de ses instances.

C.2.3

Entr ees-Sorties sur la console

Lentr ee standard est un objet de type InputStream et la sortie standard est un objet de type PrintStream. Ce sont les variables in et out de la classe System. Les premi` eres applications que lon cr ee font g en eralement intervenir ces deux objets pr ed enis. Exemple dinstruction pour ecrire une cha ne sur la console : System.out.println("Cha^ ne"); Lobjet in est moins ais e` a utiliser et Java 5.0 d enit les objets Scanner qui permettent des saisies clavier plus simple : Scanner scanner = new Scanner(System.in); String s = scanner.nextLine();

C.2.4

Une application en Java

Pour cr eer une application, il sut dimpl ementer une m ethode particuli` ere, la m ethode main dune classe quelconque. Cette m ethode a la signature suivante : public static void main(String[] args) {...} Cest une m ethode de type void, cest-` a-dire ne retournant pas de valeur et prenant en param` etre un tableau de cha nes contenant les param` etres de la ligne de commande. Pour lancer une application il sut dex ecuter cette m ethode. Exemple 1 Le premier exemple consiste ` a consid erer une cha ne structur ee de la fa con suivante : une cha ne est constitu ee dun ou de plusieurs caract` eres. // Nom du package de la classe package intro.java; // Classes ` a importer import java.util.Scanner; // Nom de la classe public class Exemple { // M ethode main ex ecutable public static void main(String[] args) { // Appel dune m ethode de la classe Exemple exp1(); Claude Moulin 141

` JAVA 5.0 ANNEXE C. INTRODUCTION A } // D eclaration de la m ethode exp1 public static void exp1() { // Instanciation dun objet Scanner permettant les entr e ees console Scanner scanner = new Scanner(System.in); // Lecture dune cha^ ne sur la console String s = scanner.nextLine(); // Affichage de chaque caract` ere de la cha^ ne entr ee sur la console for (int i = 0; i < s.length() ; i++) { System.out.println(s.charAt(i)); } } } Dans lexemple pr ec edent scanner, s, i sont des variables locales ` a la m ethode exp1. Ce ne sont ni des variables dinstances ni des variables de classes.

C.3
C.3.1

ements de base El
Types primitifs

Les types de donn ees primitifs regroupent les valeurs num eriques enti` eres ou d ecimales, les caract` eres simples et Unicode ainsi que les bool eens true et false. Le langage propose un grand nombre de types num eriques. On peut classer ces types en deux cat egories : les types entiers et les types d ecimaux. Ce qui di erencie les types dune m eme cat egorie, cest la taille de m emoire utilis ee pour contenir une valeur. byte short int long oat double char boolean nombres entiers binaires 8 bits. nombres entiers courts sur 16 bits. nombres entiers sur 32 bits. nombres entiers longs sur 64 bits. nombres ` a virgule ottante sur 32 bits. nombres ` a virgule ottante double sur 64 bits. caract` eres Unicode sur 16 bits. true ; false; bool een sur 1 bit.

C.3.2

Types des variables

Si une variable est d eclar ee de type primitif (caract` ere, nombre, bool een), elle contient physiquement une valeur. Lors des appels de m ethodes les param` etres de type primitif sont pass es par valeur. Si une variable contient une instance dune classe, elle contient en fait une r ef erence, cest-` a-dire ladresse m emoire o` u linformation relative ` a lobjet stock ee. Lors des appels de m ethodes les param` etres de type non primitif sont pass es par r ef erence. Il peut exister plusieurs r ef erences sur le m eme objet. Une m ethode peut construire 142 NF11

EMENTS C.3. EL DE BASE un objet aussi complexe soit-il. Seule, une r ef erence sera retourn ee. La classe String nest pas un type primitif. La comparaison de cha nes doit se faire par la m ethode equals.

C.3.3

Structures de contr ole des m ethodes

Structure conditionnelle Alternative simple : if (expression bool eenne) blocvrai; else blocfaux; Alternative multiple : switch (variable){ case cas1: // instructions cas1 break ; //si ce break est omis, on ex ecute aussi instruc21 et instruc22 case cas2 : instructions cas2 break; ... default : instructions par defaut } Dans une structure alternative multiple, la variable doit etre dun type scalaire, cest-` a-dire compl` etement ordonn e. Op erateur ternaire : variable = condition ? expression si condition Vraie : expression si condition Fausse Structure r ep etitive Boucle FOR for (initialisation; condition; mise ` a jour){ instructions } Initialisation : suite dinstructions ` a ex ecuter par le programme avant de rentrer pour la premi` ere fois dans la boucle. Condition : suite de conditions ex ecut ees en n de boucle. Elles permettent de continuer la r ep etition. Mise ` a jour : suite dinstructions ex ecut ees chaque fois que la boucle est termin ee avant le test de continuit e. Claude Moulin 143

` JAVA 5.0 ANNEXE C. INTRODUCTION A Boucle WHILE while (test logique) { instructions } Le test est eectu e avant les instructions de la boucle. Tant que le test renvoie la valeur true les instructions de la boucle sont ex ecut ees. La boucle nest pas ex ecut ee si le test renvoie false ` a sa premi` ere evaluation. On utilise plut ot une boucle for lorsque la condition porte egalement sur un compteur de boucle.

Exemple 2 Nous ecrivons simplement une m ethode exp2 qui pourrait etre substitu ee ` a la m ethode exp1 de lexemple C.2.4. Consid erons une cha ne qui contient une s erie de lettres suivie par une s erie de chires telle que : abcdef1234. On peut penser ` a la m ethode suivante pour analyser la cha ne. public static void exp2() { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); StringBuilder letters = new StringBuilder(); StringBuilder digits = new StringBuilder(); int i = 0; boolean exist = true; char c = s.charAt(i); while (exist && Character.isLetter(c)) { letters.append(c); i++; exist = i < s.length(); if (exist) c = s.charAt(i); } while (exist && Character.isDigit(c) ) { digits.append(c); i++; exist = i < s.length(); if (exist) c = s.charAt(i); } System.out.println(letters.toString()); System.out.println(digits.toString()); } 144 NF11

EMENTS C.3. EL DE BASE Exemple 3 Lexemple C.3.3 peut etre r ecrit en : public static void exp3() { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); StringBuilder letters = new StringBuilder(); StringBuilder digits = new StringBuilder(); int i; for (i = 0 ; i < s.length() && Character.isLetter(s.charAt(i)); i++) { letters.append(s.charAt(i)); } for (; i < s.length() && Character.isDigit(s.charAt(i)); i++ ) { digits.append(s.charAt(i)); } System.out.println(letters.toString()); System.out.println(digits.toString()); } La reconnaissance de la structure entra ne la confrontation des caract` eres entr es avec une s erie de contraintes dict ees par la structure. Apr` es avoir analys e la cha ne dentr ee, le programme fournit les groupes de caract` eres associ es avec les el ements de la structure tels que les lettres et les chires. On peut consid erer la cha ne dentr ee ` a deux niveaux : le niveau caract` ere et le niveau de la structure de la cha ne. On peut voir la structure de caract` eres contenus dans la cha ne comme une suite de lettres et une suite de chires. On peut aussi interpr eter la suite de chires comme un identicateur et la suite de chires comme un entier. La structure de la cha ne devient alors : un identicateur suivi par un entier. Au deux niveaux, on parle de langages. Les symboles du langage au niveau caract` ere sont les lettres et les chires. Les symboles du langage au niveau de la structure sont <identicateur> et <entier>.

Exemple 4 Comment construire un analyseur daectation? x=25; On consid` ere quil existe une variable dinstance, c par exemple, qui contient toujours le prochain caract` ere ` a analyser. On ecrit : une m ethode qui analyse le niveau le plus elev e du langage. les m ethodes appel ees par la premi` ere et qui d ecrivent une structure interm ediaire. ainsi de suite les m ethodes jusquau niveau le plus el ementaire : le niveau caract` ere On pourrait obtenir dans cette approche top-down : 1. aectation Claude Moulin 145

` JAVA 5.0 ANNEXE C. INTRODUCTION A 2. identicateur ; entier 3. caract` ere courant ; consume

C.4

Construction dune classe

Supposons que nous voulions construire un analyseur permettant de reconna tre une cha ne pouvant contenir plusieurs aectations. Pour simplier lexercice nous consid erons que la cha ne doit etre termin e par le symbole *. La saisie de la cha ne est dissoci ee de lanalyse elle-m eme.

C.4.1

Port ee - Visibilit e

Les variables ne sont accessibles que dans le bloc de code o` u elles sont d eclar ees. Private Les variables dinstances permettent de d enir l etat dun objet. Lensemble des valeurs des variables dinstances d enit l etat de lobjet ` a un instant de lex ecution. Les variables dinstances devraient toutes etre priv ees, cest-` a-dire accompagn ees du modicateur dacc` es private. On ne peut acc eder ` a ces variables que dans les m ethodes de la classe. Une instance dune classe peut cependant voir les attributs priv es dune autre instance de la m eme classe. private String input; Les m ethodes dinstance accessoires doivent etre egalement d eclar ees private. Public Aucune variable dinstance ne devrait etre d eclar ee publique. Il faut construire les accesseurs ` a ce type de variables. Les variables d eclar ees public sont accessibles a partir de toute classe. ` public void parse() { ... } Protected Une m ethode d eclar ee protected dans une classe est accessible par les seules sous-classes. protected void parse() { ... }

C.4.2

Constructeurs

Un constructeur est une m ethode sp eciale dune classe, permettant dinitialiser ses variables dinstances et dex ecuter di erentes op erations dinitialisation. ParserSimpleImpl(String input) { this.input = input; 146 NF11

C.4. CONSTRUCTION DUNE CLASSE } Le mot cl e this permet de faire r ef erence ` a lobjet en cours au moment de lex ecution. this.input = input; La variable dinstance input est initialis ee avec le param` etre input. la cr eation dun objet instance dune classe utilise lop erateur new appelant un constructeur. Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); Parsersimple parser = new ParserSimpleImpl(s);

C.4.3

Interface

Une interface d ecrit le comportement dune classe et ne contient que les signatures des m ethodes publiques de la classe. Une public interface ParserSimple { public void parse(); } Une interface est destin ee ` a etre impl ement ee par une ou di erentes classes qui d enissent le corps des m ethodes. public class ParserSimpleImpl implements ParserSimple { ... }

C.4.4

Application simple

Un parser est destin e` a analyser une cha ne. Lunique m ethode du parser int eressant un programme utilisateur est parse et est d eclar ee dans linterface (Section C.4.3) et devra etre impl ement ee. Une application cliente devra egalement savoir comment construire un objet parser (Section C.4.2). Une classe impl ementant linterface requiert deux variables dinstance pour contenir la cha ne ` a analyser et le rang du caract` ere courant lors de lanalyse. public class ParserSimpleImpl implements Parsersimple { private String input; private int rang; ... } Elle doit impl ementer la m ethode parse. Le corps de la m ethode ne fait appara tre que le niveau le plus elev e danalyse (C.3.3, niveau 1) : m ethode affectation. public void parse() { rang = 0; while (currentChar() != *) { //le caract` ere situ e a ` rang affectation(); consume(); // consume le ; } } Claude Moulin 147

` JAVA 5.0 ANNEXE C. INTRODUCTION A Cette m ethode affectation fait elle-m eme appara tre le niveau suivant (C.3.3, niveau 2) : m ethodes identificateur et entier. private void affectation() { String id = identificateur(); System.out.println(id); consume(); // consume le = String n = entier(); System.out.println(n); } Les m ethodes identificateur et entier sont similaires. Elles essaient de reconna tre les caract` eres respectivement comme des lettres ou des chires. private String identificateur() { StringBuilder s = new StringBuilder(); while ( Character.isLetter(currentChar()) ) { s.append(currentChar()); consume(); } return s.toString(); }

C.5
C.5.1

Conteneur G en erique
D eclaration

Consid erons maintenant un parser charg e de m emoriser les tokens, cest-` a-dire les groupements de caract` eres reconnus comme identicateur ou entier. Les tokens sont ici des cha nes. Ils sont ajout es au fur et ` a mesure dans une structure conteneur : une liste de cha nes. Un conteneur g en erique est une structure contenant des objets et connaissant le type des objets quelle contient. Exemple de d eclaration : private ArrayList<String> tokens = null; Exemple dinitialisation : tokens = new ArrayList<String>(); Le parser devra d eclarer une m ethode publique permettant ` a une application client dutiliser les tokens reconnus : public ArrayList<String> getTokens() { return tokens; }

C.5.2

It eration

Java 5.0 ore une fa con simple dit erer sur les objets dun conteneur g en erique. Dans lexemple pr ec edent, les objets contenu dans la structure sont de type String. 148 NF11

C.6. HERITAGE DE CLASSES Lit eration se fait pour chaque objet de la structure : for (String t : parser.getTokens()) { System.out.println(t); }

C.6

H eritage de Classes

Lh eritage est un concept fondamental de la programmation orient ee objet. Il permet de sp ecialiser le comportement dune classe (ses m ethodes) en lui cr eant une ou plusieurs sous-classes. public class ParserIdLCImpl extends ParserAvecGenerique { ... } La sous-classe peut ajouter de nouvelles fonctionnalit es ` a celles existantes dans la super-classes, mais aussi de red enir des m ethodes h erit ees. Celles-ci doivent etre d ecar ees public ou protected pour pouvoir etre red enies. Ainsi, la m ethode affectation doit etre d eclar ee protected dans ParserAvecGenerique, la superclasse, et dans ParserIdLCImpl, la classe d eriv ee. Nous la modions pour que les identicateurs puissent etre compos es dun groupe de lettres suivi eventuellement par un groupe de chires. Les autres m ethodes utilis ees dans la sous-classes doivent etre elles aussi d eclar ees protected. Elles ne sont pas surcharg ees dans la sous-classe. protected void affectation() { // overall structure method getTokens().add(identificateur() + entier()); consume(); // consume le = getTokens().add(entier()); }

C.7
Fran cais

Sites Utiles

http://www.laltruiste.com/coursjava/sommaire.html http://java.developpez.com/cours/ Anglais http://java.sun.com/docs/books/tutorial/index.html

Claude Moulin

149

Vous aimerez peut-être aussi