Vous êtes sur la page 1sur 170

Thorie des langages

Notes de cours

Franois Yvon et Akim Demaille Novembre 2005

Premire partie

Bases

Avertissement au lecteur : Ces notes documentent le cours de thorie des langages enseign dans le cadre de la BCI dinformatique. Ces notes sont, malgr nos eorts, encore largement perfectibles et probablement nonexemptes derreurs. Merci de bien vouloir signaler toute erreur, de syntaxe (un comble !) ou autre aux auteurs (yvon@enst.fr, akim@epita.fr).

Table des matires


I
1

Bases
Mots, Langages 1.1 Quelques langages rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 1.1.2 1.1.3 1.2 La compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bio-informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les langues naturelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1
8 8 8 9 9

Terminologie 1.2.1 1.2.2

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Quelques notions de calculabilit . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.3

Oprations sur les mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.3.1 1.3.2 1.3.3 1.3.4 Facteurs et sous-mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Distances entre mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Ordres sur les mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Quelques rsultats combinatoires lmentaires . . . . . . . . . . . . . . . . . . 14

1.4

Oprations sur les langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.4.1 1.4.2 1.4.3 Oprations ensemblistes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Plus doprations dans P( ) Morphismes

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 18

Langages et expressions rationnels 2.1

Rationalit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.1.1 2.1.2 2.1.3 Langages rationnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Expressions rationnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 quivalence et rductions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2.2 3

Extensions notationnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 24 3

Automates nis

3.1

Automates nis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.1 3.1.2 3.1.3 3.1.4 Bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Spcication partielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 tats utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Automates non-dterministes

3.2

Reconnaissables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.2.1 3.2.2 Oprations sur les reconnaissables . . . . . . . . . . . . . . . . . . . . . . . . . 34 Reconnaissables et rationnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.3

Quelques proprits des langages reconnaissables . . . . . . . . . . . . . . . . . . . . 39 3.3.1 3.3.2 Lemme de pompage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Quelques consquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.4

Lautomate canonique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.4.1 3.4.2 Une nouvelle caractrisation des reconnaissables . . . . . . . . . . . . . . . . 41 Automate canonique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 46

Grammaires syntagmatiques 4.1 4.2

Grammaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 La hirarchie de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 Grammaires de type 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Grammaires contextuelles (type 1) . . . . . . . . . . . . . . . . . . . . . . . . . 49 Grammaires hors-contexte Grammaires rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

Grammaires choix nis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Les productions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 57

Langages et grammaires hors-contexte 5.1

Quelques exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.1.1 5.1.2 La grammaire des djeuners du dimanche . . . . . . . . . . . . . . . . . . . . 57 Une grammaire pour le shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

5.2

Drivations 5.2.1 5.2.2 5.2.3

Drivation gauche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Arbre de drivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Ambigut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.2.4 5.3

quivalence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 . . . . . . . . . . . . . . . . . . . . 66

Les langages hors-contexte 5.3.1 5.3.2 5.3.3

Le lemme de pompage

Oprations sur les langages hors-contexte

Problmes dcidables et indcidables . . . . . . . . . . . . . . . . . . . . . . . 67 69

Introduction au parsage de grammaires hors-contexte 6.1 6.2 6.3 6.4

Graphe de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Reconnaissance ascendante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Reconnaissance descendante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Conclusion provisoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 76

Introduction aux analyseurs dterministes 7.1 Analyseurs LL 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.1.6 7.1.7 7.1.8 7.2

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Une intuition simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Grammaires LL(1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 NULL, FIRST et FOLLOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

La table de prdiction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Analyseurs LL(1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 LL1-isation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Quelques complments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Un exemple complet comment . . . . . . . . . . . . . . . . . . . . . . . . . . 88 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Analyseurs LR 7.2.1 7.2.2 7.2.3 7.2.4 Concepts

Analyseurs LR(0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Analyseurs LR(1), LR(k)... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Complments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 103

Normalisation des grammaires CF 8.1

Simplication des grammaires CF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 8.1.1 8.1.2 8.1.3 8.1.4 8.1.5 Quelques prliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Non-terminaux inutiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Cycles et productions non-gnratives . . . . . . . . . . . . . . . . . . . . . . 105 Productions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 limination des rcursions gauches directes . . . . . . . . . . . . . . . . . . . 108 5

8.2

Formes normales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 8.2.1 8.2.2 Forme normale de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Forme normale de Greibach . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

II
9

Complments : Algorithmes danalyse


Automates pile et langages dterministes 9.1 Automates piles 9.1.1 9.2 Concepts

114
116

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

Les langages des automates pile 9.2.1

PDA et langages hors contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

9.3

Les langages dterministes 9.3.1 9.3.2 9.3.3

Automate pile dterministe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Proprits des langages dterministes . . . . . . . . . . . . . . . . . . . . . . . 122 Dterministes et LR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 124

10 Complments sur les langages hors-contextes

10.1 Complments sur les langages CF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 10.1.1 Langages hors contextes et rationnels . . . . . . . . . . . . . . . . . . . . . . . 124 10.1.2 Enchssement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

10.2 Correspondance de Parikh

10.2.1 Correspondance de Parikh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 10.2.2 Rationnels et les hors-contextes sont lettre-quivalents . . . . . . . . . . . . . 130 10.3 Langages parenthss, langages hors-contexte . . . . . . . . . . . . . . . . . . . . . . 130 10.3.1 Langages de Dyck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 10.3.2 Deux nouvelles caractrisations des langages CF 11 Problmes dcidables et indcidables . . . . . . . . . . . . . . . . 131 135

11.1 Lexpressivit calculatoire des systmes de rcriture . . . . . . . . . . . . . . . . . . . 135 11.1.1 Le problme des mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 11.1.2 Le problme de Post . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 11.2 Quelques problmes pour les CFG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 11.2.1 L intersection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 11.2.2 Une rafale de problmes indcidables . . . . . . . . . . . . . . . . . . . . . . . 138

12 Parsage tabulaire 12.1 Analyser des langages ambigus avec CYK

140 . . . . . . . . . . . . . . . . . . . . . . . . 140

12.1.1 Les grammaires pour le langage naturel . . . . . . . . . . . . . . . . . . . . . . 140 12.1.2 Table des sous-chanes bien formes . . . . . . . . . . . . . . . . . . . . . . . . 142 12.1.3 Lalgorithme CYK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 12.1.4 Du test dappartenance lanalyse . . . . . . . . . . . . . . . . . . . . . . . . . 145 12.2 Algorithme dEarley et ses variantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 12.2.1 Table active des sous-chanes bien formes . . . . . . . . . . . . . . . . . . . . 146 12.2.2 La rgle fondamentale du parsage tabulaire . . . . . . . . . . . . . . . . . . . 147 12.2.3 Parsage tabulaire ascendant 12.2.4 Coin gauche . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

12.2.5 Une stratgie mixte : lalgorithme dEarley . . . . . . . . . . . . . . . . . . . . 151 12.3 Complments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 12.3.1 Vers le parsage dductif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 12.3.2 Dautres stratgies de parsage . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 13 Grammaires darbre adjoints 156

13.1 Les grammaires darbre adjoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 13.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

13.1.2 Quelques proprits des TAGs . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 13.1.3 Deux formalismes quivalents aux TAGs . . . . . . . . . . . . . . . . . . . . . 165 13.2 Analyser les TAGs la CYK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Chapitre 1

Mots, Langages
Lobjectif de ce chapitre est de fournir une introduction aux modles utiliss en informatique pour dcrire, reprsenter et eectuer des calculs sur des squences nies de symboles. Avant dintroduire de manire formelle les concepts de base auxquels ces modles font appel ( partir de la section 1.2), nous prsentons quelques-uns des grands domaines dapplication de ces modles, permettant de mieux saisir lutilit dune telle thorie. Cette introduction souligne galement la liation multiple de ce sous-domaine de linformatique thorique dont les principaux concepts et outils trouvent leur origine aussi bien du ct de la thorie des compilateurs que de la linguistique formelle.

1.1
1.1.1

Quelques langages rels


La compilation

On dsigne ici sous le terme de compilateur tout dispositif permettant de transformer un ensemble de commandes crites dans un langage de programmation en un autre langage (par exemple une srie dinstructions excutables par une machine). Parmi les tches prliminaires que doit eectuer un compilateur, il y a lidentication des squences de caractres qui forment des mots-cls du langage ou des noms de variables licites ou encore des nombres rels : cette tape est lanalyse lexicale. Ces squences scrivent sous la forme dune succession nie de caractres entrs au clavier par lutilisateur : ce sont donc des squences de symboles. Dun point de vue formel, le problme que doit rsoudre un analyseur lexical consiste donc caractriser et discriminer des squences nies de symboles, permettant de segmenter le programme, vu comme un ux de caractres, en des units cohrentes et de catgoriser ces units entre, par exemple : mot-cl, variable, constante... Seconde tche importante du compilateur : dtecter les erreurs de syntaxe et pour cela identier, dans lensemble des squences dnies sur un alphabet contenant les noms de catgories lexicales (mot-cl, variable, constante...), ainsi quun certain nombre doprateurs (+, , , :, ...) et de symboles auxiliaires ({, }, . . . ), les squences qui sont des programmes correctement forms (ce qui ne prsuppose en rien que ces programmes seront sans bogue, ni quils font exactement ce que leur programmeur croit quils font !). Lanalyse syntaxique se proccupe, en particulier, de vrier que les expressions arithmtiques sont bien formes, que les blocs de programmation ou les constructions du langages sont respectes... Comme chacun en a fait lexprience, tous les programmes ne sont pas syntaxiquement corrects, gnrant des messages de plainte de la part des compilateurs. 8

Lensemble des programmes corrects dans un langage de programmation tel que Pascal ou C est donc galement un sous-ensemble particulier de toutes les squences que nies lon peut former avec les atomes du langage. En fait, la tche de lanalyseur syntaxique va mme au-del de ces contrles, puisquelle vise mettre en vidence la structure interne des squences de symboles quon lui soumet. Ainsi par exemple, un compilateur dexpression arithmtique doit pouvoir analyser une squence telle que Var + Var Var comme Var + (Var Var), an de pouvoir eectuer correctement le calcul requis. Trois problmes majeurs donc pour les informaticiens : dnir la syntaxe des programmes bien forms, discriminer les squences datomes respectant cette syntaxe et identier la structuration interne des programmes, permettant de dterminer la squence dinstructions excuter.

1.1.2

Bio-informatique

La biologie molculaire et la gntique fournissent des exemples naturels dobjets modlisables comme des squences linaires de symboles dans un alphabet ni. Ainsi chaque chromosome, porteur du capital gntique, est-il essentiellement form de deux brins dADN : chacun de ces brins peut tre modlis (en faisant abstraction de la structure tridimensionnelle hlicodale) comme une succession de nuclotides, chacun compos dun phosphate ou acide phosphorique, dun sucre (dsoxyribose) et dune base azote. Il existe quatre bases direntes : deux sont dites puriques (la guanine G et ladnine A), les deux autres sont pyrimidiques (la cytosine C et la thymine T), qui fonctionnent par paire, la thymine se liant toujours ladnine et la cytosine toujours la guanine. Linformation encode dans ces bases dterminant une partie importante de linformation gntique, une modlisation utile dun brin de chromosome consiste en la simple squence linaire des bases qui le composent, soit en fait une (trs longue) squence dnie sur un alphabet de quatre lettres (ATCG). A partir de ce modle, la question se pose de savoir rechercher des squences particulires de nuclotides dans un chromosome ou de dtecter des ressemblances/dissemblances entre deux (ou plus) fragments dADN. Ces ressemblances gntiques vont servir par exemple quantier des proximits volutives entre populations, localiser des gnes remplissant des mmes fonctions dans deux espces voisines ou encore raliser des tests de familiarit entre individus. Rechercher des squences, mesurer des ressemblances constituent donc deux problmes de base de la bioinformatique. Ce type de calculs ne se limite pas aux gnes et sont aussi utilises pour les protines. En eet, la structure primaire des protines peut tre modlise par la simple squence linaire des acides amins quelle contient et qui dtermine une partie des proprits de la protine. Les acides amins tant galement en nombre ni (20), les protines peuvent alors tre modlises comme des squences nies sur un alphabet comportant 20 lettres.

1.1.3

Les langues naturelles

Par langue naturelle, on entend tout simplement les langues qui sont parles (parfois aussi crites) par les humains. Les langues humaines sont, de multiples niveaux, des systmes de symboles : les suites de sons articules pour changer de linformation sanalysent, en dpit de la variabilit acoustique, comme une squence linaire unidimensionnelle de symboles choisis parmi un inventaire ni, ceux que lon utilise dans les transcriptions phontiques. Toute suite de son nest pas pour autant ncessairement une phrase articulable, encore moins une phrase comprhensible ; 9

les systmes dcriture utilisent universellement un alphabet ni de signes (ceux du franais sont des symboles alphabtiques) permettant de reprsenter les mots sous la forme dune suite linaire de ces signes. L encore, si tout mot se reprsente comme une suite de lettres, la rciproque est loin dtre vraie ! Les suites de lettres qui sont des mots se trouvent dans les dictionnaires1 ; si lon admet, en premire approximation, que les dictionnaires reprsentent un nombre ni de mots, alors les phrases de la langue sont aussi des squences dlments pris dans un inventaire ni (le dictionnaire, justement). Toute suite de mots nest pas une phrase grammaticalement correcte, et toutes les phrases grammaticalement correctes ne sont pas ncessairement comprhensibles. Sattaquer au traitement informatique des noncs de la langue naturelle demande donc, de multiples manires, de pouvoir distinguer ce qui est de la langue de ce qui nen est pas. Ceci permet par exemple denvisager de faire ou proposer des corrections. Le traitement automatique demande galement didentier la structure des noncs (o est le sujet ?, o est le groupe verbal ?...) pour vrier que lnonc respecte des rgles de grammaire (le sujet saccorde avec le verbe) ; pour essayer de comprendre ce que lnonc signie : le sujet du verbe est ( lactif) lagent de laction ; voire pour traduire dans une autre langue (humaine ou informatique !). De nombreux problmes du traitement des langues naturelles se modlisent comme des problmes de thorie des langages, et la thorie des langages doit de nombreuses avances aux linguistes formels.

1.2
1.2.1

Terminologie
Bases

tant donn un ensemble ni de symboles , que lon appelle lalphabet , on appelle mot toute squence nie (ventuellement vide) dlments de . Par convention, le mot vide est note . La longueur dun mot u, note | u | , correspond au nombre total de symboles de u (chaque symbole tant compt autant de fois quil apparat). Par convention, | | = 0. Autre notation utile, | u | a compte le nombre total doccurrences du symbole a dans le mot u. On a naturellement : | u | = a | u | a . Lensemble de tous les mots forms partir de lalphabet (resp. de tous les mots non-vides) est not (resp. + ). Un langage sur est un sous-ensemble de . Lopration de concatnation de deux mots u et v de rsulte en un nouveau mot uv, constitu par la juxtaposition des symboles de u et des symboles de v. On a alors | uv | =| u | + | v | et une relation similaire pour les dcomptes doccurrences. La concatnation est une opration interne de ; elle est associative, mais pas commutative (sauf dans le cas dgnr o ne contient quun seul symbole). est llment neutre pour la concatnation : u = u = u. Conventionnellement, on notera un la concatnation de n copies de u, avec bien sr u0 = . Si u se factorise sous la forme u = xy, alors on crira y = x1 u et x = uy1 . , muni de lopration de concatnation, possde donc une structure de monode (rappelons : un monode est un ensemble muni dune opration interne associative et dun lment neutre ; lorsquil ny a pas de dlment neutre on parle de semi-groupe ). Ce monode est le monode libre engendr par : tout mot u se dcompose de manire unique comme concatnation de symboles de . Quelques exemples de langages dnis sur lalphabet = {a, b, c}. vaut alors = {, a, b, c, ab, ba, . . .}
1

Pas toutes : penser aux formes conjugues, aux noms propres, aux emprunts, aux nologisme, aux argots...

10

{, a, b, c}, soit tous les mots de longueur strictement infrieure 2 ; {ab, acb, aab, acab, aabb, . . .}, soit tous les mots qui commencent par un a et nissent par un b ; {, ab, aabb, aaabbb, . . .}, soit tous les mots contenant n a suivis dautant de b. Ce langage est not {an bn , n 0} ; {, abc, aabbcc, aaabbbccc, . . .}, soit tous les mots contenant n occurrences de la lettre a, suivies dun nombre identique doccurrences de la lettre b, suivies dautant de fois la lettre c. Ce langage est not {an bn cn , n 0}. {, a, aa, aaa, aaaaa . . .}, tous les mots composes dun nombre premier de a. Il existe un nombre dnombrable de mots dans , mais le nombre de langages dans est nondnombrable. Parmi ceux-ci, tous ne sont pas la porte des informaticiens : il existe, en eet, des langages qui rsistent tout calcul, cest--dire, plus prcisment, qui ne peuvent pas tre numrs par un algorithme.

1.2.2

Quelques notions de calculabilit

Plus prcisment, la thorie de la calculabilit introduit les distinctions suivantes : Dnition 1.1 (Langage rcursivement numrable). Un langage L est rcursivement numrable sil existe un algorithme A qui numre tous les mots de L. En dautres termes, un langage L est rcursivement numrable sil existe un algorithme A (ou, de manire quivalente, une machine de Turing) tel que tout mot de L est produit par un nombre ni dtapes dexcution de A. Autrement dit, si L est rcursivement numrable et u est un mot de L, alors en laissant tourner A assez longtemps, lalgorithme numrateur A nira par produire u. Il est quivalent de dnir les langages rcursivement numrables comme les langages L pour lesquels il existe une machine de Turing qui reconnat les mots de L, cest--dire qui sarrte dans un tat dacceptation pour tout mot de L. Cela ne prjuge en rien du comportement de la machine pour un mot qui nest pas dans L : en particulier cette dnition est compatible avec une machine de Turing bouclant sans n pour certains mots nappartenant pas L. Dnition 1.2 (Langage rcursif). Un langage L est rcursif sil existe un algorithme A qui, prenant un mot u de en entre, rpond oui si u est dans L et rpond non sinon. On dit alors que lalgorithme A dcide le langage L. Tout langage rcursif est rcursivement numrable : il sut, pour construire une numration de L, de prendre une procdure quelconque dnumration de (par exemple par longueur croissante) et de soumettre chaque mot numr lalgorithme A qui dcide L. si la rponse de A est oui, on produit le mot courant, sinon, on passe au suivant. Cette procdure numre eectivement tous les mots de L. Dans la pratique, seuls les langages rcursifs ont un rel intrt pratique, puisquils correspondent des distinctions qui sont calculables entre mots dans L et mots hors de L. De ces dnitions, retenons une premire limitation de notre savoir dinformaticien : il existe des langages que ne nous savons pas numrer. Ceux-ci ne nous intresseront plus gure. Il en existe dautres que nous savons dcider et qui recevront la majeure partie de notre attention. Au-del des problmes de la reconnaissance et de la dcision, il existe dautres types de calculs que nous envisagerons et qui ont des applications bien pratiques dans les dirents domaines dapplications voqus ci-dessus : comparer deux mots, valuer leur ressemblance 11

rechercher un motif dans un mot comparer deux langages apprendre un langage partir dexemples ...

1.3
1.3.1

Oprations sur les mots


Facteurs et sous-mots

u est un facteur de v sil existe u1 et u2 dans tels que v = u1 uu2 . Si u1 = (resp. u2 = ), alors u est un prxe (resp. suxe ) de v. Si w se factorise en u1 v1 u2 v2 . . . un vn un+1 , o tous les ui et vi sont des mots de , alors v = v1 v2 . . . vn est sous-mot 2 de w. Contrairement aux facteurs, les sous-mots sont donc construits partir de fragments non ncessairement contigus, mais dans lesquels lordre dapparition des symboles est toutefois respect. On appelle facteur (resp. prxe, suxe, sous-mot) propre de u tout facteur (resp. prxe, suxe, sous-mot) de u dirent de u. On notera pref k (u) (resp. su k (u)) le prxe (resp. le suxe) de longueur k de u. Si k est plus grand que | u | , pre fk (u) dsigne simplement u. Les notions de prxe et de suxe gnralisent celles des linguistes3 : tout le monde saccorde sur le fait que in est un prxe de in f ini ; seuls les informaticiens pensent quil en va de mme pour i, in f ou encore in f i. De mme, tout le monde est daccord pour dire que ure est un suxe de voilure ; mais seuls les informaticiens pensent que ilure est un autre suxe de voilure. Un mot non-vide u est primitif si lquation u = vi nadmet pas de solution pour i > 1. Deux mots x = uv et y = vu se dduisant lun de lautre par change de prxe et de suxe sont dits conjugus . Il est facile de vrier que la relation de conjugaison4 est une relation dquivalence. Le miroir ou transpos uR du mot u = u1 . . . un , o les ui sont dans , est dni par : uR = un . . . u1 . Un mot est un palindrome sil est gal son miroir. radar, sas sont des palindromes du vocabulaire commun. On vrie simplement que les prxes de uR sont prcisment les transposs des suxes de u et rciproquement.

1.3.2

Distances entre mots

Une famille de distances Les relations de prxe, suxe, facteur et sous-mot induisent autant de relations dordre partiel sur : ce sont, en eet, des relations rexives, transitives et antisymtriques. Ainsi pourra-t-on dire que u p v si u est un prxe de v. Deux mots quelconques ne sont pas ncessairement comparables pour ces relations, mais il apparat que pour toute paire de mots, toutefois, il existe un plus long prxe (resp. suxe, facteur, sous-mot) commun. Dans le cas des suxes et prxes, ce plus long facteur commun est de plus unique.
Attention : il y a ici dsaccord entre les terminologies franaises et anglaises : subword signie en fait facteur et cest scattered subword qui est lquivalent anglais de notre sous-mot. 3 On parle aussi en linguistique de terminaison au lieu de suxe. 4 Ici, rien voir avec la conjugaison des grammairiens.
2

12

Si lon note plpc(u, v) le plus long prxe commun u et v, alors la fonction dp (u, v) dnie par : dp (u, v) =| uv | 2 | plpc(u, v) | dnit une distance sur . On vrie en eet que : dp (u, v) 0 dp (u, v) = 0 u = v dp (u, w) dp (u, v) + dp (v, w). La vrication cette ingalit utilise le fait que le plus long prxe commun u et w est au moins aussi long que le plus long prxe commun plpc(u, v) et plpc(v, w). On obtient galement une distance lorsque, au lieu de considrer la longueur des plus longs prxes communs, on considre celle des plus longs suxes (ds ), des plus longs facteurs (d f ) ou des plus longs sous-mots communs (dm ). Dans tous les cas, la seule proprit demandant un eort de justication est lingalit triangulaire. Dans le cas des suxes, elle se dmontre comme pour les prxes. Pour traiter le cas des facteurs et des sous-mots, il est utile de considrer les mots sous une perspective un peu dirente. Il est en eet possible denvisager un mot u de + comme une fonction de lintervalle I = [1 . . . | u | ] vers , qui chaque entier i associe le ieme symbole de u : u(i) = ui . A toute squence croissante dindices correspond alors un sous-mot ; si ces indices sont conscutifs on obtient un facteur. Nous traitons dans la suite le cas des sous-mots et notons plsmc(u, v) le plus long sous-mot commun u et v. Vrier dm (u, w) dm (u, v) + dm (v, w) revient vrier que : | uw | 2 | plsmc(u, w) | | uv | 2 | plsmc(u, v) | + | vw | 2 | plsmc(v, w) | soit encore : | plsmc(u, v) | + | plsmc(v, w) | | v | + | plsmc(u, w) | En notant I et J les squences dindices de [1 . . . | v | ] correspondant respectivement plsmc(u, v) et plsmc(v, w), on note tout dabord que : | plsmc(u, v) | + | plsmc(v, w) | =| I J | + | I J | On note ensuite que le sous-mot de v construit en considrant les symboles aux positions de I J est un sous-mot de u et de w, donc ncessairement au moins aussi long que plsmc(u, w). On en dduit donc que : | I J | | plsmc(u, w) | . Puisque, par ailleurs, on a | I J | | v | , on peut conclure que : | plsmc(u, w) | + | v | | I J | + | I J | Et on obtient ainsi prcisment ce quil fallait dmontrer. Le cas des facteurs se traite de manire similaire. Distance ddition et variantes Une autre distance communment utilise sur est la distance ddition , ou distance de Levinshtein, dnie comme tant le plus petit nombre doprations ddition lmentaires ncessaires pour transformer le mot u en le mot v. Les oprations ddition lmentaires sont la suppression ou linsertion dun symbole. Ainsi la distance de chien chameau est-elle de 6, puisque lon peut transformer le premier mot en lautre en faisant successivement les oprations suivantes : supprimer i, insrer a, puis m, supprimer n, insrer a, puis u. Cette mtamorphose dun mot en un autre est dcompose dans la Table 1.1. 13

mot courant chien chen chaen chamen chame chamea chameau

opration supprimer i insrer a insrer m supprimer n insrer a insrer u

T. 1.1 Mtamorphose de chien en chameau Deux mots conscutifs sont distance 1. Lordre des oprations lmentaires est arbitraire. De multiples variantes de cette notion de distance ont t proposes, qui utilisent des ensembles doprations dirents et/ou considrent des poids variables pour les direntes oprations. Pour prendre un exemple rel, si lon souhaite raliser une application qui corrige les fautes de frappe au clavier, il est utile de considrer des poids qui rendent dautant plus proches des squences quelles ne dirent que par des touches voisines sur le clavier, permettant dintgrer une modlisation des confusions de touches les plus probables. On considrera ainsi, par exemple, que batte est une meilleure correction de bqtte que botte ne lest5 , bien que les deux mots se transforment en bqtte par une srie de deux oprations lmentaires. Lutilitaire Unix diff implante une forme de calcul de distances. Cet utilitaire permet de comparer deux chiers et dimprimer sur la sortie standard toutes les dirences entre leurs contenus respectifs.

1.3.3

Ordres sur les mots

Nous avons vu quon pouvait dnir des ordres partiels sur en utilisant les relations de prxe, suxe... Il est possible de dnir des ordres totaux sur , la condition de disposer dun ordre total sur . cette condition, lordre lexicographique sur not l est dni par u l v ssi soit u est un prxe de v soit sinon u = tu , v = tv avec u et v , et le premier symbole de u prcde celui de v pour . Cet ordre est celui traditionnellement utilis dans les dictionnaires ; il conduit toutefois des rsultats contre-intuitifs lorsque lon manipule des langages innis. Lordre radiciel (ou militaire) a utilise galement , mais privilgie, lors des comparaisons, la longueur des chanes : u a v si et seulement si : | u | <| v | | u | =| v | et u l v Ainsi est-on assur, lorsque lon utilise lordre alphabtique que (i) il existe un nombre ni de mots plus petits quun mot arbitraire u ; (ii) que pour tout w, w si u a v alors wuw a wvw .

1.3.4

Quelques rsultats combinatoires lmentaires

La proprit suivante est trivialement respecte :


5 Cest une premire approximation : pour bien faire il faudrait aussi prendre en compte la frquence relative des mots proposs... Mais cest mieux que rien.

14

Lemme 1.1. u, v, x, y , uv = xy t tq. soit u = xt et tv = y, soit x = ut et v = ty. Cette proprit est illustre sur la gure suivante :
1111111111 0000000000 0000000000 1111111111 0000000000 1111111111 0000000000 1111111111 0000000000 1111111111 0000000000 1111111111

x
11111111 00000000 00000000 11111111 00000000 11111111 00000000 11111111 00000000 11111111 00000000 11111111

v
1111111111 0000000000 0000000000 1111111111 0000000000 1111111111 0000000000 1111111111 0000000000 1111111111 0000000000 1111111111

11111111 00000000 00000000 11111111 00000000 11111111 00000000 11111111 00000000 11111111 00000000 11111111

F. 1.1 Illustration dun rsultat combinatoire simple Ce rsultat est utilis pour dmontrer deux autres rsultats lmentaires, qui dcoulent de la non-commutativit de la concatnation. Thorme 1.1. Si xy = yz, avec x y = (uv)k u = u(vu)k , z = vu. , alors u, v et un entier k 0 tels que : x = uv,

Preuve : si | x | | y | , alors le rsultat prcdent nous permet dcrire directement x = yt, ce qui, en identiant u et y, et v t, nous permet de driver directement les galits voulues pour k = 0. Le cas o | y | >| x | se traite par induction sur la longueur de y. Le cas o | y | vaut 1 tant immdiat, supposons la relation vraie pour tout y de longueur au moins n, et considrons y avec | y | = n + 1. Il existe alors t tel que y = xt, do lon drive xtz = xxt, soit encore tz = xt, avec | t | n. Lhypothse de rcurrence garantit lexistence de u et v tels que x = uv et t = (uv)k u, do y = uv(uv)k u = (uv)k+1 u. Thorme 1.2. si xy = yx, avec x , y , alors u et deux indices i et j tels que x = ui et y = u j .

Preuve : ce rsultat sobtient de nouveau par induction sur la longueur de xy. Pour une longueur gale 2 le rsultat vaut trivialement. Supposons le valable jusqu la longueur n, et considrons xy de longueur n + 1. Par le thorme prcdent, il existe u et v tels que x = uv, y = (uv)k u, do on dduit : uv(uv)k u = (uv)k uuv, soit encore uv = vu. En utilisant lhypothse de rcurrence il vient alors : u = ti , v = t j , puis encore x = ti+ j et y = ti+k(i+ j) , qui est le rsultat recherch. Linterprtation de ces rsultats est que les quations du type xy = yx nadmettent que des solutions priodiques, cest--dire des squences qui sont construites par itration dun mme motif de base.

1.4
1.4.1

Oprations sur les langages


Oprations ensemblistes

Les langages tant des ensembles de squences, toutes les oprations ensemblistes classiques leur sont donc applicables. Ainsi, les oprations dunion, dintersection et de complmentation (dans ) se dnissent-elles pour L, L1 et L2 des langages de P( ) par : 15

L1 L2 = {u , u L1 ou u L2 } ; est une opration commutative et associative L1 L2 = {u , u L1 et u L2 } ; est une opration commutative et associative L = {u , u L } Lopration de concatnation (on dit galement le produit , mais ce nest pas le produit cartsien), dnie sur les mots, se gnralise naturellement aux langages par : L1 L2 = {u, (x, y) L1 L2 tq. u = xy} On note, de nouveau, que cette opration est associative, mais pas commutative. Comme prcdemment, litration de n copies du langage L se notera Ln , avec, par convention : L0 = {}. Attention : ne pas confondre Ln avec le langage contenant les puissances nimes des mots de L et qui serait dni par {u , v L, u = vn }. Lopration de fermeture de Kleene (ou plus simplement ltoile) dun langage L se dnit par : L = i0 Li On dnit galement L+ = i1 Li : la dirence de L qui contient toujours , L+ ne contient que si L le contient. On a : L+ = LL . L contient tous les mots quil est possible de construire en concatnant un nombre ni (ventuellement rduit zro) dlments du langage L. On notera que si est un alphabet ni, , tel que dni prcdemment, reprsente6 lensemble des squences nies que lon peut construire en concatnant des symboles de . Remarquons que, par dnition, nest pas vide, puisquil (ne) contient (que) . Un des intrts de ces notations est quelles permettent dexprimer de manire formelle (et compacte) des langages complexes, ventuellement innis, partir de langages plus simples. Ainsi lensemble des suites de 0 et de 1 contenant la squence 111 scrira par exemple : {0, 1} {111}{0, 1} , la notation {0, 1} permettant un nombre arbitraire de 0 et de 1 avant la squence 111. La notion dexpression rationnelle, introduite au chapitre 2, dveloppe cette intuition.

1.4.2

Plus doprations dans P( )

Pour un langage L sur , on dnit les concepts suivants : Dnition 1.3 (Ensemble des prxes). Soit L un langage de , on dnit lensemble des prxes de L, not Pref (L) par : Pref (L) = {u | v , uv L} On dit quun langage L est un langage prxe si pour tout u et v dans L, on a u Pref (v) et v Pref (u). En utilisant un langage prxe ni, il est possible dnir un procd de codage donnant lieux des algorithmes de dcodage simples : ces codes sont appels codes prxes. En particulier, les codes produits par les codages de Human sont des codes prxes. Petite application du concept : montrez que le produit de deux langages prxes est encore un langage prxe. Dnition 1.4 (Ensemble des suxes). Soit L un langage de , on dnit lensemble des suxes de L, not Su (L) par : Su (L) = {u | v , vu L} Dnition 1.5 (Ensemble des facteurs). Soit L un langage de , on dnit lensemble des facteurs de L, not Fac(L) par : Fac(L) = {v | u, w , uvw L}
Notez que, ce faisant, on identie un peu abusivement les symboles (les lments de ) et les squences formes dun seul symbole de .
6

16

Dnition 1.6 (Quotient droit). Le quotient droit dun langage L par le mot w est dni par : L/w = {v | wv L} Le quotient droit dun langage par un mot w est donc lensemble des mots de qui, concatns w, produisent un mot de L. Cette notion gnralise la notion dinverse dun mot : on pourrait tout aussi bien noter cet ensemble w1 L. Dnition 1.7 (Congruence Droite). Une congruence droite de est une relation R de qui vrie : w, w , wRw (u, wuRw u) Dnition 1.8 (Congruence droite associe un langage L). Soit L un langage et soient w1 , w2 deux mots tels que L/w1 = L/w2 . Il est clair, par dnition du quotient, que lon a alors u, L/w1 u = L/w2 u . Sen dduit une congruence droite RL naturellement associe L et dnie par : w1 RL w2 L/w1 = L/w2

1.4.3

Morphismes

Dnition 1.9 (Morphisme). Un morphisme dun monode M dans un monode N est une application telle que : (M ) = N : limage de llment neutre de M est llment neutre de N. (uv) = (u)(v) Lapplication longueur est un morphisme de monode de ( , .) dans (N, +) : on a trivialement | | = 0 et | uv | =| u | + | v | . On vrie simplement quil en va de mme pour les fonction de comptage des occurrences. Dnition 1.10 (Code). Un code est un morphisme injectif : (u) = (v) entrane u = v.

17

Chapitre 2

Langages et expressions rationnels


Une premire famille de langage est introduite, la famille des langages rationnels. Cette famille contient en particulier tous les langages nis, mais galement de nombreux langages innis. La caractristique de tous ces langage est la possibilit de les dcrire par des formules (on dit aussi motifs, en anglais patterns ) trs simples. Lutilisation de ces formules, connues sous le nom dexpressions rationnelles1 sest impos sous de multiples formes comme la bonne manire de dcrire des motifs reprsentant des ensembles de mots. Aprs avoir introduit les principaux concepts formels ( la section 2.1), nous tudions quelques systmes informatiques classiques mettant ces concepts en application.

2.1
2.1.1

Rationalit
Langages rationnels

Parmi les oprations dnies dans P( ) la section 1.4, trois sont distingues et sont qualies de rationnelles : il sagit de lunion, de la concatnation et de ltoile. A contrario, notez que la complmentation et lintersection ne sont pas des oprations rationnelles. Cette distinction permet de dnir une famille importante de langages : les langages rationnels. Dnition 2.1 (Langages rationnels). Soit un alphabet ni. Les langages rationnels sur sont dnis inductivement par : (i) {} et sont des langages rationnels (ii) a , {a} est un langage rationnel (iii) si L, L1 et L2 sont des langages rationnels, alors L1 L2 , L1 L2 , et L sont galement des langages rationnels. Est alors rationnel tout langage construit par un nombre ni dapplication de la rcurrence (iii). Par dnition, tous les langages nis sont rationnels, puisquils se dduisent des singletons par un nombre ni dapplication des oprations dunion et de concatnation. Par dnition galement, lensemble des langages rationnels est clos pour les trois oprations rationnelles (on dit aussi quil est rationnellement clos).
On trouve galement le terme dexpression rgulire, mais cette terminologie, quoique bien installe, est trompeuse et nous ne lutiliserons pas dans ce cours.
1

18

La famille des langages rationnels correspond prcisment au plus petit ensemble de langages qui (i) contient tous les langages nis, (ii) est rationnellement clos. Un langage rationnel peut se dcomposer sous la forme dune formule nie, correspondant aux oprations (rationnelles) qui permettent de le construire. Prenons lexemple du langage sur {0, 1} contenant tous les mots dans lesquels apparat au moins une fois le facteur 111. Ce langage peut scrire : {0, 1} {111}{0, 1} , exprimant que les mots de ce langage sont construits en prenant deux mots quelconques de et en insrant entre eux le mot 111 : on peut en dduire que ce langage est bien rationnel. Les expressions rationnelles dnissent un systme de formules qui simplient et tendent ce type de notation des langages rationnels.

2.1.2

Expressions rationnelles

Dnition 2.2 (Expressions rationnelles). Soit un alphabet ni. Les expressions rationnelles (RE) sur sont dnies inductivement par : (i) et sont des expressions rationnelles (ii) a , a est une expression rationnelle (iii) si e1 et e2 sont deux expressions rationnelles, alors (e1 + e2 ), (e1 e2 ), (e1 ) et (e2 ) sont galement des expressions rationnelles. On appelle alors expression rationnelle toute formule construite par un nombre ni dapplication de la rcurrence (iii). Illustrons ce nouveau concept, en prenant maintenant lensemble des caractres alphabtiques comme ensemble de symboles : , sont des RE (par (ii)) r, e, d, e ) sont des RE (par (iii)) (re) et (de (((( f a)i)r)e) est une RE (par (ii), puis (iii) )) est une RE (par (iii)) ((re) + (de ))) ) est une RE (par (iii)) ((((re) + (de )) (((( f a)i)r)e)) est une RE (par (iii)) (((re + de ... quoi servent ces formules ? Comme annonc, elles servent dnoter des langages rationnels. Linterprtation (la smantique) dune expression est dnie par les rgles inductives suivantes : (i) dnote le langage {} et dnote le langage vide. (ii) a , a dnote le langage {a} (iii.1) (e1 + e2 ) dnote lunion des langages dnots par e1 et par e2 (iii.2) (e1 e2 ) dnote la concatnation des langages dnots par e1 et par e2 (iii.3) (e ) dnote ltoile du langage dnot par e )) f aire) dnote lensemble des mots forms en itrant Revenons la formule prcdente : (((re + de , concatn au suxe f aire : cet ensemble dcrit en fait un volont un des deux prxes re ou de ensemble de mots existants ou potentiels de la langue franaise qui sont drivs par application dun procd tout fait rgulier de prxation verbale. Par construction, les expressions rationnelles permettent de dnoter prcisment tous les langages rationnels, et rien de plus. Si, en eet, un langage est rationnel, alors il existe une expression rationnelle qui le dnote. Ceci se montre par une simple rcurrence sur le nombre doprations rationnelles utilises pour construire le langage. Rciproquement, si un langage est dnot par une expression rationnelle, alors il est lui-mme rationnel [de nouveau par induction sur le nombre dtapes dans la dnition de lexpression]. Ce dernier point est important, car il fournit une premire mthode pour prouver quun langage est rationnel : il sut pour cela dexhiber une 19

expression qui le dnote. Pour allger les notations (et limiter le nombre de parenthses), on imposera les rgles de priorit suivantes : ltoile ( ) est loprateur le plus liant, puis la concatnation, puis lunion (+). Ainsi, aa + b sinterprte-t-il comme ((a(a )) + (b )).

2.1.3

quivalence et rductions

La correspondance entre expression et langage nest pas biunivoque : chaque expression dnote un unique langage, mais un langage donn peuvent correspondre plusieurs expressions direntes. Ainsi, les deux expressions suivantes : a (a ba ba ) et a (ba ba ) sont-elles en ralit deux variantes notationnelles du mme langage sur = {a, b}. Dnition 2.3 (Expressions rationnelles quivalentes). Deux expressions rationnelles sont quivalentes si elles dnotent le mme langage. Comment dterminer automatiquement que deux expressions sont quivalentes ? Existe-t-il une expression canonique, correspondant la manire la plus courte de dnoter un langage ? Cette question nest pas anodine : pour calculer ecacement le langage associ une expression, il semble prfrable de partir de la version la plus simple, an de minimiser le nombre doprations accomplir. Un lment de rponse est fourni avec les formules de la Table 2.1, qui expriment, (par le signe =), un certain nombre dquivalences lmentaires : e = e = = e+ f = f +e e+e=e e( f + g) = e f + eg (e f ) e = e( f e) (e + f ) = e (e + f ) (e + f ) = (e f ) e = e = e = e+=e e = (e ) (e + f ) g = eg + f g (e + f ) = (e + f ) (e + f ) = (e f ) e

T. 2.1 Identits rationnelles En utilisant ces identits, il devient possible doprer des transformations purement syntaxiques (cest--dire qui ne changent pas le langage dnot) dexpressions rationnelles, en particulier pour les simplier. Un exemple de rduction obtenue par application de ces expressions est le suivant :

bb (a b + )b = b(b a b + b )b = b(b a + )b b = b(b a + )bb

La conceptualisation algorithmique dune stratgie ecace permettant de rduire les expressions rationnelles sur la base des identits de la Table 2.1 tant un projet dicile, lapproche la plus utilise pour tester lquivalence de deux expressions rationnelles nutilise pas directement ces identits, mais fait plutt appel leur transformation en des automates nis, qui sera prsente dans le chapitre suivant ( la section 3.2.2). 20

2.2

Extensions notationnelles

Les expressions rationnelles constituent un outil puissant pour dcrire des langages simples (rationnels). La ncessit de dcrire de tels langages tant rcurrente en informatique, ces formules sont donc utilises, avec de multiples extensions, dans de nombreux outils dusage courant. Par exemple, grep est un utilitaire disponible sous UNIX pour rechercher les occurrences dun mot(if) dans un chier texte. Son utilisation est simplissime : > grep chaine mon.texte imprime sur la sortie standard toutes les lignes du chier mon.texte contenant au moins une occurrence du mot chaine. En fait grep permet un peu plus : la place dun mot unique, il est possible dimprimer les occurrences de tous les mots dun langage rationnel quelconque, ce langage tant dni sous la forme dune expression rationnelle. Ainsi, par exemple : > grep cha*ine mon.texte recherche (et imprime) toute occurrence dun mot du langage cha ine dans le chier mon.texte. tant donn un motif exprim sous la forme dune expression rationnelle e, grep analyse le texte ligne par ligne, testant pour chaque ligne si elle appartient (ou non) au langage (e) ; lalphabet (implicitement) sous-jacent tant lalphabet ASCII ou le jeu de caractre tendu IS0 Latin 1. La syntaxe des expressions rationnelles permises par grep fait appel aux caractres * et | pour noter respectivement les oprateurs et +. Ceci implique que, pour dcrire un motif contenant le symbole *, il faudra prendre la prcaution dviter quil soit interprt comme un oprateur, en le faisant prcder du caractre dchappement \. Il en va de mme pour les autres oprateurs (|, (, ))... et donc aussi pour \. La syntaxe complte de grep inclut de nombreuses extensions notationnelles, permettant de simplier grandement lcriture des expressions rationnelles, au prix de la dnition de nouveaux caractres spciaux. Les plus importantes de ces extensions sont prsentes dans la Table 2.2. Supposons, titre illustratif, que nous cherchions mesurer lutilisation de limparfait du subjonctif dans les romans de Balzac, supposment disponibles dans le (volumineux) chier Balzac.txt. Pour commencer, un peu de conjugaison : quelles sont les terminaisons possibles ? Au premier groupe : asse, asses, t, mes, assions, assiez, assent. On trouvera donc toutes les formes du premier groupe avec un simple2 : > grep -E (t|mes|ass(e|es|ions|iez|ent)) Balzac.txt Gure plus dicile, le deuxime groupe : isse, isses, , mes, issions, issiez, issent. Do le nouveau motif : > grep -E ([]t|[]mes|[ia]ss(e|es|ions|iez|ent)) Balzac.txt Le troisime groupe est autrement complexe : disons simplement quil implique de considrer galement les formes en usse (pour boire ou encore valoir) ; les formes en insse (pour venir, tenir et leurs drivs...). On parvient alors quelque chose comme :
2

Loption -E donne accs toutes les extensions notationnelles

21

Lexpression dnote . Rptitions e* e e+ ee e? e+ e{n} (en ) e{n,m} (en + en+1 . . . + em ) Regroupements [abc] ( a + b + c) [a-z] (a + b + c . . . z) [^a-z] \{a, b, c} Ancres \<e

remarque . vaut pour nimporte quel symbole

condition que n m a, b, c sont des caractres utilise lordre des caractres ASCII ninclut pas le symbole de n de ligne \n e doit apparatre en dbut de mot, ie. prcd dun sparateur (espace, virgule...) e doit apparatre en n de mot, ie. suivi dun sparateur (espace, virgule...) e doit apparatre en dbut de ligne e doit apparatre en n de ligne

e\>

^e e$

e e

Caractres spciaux \. . \* \+ + \n ... +

dnote une n de ligne

T. 2.2 Dnition des motifs pour grep > grep -E ([]n ?t|[]mes|[iau]n ?ss(e|es|ions|iez|ent)) Balzac.txt Cette expression est un peu trop gnrale, puisquelle inclut des squences comme unssiez ; pour linstant on sen contentera. Pour continuer, revenons notre ambition initiale : chercher des verbes. Il importe donc que les terminaisons que nous avons dnies apparaissent bien comme des suxes. Comment faire pour cela ? Imposer, par exemple, que ces squences soient suivies par un caractre de ponctuation parmi : [, ;. ! : ?]. On pourrait alors crire : > grep -E ([]n ?t|[]mes|[iau]n ?ss(e|es|ions|iez|ent))[, ;. ! : ? ] \ Balzac.txt indiquant que la terminaison verbale doit tre suivie dun des sparateurs. grep connat mme une notation un peu plus gnrale, utilisant : [ :punct :], qui comprend toutes les ponctuations et [ :space :], qui inclut tous les caractres despacement (blanc, tabulation...). Ce nest pourtant pas cette notation que nous allons utiliser, mais la notation \>, qui est une notation pour lorsque celui-ci est trouv la n dun mot. La condition que la terminaison est bien en n de mot scrit alors : 22

> grep -E ([]n ?t|[]mes|[iau]n ?ss(e|es|ions|iez|ent))\> Balzac.txt Dernier problme : rduire le bruit. Notre formulation est en eet toujours excessivement laxiste, puisquelle reconnat des mots comme masse ou passions, qui ne sont pas des formes de limparfait du subjonctif. Une solution exacte est ici hors de question : il faudrait rechercher dans un dictionnaire tous les mots susceptibles dtre improprement dcrits par cette expression : cest possible (un dictionnaire est aprs tout ni), mais trop fastidieux. Une approximation raisonnable est dimposer que la terminaison apparaissent sur un radical comprenant au moins trois lettres, soit nalement (en ajoutant galement \< qui spcie un dbut de mot) : > grep "\<[a-z]{3,}([]n ?t|[]mes|[iau]n ?ss(e|es|ions|iez|ent))\>" \ Balzac.txt Dautres programmes disponibles sur les machines UNIX utilisent ce mme type dextensions notationnelles, avec toutefois des variantes mineures suivant les programmes : cest le cas en particulier de (f)lex, un gnrateur danalyseurs lexicaux ; de sed, un diteur en batch ; de perl, un langage de script pour la manipulation de chiers textes ; de (x)emacs... On se reportera aux pages de documentation de ces programmes pour une description prcise des notations autorises. Il existe galement des bibliothques permettant de manipuler des expressions rationnelles. Ainsi, pour ce qui concerne C, la bibliothque regexp permet de compiler des expressions rationnelles et de les rechercher dans un chier. Une bibliothque quivalente existe en C++, en java... Attention Une confusion frquente viter : les shells UNIX utilisent des notations compltement direntes pour exprimer des ensembles de noms de chiers. Ainsi, par exemple, la commande ls nom* liste tous les chiers dont le nom est prx par nom ; et pas du tout lensemble de tous les chiers dont le nom appartient au langage nom .

23

Chapitre 3

Automates nis
Nous introduisons ici trs succinctement les automates nis. Pour les lecteurs intresss par les aspects formels de la thorie des automates nis, nous recommandons particulirement la lecture de quelques chapitres de (Hopcroft and Ullman, 1979), ou en franais, des chapitres initiaux de (Sakarovitch, 2003). Lexpos ncessairement limit prsent dans les sections qui suivent reprend pour lessentiel le contenu de (Sudkamp, 1997).

3.1
3.1.1

Automates nis
Bases

Dans cette section, nous introduisons le modle le plus simple dautomate ni : lautomate dterministe complet. Ce modle nous permet de dnir les notions de calcul et de langage associ un automate. Nous terminons cette section en dnissant la notion dquivalence entre automates, ainsi que la notion dutilit dun tat. Dnition 3.1 (Automate ni). Un automate ni (DFA) est dni par un quintuplet A = (, Q, q0 , F, ), o : est un ensemble ni de symboles (lalphabet) Q est un ensemble ni dtats q0 Q est ltat initial F Q sont les tats naux est une fonction totale de (Q ) dans Q, appele fonction de transition. La terminologie anglaise correspondante parle de nite-state automaton ; comme il apparatra plus tard, les automates nis de cette section possdent la proprit dtre dterministes : do labrviation DFA pour Deterministic Finite-state Automaton. Un automate ni correspond un graphe orient, dans lequel certains des nuds (tats) sont distingus et marqus comme initial ou naux et dans lequel les arcs (transitions) sont tiquets par des symboles de . Si (q, a) = r, on dit que a est ltiquette de la transition (q, r). Les automates admettent une reprsentation graphique, comme celle de la Figure 3.1. Dans cette reprsentation, ltat initial 0 est marqu par un arc entrant sans origine et les tats naux (ici lunique tat nal est 2) par un arc sortant sans destination. La fonction de transition correspondant se graphe sexprime matriciellement par :

24

F. 3.1 Un automate ni

0 1 2

a 1 2 0

b 0 1 2

Un calcul dans A est une squence dtats q1 . . . qn de A, tel quil existe toujours au moins une transition entre deux tats successifs qi et qi+1 . Ltiquette du calcul est le mot construit par concatnation des tiquettes de chacune des transitions. Un calcul dans A est russi si ltat dorigine est ltat initial, et si ltat terminal est un des tats naux. Le langage reconnu par lautomate A, not L(A), est lensemble des tiquettes des calculs russis. Dans lexemple prcdent, le mot baab appartient au langage reconnu, puisquil tiquette le calcul : 00122. La notation A permet de formaliser cette notion. Ainsi on crira, pour a dans et v dans : (q, av) A ((q, a), v) pour noter une tape de calcul. Cette notation stend en (q, uv) A (p, v) sil existe une suite dtats q = q1 . . . qn = p tels que (q1 , u1 . . . un v) A (q2 , u2 . . . un v) . . . A (qn , v). Avec ces notations, on a : L(A) = {u | (q0 , u) A (q, ), avec q F} Cette notation met en vidence lautomate comme une machine permettant de reconnatre des mots : tout parcours partant de q0 permet de consommer un un les symboles du mot reconnatre ; ce processus stoppe lorsque le mot est entirement consomm : si ltat ainsi atteint est un tat nal, alors le mot appartient au langage reconnu par lautomate. On drive un algorithme permettant de tester si un mot appartient au langage reconnu par un automate ni. La complexit de cet algorithme dcoule de lobservation que chaque tape de calcul correspond une application de la fonction (), qui elle-mme se rduit la lecture dune case dun tableau et une aectation, deux oprations qui seectuent en temps constant. La reconnaissance dun mot u se calcule en exactement | u | tapes. Dnition 3.2. Un langage est reconnaissable sil existe un automate ni qui le reconnat. Un second exemple dautomate, trs similaire au premier, est reprsent la Figure 3.2. Dans cet exemple, 0 est la fois initial et nal. A reconnat le langage correspondant aux mots u tels que | u | a est divisible par 3 : chaque tat correspond une valeur du reste dans la division par 3 : un calcul russi correspond ncessairement un reste gal 0 et rciproquement. Par un raisonnement similaire celui utilis pour dnir un calcul de longueur quelconque, il est possible dtendre rcursivement la fonction de transition en une fonction de Q Q par : 25

Algorithm 1 Reconnaissance par un DFA // u = u1 . . . un est le mot reconnatre // A = (Q, q0 , , F) est le DFA q := q0 i := 1 while (i n) do q := (q, ui ) i := i + 1 od if (q F) then return (true) else return (false)
b b b

F. 3.2 Un automate ni comptant les a (modulo 3) (q, u) = (q, u) si | u | = 1 (q, au) = ((q, a), u) On notera que, puisque est une fonction totale, est galement une fonction totale : limage dun mot quelconque de par est toujours bien dnie, ie. existe et est unique. Cette nouvelle notation permet de donner une notation alternative pour le langage reconnu par un automate A : L(A) = {u , (q0 , u) F} Nous avons pour linstant plutt vu lautomate comme une machine permettant de reconnatre des mots. Il est galement possible de le voir comme un systme de production : partant de ltat initial, tout parcours conduisant un tat nal construit itrativement une squence dtiquettes par concatnation des tiquettes rencontres le long des arcs. Si chaque automate ni reconnat un seul langage, la rciproque nest pas vraie : plusieurs automates peuvent reconnatre le mme langage. Comme pour les expressions rationnelles, on dira dans ce cas que les automates sont quivalents. Dnition 3.3 (quivalence entre automates). Deux automates nis A1 et A2 sont quivalents si et seulement sils reconnaissent le mme langage. Ainsi, par exemple, lautomate de la Figure 3.3 est-il quivalent celui de la Figure 3.1 : tous deux reconnaissent le langage de tous les mots qui contiennent un nombre de a congru 2 modulo 3. Nous lavons not plus haut, est dnie pour tout mot de . Ceci implique que lalgorithme de reconnaissance (1) demande exactement | u | tapes de calcul, correspondant une excution complte de la boucle. Ceci peut savrer particulirement inecace, comme dans lexemple de lautomate de la Figure 3.4, qui reconnat le langage ab{a, b} . Dans ce cas en eet, il est en fait possible daccepter ou de rejeter des mots en ne considrant que les deux premiers symboles. 26

2
a

F. 3.3 Un automate ni quivalent celui de la Figure 3.1


a,b

2
a,b b a b

F. 3.4 Un automate ni pour ab(a + b)

3.1.2

Spcication partielle

Pour contourner ce problme et pouvoir arrter le calcul aussi tt que possible, nous introduisons dans cette section des dnitions alternatives, mais qui savrent en fait quivalentes, des notions dautomate et de calcul. Dnition 3.4 (Automate ni). Un automate ni est dni par un quintuplet A = (, Q, q0 , F, ), o : est un ensemble ni de symboles (lalphabet) Q est un ensemble ni dtats q0 Q est ltat initial F Q sont les tats naux est une fonction partielle de (Q ) dans Q La dirence avec la dnition 3.1 est que est ici dnie comme une fonction partielle. Son domaine de dnition est un sous-ensemble de Q . Selon cette nouvelle dnition, il est possible de se trouver dans une situation o un calcul sarrte avant davoir atteint la n de lentre. Ceci se produit ds que lautomate volue dans une conguration (q, au), telle quil nexiste pas de transition tiquete par a et sortant de ltat q. La dnition (3.4) est en fait strictement quivalente la prcdente, dans la mesure o les automates partiellement spcis peuvent tre complts par ajout dun tat puits absorbant les transitions absentes de lautomate original, sans pour autant changer le langage reconnu. Formellement, soit A = (, Q, q0 , F, ) un automate partiellement spci, on dnit A = (, Q , q0 , F , ) avec : Q = Q { qp } q0 = q0 F =F q Q, a , (q, a) = (q, a) si (q, a) existe, (q, a) = qp sinon. 27

a , ( qp , a ) = qp Ltat puits, qp , est donc celui dans lequel on aboutit dans A en cas dchec dans A ; une fois dans qp , il est impossible datteindre les autres tats de A et donc de rejoindre un tat nal. Cette transformation est illustre pour lautomate de la Figure 3.5, dont le transform est prcisment lautomate de la Figure 3.4, ltat 2 jouant le rle de puits.
a,b

F. 3.5 Un automate partiellement spci A reconnat le mme langage que A puisque : si u L(A), (q0 , u) existe et appartient F. Dans ce cas, le mme calcul existe dans A et aboutit galement dans un tat nal si u L(A), deux cas sont possibles : soit (q0 , u) existe mais nest pas nal, et la mme chose se produit dans A ; soit le calcul sarrte dans A aprs le prxe v : on a alors u = va et ( (q0 , v), a) nexiste pas. Or, le calcul correspondant dans A conduit au mme tat, partir duquel une transition existe vers qp . Ds lors, lautomate est vou rester dans cet tat jusqu la n du calcul ; cet tat ntant pas nal, le calcul choue et la chane est rejete. Pour tout automate (au sens de la dnition 3.4), il existe donc un automate compltement spci (ou automate complet ) quivalent.

3.1.3

tats utiles

Un second rsultat concernant lquivalence entre automates demande lintroduction des quelques dnitions complmentaires suivantes. Dnition 3.5 (Accessibilit, co-accessibilit). Un tat q de A est dit accessible sil existe u dans tel que (q0 , u) = q. q0 est trivialement accessible (par u = ). Un automate dont tous les tats sont accessibles est lui-mme dit accessible. Un tat q de A est dit co-accessible sil existe u dans tel que (q, u) F. Tout tat nal est trivialement co-accessible (par u = ). Un automate dont tous les tats sont co-accessibles est lui-mme dit co-accessible. Un tat q de A est ditutile sil est la fois accessible et co-accessible. Dun automate dont tous les tats sont utiles on dit quil est mond (en anglais trim). Les tats utiles sont donc les tats qui servent dans au moins un calcul russi : on peut les atteindre depuis ltat initial, et les quitter pour un tat nal. Les autres tats, les tats inutiles, ne servent pas grand-chose, en tout cas pas la spcication de L(A). Cest prcisment ce que montre le thorme suivant. Thorme 3.1 (mondage). Si L(A) par un automate mond. est un langage reconnaissable, alors il est galement reconnu

Preuve : Soit A un automate reconnaissant L, et Qu Q lensemble de ses tats utiles ; Qu nest pas vide ds lors que L(A) . La restriction de Qu permet de dnir un automate A = (, Qu , q0 , F, ). A est quivalent A. Qu tant un sous-ensemble de Q, on a en eet immdiatement 28

L(A ) L(A). Soit u dans L(A), tous les tats du calcul qui le reconnat tant par dnition utiles, ce calcul existe aussi dans A et aboutit dans un tat nal : u est donc aussi reconnu par A .

3.1.4

Automates non-dterministes

Dans cette section, nous augmentons le modle dautomate dni en (3.4), en autorisant plusieurs transitions sortantes dun tat q porter le mme symbole : les automates ainsi spcis sont dits non-dterministes. Nous montrons que cette gnralisation naugmente toutefois pas lexpressivit du modle : les langages reconnus par les automates non-dterministes sont les mmes que ceux reconnus pas les automates dterministes. Non-dterminisme Dnition 3.6 (Automate ni non-dterministe). Un automate ni non-dterministe (NFA) est dni par un quintuplet A = (, Q, q0 , F, ), o : est un ensemble ni de symboles (lalphabet) Q est un ensemble ni dtats q0 Q est ltat initial F Q sont les tats naux est une fonction (partielle) de ( Q) dans 2Q : limage par dun couple (q, a) est un sous-ensemble de Q. La nouveaut introduite par cette dnition est lindtermination qui porte sur les transitions : pour une paire (q, a), il peut exister dans A plusieurs transitions possibles. On parle, dans ce cas, de non-dterminisme, signiant quil existe des tats dans lesquels la lecture dun symbole a dans lentre provoque un choix (ou une indtermination) et que plusieurs transitions alternatives sont possibles. Notez que cette dnition gnralise proprement la notion dautomate ni : la dnition (3.4) est un cas particulier de la dnition (3.6), avec pour tout (q, a), lensemble (q, a) ne contient quun seul lment : on parle alors dautomate dterministe. Les notions de calcul et de calcul russi se dnissent exactement comme dans dans le cas dterministe. On dnit galement la fonction de transition tendue de Q dans 2Q par : (q, u) = (q, u) si | u | = 1 (q, au) = r(q,a) (r, u) Ces notions sont illustres sur lautomate non-dterministe de la Figure 3.6 : deux transitions sortantes de 1 sont tiquetes par a : (1, a) = {1, 2}. aa donne lieu un calcul russi passant successivement par 1, 2 et 4, qui est nal ; aa donne aussi lieu un calcul (1, 1, 1), qui nest pas un calcul russi.
b

a b a

3
b a

F. 3.6 Un automate non-dterministe 29

Le langage reconnu par un automate non-dterministe est dni par : L(A) = {u , (q0 , u) F }

Pour quun mot appartienne au langage reconnu par lautomate, il sut quil existe, parmi tous les calculs possibles, un calcul russi, cest--dire un calcul qui consomme tous les symboles de u entre q0 et un tat nal ; la reconnaissance nchoue donc que si tous les calculs aboutissent une des situations dchec. Ceci implique que pour calculer lappartenance dun mot un langage, il faut examiner successivement tous les chemins possibles, et donc ventuellement revenir en arrire dans lexploration des parcours de lautomate lorsque lon rencontre une impasse. Dans ce nouveau modle, le temps de reconnaissance dun mot nest plus linaire, mais proportionnel au nombre de chemins dont ce mot est ltiquette, qui peut tre exponentiel en fonction de la taille de lentre. Le non-dterminisme ne paye pas La gnralisation du modle dautomate ni lie lintroduction de transitions non-dterministes est, du point de vue des langages reconnus, sans eet : tout langage reconnu par un automate ni non-dterministe est aussi reconnu par un automate dterministe. Thorme 3.2. Pour tout NFA A dni sur , il existe un DFA A quivalent A. Si A a n tats, alors A a au plus 2n tats. Preuve : on pose A = (, Q, q0 , F, ) et on considre A dni par : A = (, 2Q , {q0 }, F , ) avec : F = {G Q, F G }. (G, a) = H, avec H = qG (q, a) Les tats de A sont donc associs de manire biunivoque des sous-ensembles de Q (il y en a un nombre ni) : ltat initial est le singleton {q0 } ; chaque partie contenant un tat nal de A donne lieu un tat nal de A ; la transition sortante dun sous-ensemble E, tiquete par a, atteint lensemble de tous les tats de Q atteignables depuis un tat de E par une transition tiquete par a. A est le dterminis de A. Illustrons cette construction sur lautomate de la Figure 3.7.
a

3
a b

1
a a b

F. 3.7 Un automate dterminiser Lautomate de la Figure 3.7 ayant 4 tats, son dterminis en aura donc 16, correspondant au nombre de sous-ensembles de {1, 2, 3, 4}. Son tat initial est le singleton {1}, et ses tats naux tous les sous-ensembles contenant 4 : il y en a exactement 8, qui sont : {4}, {1, 4}, {2, 4}, {3, 4}, {1, 2, 4}, 30

{1, 3, 4}, {2, 3, 4} ,{1, 2, 3, 4}. Considrons par exemple les transitions sortantes de ltat initial : 1 ayant deux transitions sortantes sur le symbole a, {1} aura une transition depuis a vers ltat correspondant au doubleton {2, 3}. Le dterminis est reprsent la Figure 3.8. On notera que cette gure ne reprsente que les tats utiles du dterminis : ainsi {1, 2} nest pas reprsent, puisquil nexiste aucun moyen datteindre cet tat.

{4}
b a a b

{2}

{1}

{2,3}

{2,4}
b a

{3}

{3,4}
a

F. 3.8 Le rsultat de la dterminisation Que se passerait-il si lon ajoutait lautomate de la Figure 3.7 une transition supplmentaire bouclant dans ltat 1 sur le symbole a ? Construisez le dterminis de ce nouvel automate. Dmontrons maintenant le thorme 3.2 ; et pour saisir le sens de la dmonstration, reportons nous la Figure 3.7, et considrons les calculs des mots prxs par aaa : le premier a conduit une indtermination entre 2 et 3 ; suivant les cas, le second a conduit donc en 4 (si on a choisit daller initialement en 2) ou en 3 (si on a choisi daller initialement en 3). La lecture du troisime a lve lambigut, puisquil ny a pas de transition sortante pour 4 : le seul tat possible aprs aaa est 3. Cest ce qui se lit sur la Figure 3.8 : les ambiguts initiales correspondent aux tats {2, 3} (atteint aprs le premier a) et {3, 4} (atteint aprs le second a) ; aprs le troisime le doute nest plus permis et ltat atteint correspond au singleton {3}. Formalisons maintenant ces ides pour dmontrer le rsultat qui nous intresse. Premire remarque : A est un automate ni dterministe, puisque limage par dun couple (H, a) est uniquement dnie. Nous allons montrer que tout calcul dans A correspond exactement un calcul dans A , soit formellement que : si (q0 , u)
A

(p, ) alors G, p G, ({q0 }, u)

(G, )si ({q0 }, u)

(G, ) alors p G, (q0 u)

(G, )

Oprons une rcurrence sur la longueur de u : si u est gal le rsultat est vrai par dnition de ltat initial dans A . Supposons que le rsultat est galement vrai pour tout mot de longueur strictement infrieure u, et considrons u = va. Soit (q0 , va) A (p, a) A (q, ) un calcul dans A : par lhypothse de rcurrence, il existe un calcul dans A tel que : ({q0 }, v) A (G, ), avec p G. Ceci implique, en vertu de la dnition mme de , que q appartient H = (G, a), et donc que ({q0 }, u = va) A (H, ), avec q H. Inversement, soit ({q0 }, u = va) A (G, a) A (H, ) : pour tout p dans G il existe un calcul un calcul dans A tel que (q0 , v) A (p, ). G ayant une transition tiquete par a, il existe galement dans G un tat p tel que (p, a) = q, avec q H, puis que (q0 , u = va) A (q, ), avec q H. On dduit alors que lon a (q0 , u = va) A (q, ), avec q F si 31

et seulement si ({q0 }, u) A (G, ) avec q G, donc avec F G directement que L(A) = L(A ).

, soit encore G F . Il sensuit

La construction utilise pour construire le NFA quivalent un DFA A sappelle la construction des sous-ensembles : elle se traduit directement dans un algorithme permettant de construire le dterminis dun automate quelconque. On notera que cette construction peut sorganiser de telle faon ne considrer que les tats rellement utiles du dterminis. Il sut, pour cela, de construire de proche en proche depuis {q0 }, les tats accessibles, rsultant en gnral des automates (complets) ayant moins que 2n tats. Il existe toutefois des automates pour lesquels lexplosion combinatoire annonce a lieu, comme celui qui est reprsent la Figure 3.9. Sauriez-vous expliquer do vient cette dicult ? Quel est le langage reconnu par cet automate ?
a a b a b a b a

q0

q1

q2

q3

qn

F. 3.9 Un automate dicile dterminiser Dans la mesure o ils napportent aucun gain en expressivit, il est permis de se demander quoi servent les automates non-dterministes ? Au moins deux choses : ils sont plus faciles construire partir dautres reprsentations des langages et sont donc utiles pour certaines preuves (voir plus loin) ou algorithmes. Ils fournissent galement des machines bien plus (dans certains cas exponentiellement plus) compactes que les DFA, ce qui nest pas une proprit ngligeable. Transitions spontanes Il est commode, dans la pratique, de disposer dune dnition encore plus plastique de la notion dautomate ni, en autorisant des transitions tiquetes par le mot vide, qui sont appeles les transitions spontanes . Formellement, un automate non-dterministe avec transitions spontanes (en abrg un -NFA) se dnit comme un NFA, la dirence prs que a maintenant comme domaine de dnition Q ( {}). Les transitions spontanes permettent dtendre la notion de calcul : (q, u) A (p, v) si (i) u = av et p (q, a) ou bien (ii) u = v et p (q, ). En dautres termes, dans un -NFA, il est possible de changer dtat sans consommer de symbole, en empruntant une transition tiquete par le mot vide. Le langage reconnu par un -NFA A est, comme prcdemment, dni par L(A) = {u, (q0 , u) A (q, ) avec q F}. La Figure 3.10 reprsente un exemple de -NFA, correspondant au langage a b c . Cette nouvelle extension najoute rien de plus lexpressivit du modle, puisquil est possible de transformer chaque -NFA A en un NFA quivalent. Pour cela, nous introduisons tout dabord la notion de -fermeture dun tat q, correspondant tous les tats accessibles depuis q par une ou plusieurs transition spontane. Formellement : Dnition 3.7. Soit q un tat de Q. On appelle -fermeture (en anglais closure) de q lensemble closure(q) = {p, (q, ) A (p, )}. Par construction, q closure(q). 32

F. 3.10 Un automate avec transitions spontanes Intuitivement, la fermeture dun tat q contient tous les tats quil est possible datteindre depuis q sans consommer de symboles. Ainsi, la fermeture de ltat 0 de lautomate de la Figure 3.10 est-elle gale {0, 1, 2}. Thorme 3.3. Pour tout -NFA A, il existe un NFA A tel que L(A) = L(A ). Preuve. En posant A = (, Q, q0 , F, ), on dnit A comme suit : A = (, Q, q0 , F , ) avec : F = {q, closure(q) F } (q, a) = pclosure(q) (p, a) Par une rcurrence similaire la prcdente, on montre alors que tout calcul (q0 , u) A p est quivalent un calcul (q0 , u) A p , avec p closure(p ), puis que L(A) = L(A ). On dduit directement un algorithme constructif pour supprimer, nombre dtats constant, les transitions spontanes. Appliqu lautomate de la Figure 3.10, cet algorithme construit lautomate reprsent la Figure 3.11.
a b c

F. 3.11 Un automate dbarrass de ses transitions spontanes Les transitions spontanes introduisent une plasticit supplmentaire lobjet automate. Par exemple, il est facile de voir que lon peut, en les utilisant, transformer un automate ni quelconque en un automate quivalent dot dun unique tat nal nayant que des transitions entrantes.

3.2

Reconnaissables

Nous avons dni la section 3.1 les langages reconnaissables comme tant les langages reconnus par un automate ni dterministe. Les sections prcdentes nous ont montr que nous aurions tout aussi bien les dnir comme les langages reconnus par un automate ni non-dterministe ou encore par un automate ni non-dterministe avec transitions spontanes. Dans cette section, nous montrons dans un premier temps que lensemble des langages reconnaissables est clos pour toutes les oprations classiques, en produisant des constructions portant directement sur les automates. Nous montrons ensuite que les reconnaissables sont exactement les langages rationnels (prsents la section 2.1.1), puis nous prsentons un ensemble de rsultats classiques permettant de caractriser les langages reconnaissables. 33

3.2.1

Oprations sur les reconnaissables

Thorme 3.4 (Clture par complmentation). Les langages reconnaissables sont clos par complmentation. Preuve : Soit L un reconnaissable et A un DFA complet reconnaissant L. On construit alors un automate A pour L en prenant A = (, Q, q0 , F , ), avec F = Q\F. Tout calcul russi de A se termine dans un tat de F, entranant son chec dans A . Inversement, tout calcul chouant dans A aboutit dans un tat non-nal de A, ce qui implique quil russit dans A . Thorme 3.5 (Clture par union ensembliste). Les langages reconnaissables sont clos par union ensembliste. Preuve : Soit L1 et L2 deux langages reconnaissables, reconnus respectivement par A1 et A2 , deux DFA complets. On construit un automate A = (, Q = Q1 Q2 , q0 , F, ) pour L1 L2 de la manire suivante : q0 = (q1 , q2 ) 0 0 F = (F1 Q2 ) (Q1 F2 ) ((q1 , q2 ), a) = (1 (q1 , a), 2 (q2 , a)) La construction de A est destine faire fonctionner A1 et A2 en parallle : pour tout symbole dentre a, on transite par dans la paire dtats rsultant dune transition dans A1 et dune transition dans A2 . Un calcul russi dans A est un calcul russi dans A1 (arrt dans un tat de F1 Q2 ) ou dans A2 (arrt dans un tat de Q1 F2 ). Nous verrons un peu plus loin une autre construction, plus simple, pour cette opration, mais qui linverse de la prcdente, ne prserve pas le dterminisme de la machine ralisant lunion. Thorme 3.6 (Clture par intersection ensembliste). Les langages reconnaissables sont clos par intersection ensembliste. Preuve (constructive1 ) : soient L1 et L2 deux reconnaissables, reconnus respectivement par A1 et A2 , deux DFA complets. On construit un automate A = (, Q = Q1 Q2 , q0 , F, ) pour L1 L2 de la manire suivante : q0 = (q1 , q2 ) 0 0 F = (F1 , F2 ) ((q1 , q2 ), a) = (1 (q1 , a), 2 (q2 , a)) La construction de lautomate intersection est identique celle de lautomate ralisant lunion, la dirence prs quun calcul russi dans A doit ici russir simultanment dans les deux automates A1 et A2 . Ceci sexprime dans la nouvelle dnition de lensemble F des tats naux comme : F = (F1 , F2 ). Thorme 3.7 (Clture par miroir). Les langages reconnaissables sont clos par miroir. Preuve : Soit L un langage reconnaissable, reconnu par A = (, Q, q0 , F, ), et nayant quun unique tat nal, not qF . A , dni par A = (, Q, qF , {q0 }, ), o (q, a) = p si et seulement si (p, a) = q reconnat exactement le langage miroir de L. A est en fait obtenu en inversant lorientation des arcs de A : tout calcul de A numrant les symboles de u entre q0 et qF correspond un calcul de A numrant uR entre qF et q0 . On notera que mme si A est dterministe, la construction ici propose naboutit pas ncessairement un automate dterministe pour le miroir.
1

Une preuve plus directe utilise les deux rsultats prcdents et la loi de Morgan L1 L2 = (L1 L2 ).

34

Thorme 3.8 (Clture par concatnation). Les langages reconnaissables sont clos par concatnation Preuve : Soient L1 et L2 deux langages reconnus respectivement par A1 et A2 , o lon suppose que les ensembles dtats Q1 et Q2 sont disjoints et que A1 a un unique tat nal de degr extrieur nul. On construit lautomate A pour L1 L2 en identiant ltat nal de A1 avec ltat initial de A2 . Formellement on a A = (, Q1 Q2 \{q2 } , q1 , F2 , ), o est dni par : 0 0 q Q1 , q q f , a , (q, a) = 1 (q, a) (q, a) = 2 (q, a) si q Q2 . ( q1 , a) = 1 (qF , a) 2 (q2 , a) 0 F Tout calcul russi dans A doit ncessairement atteindre un tat nal de A2 et pour cela pralablement atteindre ltat nal de A1 , seul point de passage vers les tats de A2 . De surcrot, le calcul nemprunte, aprs le premier passage dans q1 , que des tats de A2 : il se dcompose donc en un F calcul russi dans chacun des automates. Rciproquement, un mot de L1 L2 se factorise sous la forme u = vw, v L1 et w L2 . Chaque facteur correspond un calcul russi respectivement dans A1 et dans A2 , desquels se dduit immdiatement un calcul russi dans A. Thorme 3.9 (Clture par toile). Les langages reconnaissables sont clos par toile. Preuve : La construction de A reconnaissant L partir de A reconnaissant L est immdiate : il sut de rajouter une transition spontane depuis tout tat nal de A vers ltat initial q0 . Cette nouvelle transition permet litration dans A de mots de L. Pour complter la construction, on vrie si appartient L(A) : si ce nest pas le cas, alors il faudra marquer ltat initial de A comme tat nal de A . En application de cette section, vous pourrez montrer (en construisant les automates correspondants) que les langages reconnaissables sont aussi clos pour les oprations de prxation, suxation, pour les facteurs, les sous-mots...

3.2.2

Reconnaissables et rationnels

Les proprits de clture dmontres pour les reconnaissables (pour lunion, la concatnation et ltoile) la section prcdente, compltes par la remarque que tous les langages nis sont reconnaissables, nous permettent darmer que tout langage rationnel est reconnaissable. Lensemble des langages rationnels tant en eet le plus petit ensemble contenant tous les ensembles nis et clos pour les oprations rationnelles, il est ncessairement inclus dans lensemble des reconnaissables. Nous montrons dans un premier temps comment exploiter les constructions prcdentes pour construire simplement un automate correspondant une expression rationnelle donne. Nous montrons ensuite la rciproque, savoir que tout reconnaissable est galement rationnel : les langages reconnus par les automates nis sont prcisment ceux qui sont dcrits par des expressions rationnelles. Des expressions rationnelles vers les automates Les constructions de la section prcdente ont montr comment construire les automates ralisant des oprations lmentaires sur les langages. Nous allons nous inspirer de ces constructions pour driver un algorithme permettant de convertir une expression rationnelle en un automate ni reconnaissant le mme langage. Les expressions rationnelles sont formellement dnies de manire rcursive partir des briques 35

de base que sont , et les symboles de . Nous commenons donc par prsenter les automates nis pour les langages dnots par ces trois expressions rationnelles la Figure 3.12.
0
(a)

0
(b)

(c)

F. 3.12 Machines lmentaires pour , {} et {a} partir de ces automates lmentaires, nous allons construire de manire itrative des automates pour des expressions rationnelles plus complexes. Pour cette construction, nous nutiliserons que des automates qui ont un unique tat nal nadmettant aucune transition sortante, que nous noterons qF . Cest bien le cas des automates lmentaires pour et a ; pour il faudrait rajouter un tat nal distinct de (et non reli ) ltat initial. Si e1 et e2 dnotent les langages reconnus respectivement par A1 et A2 , alors lautomate de la Figure 3.13 reconnat le langage dnot par lexpression e1 + e2 .
q1 0
1 A

q1 F

q0

qF q2 0 A
2

q2 F

F. 3.13 Machine ralisant e1 + e2 Lunion correspond donc une mise en parallle physique de A1 et de A2 : un calcul dans cette machine est russi si et seulement sil est russi dans lune des deux machines A1 ou A2 . On note, par ailleurs, que la machine rsultant de lunion conserve la proprit de navoir quun seul tat nal de degr sortant nul. La machine reconnaissant le langage dnot par concatnation de deux expressions e1 et e2 correspond une mise en srie des deux machines A1 et A2 , o ltat nal de A1 est connect ltat initial de A2 par une transition spontane comme sur la Figure 3.14.
q1 0
1 A

q1 F

q2 0

2 A

q2 F

F. 3.14 Machine ralisant e1 e2 . La machine ralisant ltoile est, comme prcdemment, construite en rajoutant une possibilit de reboucler depuis ltat nal vers ltat initial de la machine, ainsi quun arc permettant de reconnatre , comme reprsent sur la Figure 3.15. A partir de ces constructions simples, il est possible de driver un algorithme permettant de construire un automate reconnaissant le langage dnot par une expression rgulire quelconque : il sut de dcomposer lexpression en ses composants lmentaires, puis dappliquer les constructions prcdentes pour construire lautomate correspondant. Cet algorithme est connu sous le nom 36

q0

q1 0

1 A

q1 F

qF

F. 3.15 Machine ralisant e1 dalgorithme de Thompson. En guise dillustration de cette construction, la Figure 3.16 reprsente lautomate correspondant lexpression : e = (a + b) b.

F. 3.16 Machine pour (a + b) b Cette construction simple produit un automate qui a au plus 2n tats pour une expression forme par n oprations rationnelles (car chaque opration rajoute exactement deux tats) ; chaque tat de lautomate possde au plus deux transitions sortantes. Cependant, cette construction a le dsavantage de produire un automate non-dterministe, contenant de multiples transitions spontanes. Il existe dautres procdures permettant de traiter de manire plus ecace les expressions ne contenant pas le symbole (par exemple la construction de Gloushkow) ou pour construire directement un automate dterministe. Des automates vers les expressions rationnelles La construction dune expression rationnelle dnotant le langage reconnu par un automate A demande lintroduction dune nouvelle varit dautomates, que nous appellerons gnraliss . Les automates gnraliss dirent des automates nis en ceci que leurs transitions sont tiquetes par des sous-ensembles rationnels de . Dans un automate gnralis, ltiquette dun calcul se construit par concatnation des tiquettes rencontres le long des transitions ; le langage reconnu par un automate gnralis est lunion des langages correspondants aux calculs russis. Les automates gnraliss reconnaissent exactement les mmes langages que les automates nis standard . Lide gnrale de la transformation que nous allons tudier consiste partir dun automate ni standard et de supprimer un par un les tats, tout en sassurant que cette suppression ne modie 37

pas le langage reconnu par lautomate. Ceci revient construire de proche en proche une srie dautomates gnraliss qui sont tous quivalents lautomate de dpart. La procdure se termine lorsquil ne reste plus que lunique tat initial et lunique tat nal : en lisant ltiquette des transitions correspondantes, on dduit une expression rationnelle dnotant le langage reconnu par lautomate originel. Pour se simplier la tche commenons par introduire deux nouveaux tats, qI et qF , qui joueront le rle dunique tat respectivement initial et nal. Ces nouveaux tats sont connects aux tats initial et naux par des transitions spontanes. On sassure ainsi qu la n de lalgorithme, il ne reste plus quune seule et unique transition, celle qui relie qI qF . Lopration cruciale de cette mthode est celle qui consiste supprimer ltat qi , o qi nest ni initial, ni nal. On suppose quil y a au plus une transition entre deux tats : si a nest pas le cas, il est possible de se ramener cette conguration en prenant lunion des transitions existantes. On note eii ltiquette de la transition de qi vers qi si celle ci existe ; si elle nexiste pas on a simplement eii = . La procdure de suppression de qi comprend alors les tapes suivantes : pour chaque paire dtat (q j , qk ) avec j i, k i, tels quil existe une transition q j qi tiquete e ji et une transition qi qk tiquete eik , ajouter la transition q j qk , portant ltiquette e ji eii eik . Si la transition q j qk existe dj avec ltiquette e jk , alors il faut additionnellement faire : e jk = (e jk + e ji eii eik ). Cette transformation doit tre opre pour chaque paire dtats (y compris pour q j = qk !) avant que qi puisse tre supprim. Une illustration graphique de ce mcanisme est reproduit sur la Figure 3.17. supprimer qi , ainsi que tous les arcs incidents e jk

qj

e ji

qi e ii

e ik

qk

qj

* e ji e ii e ik| e jk

qk

F. 3.17 Illustration de BMC : limination de ltat i La preuve de la correction de cet algorithme rside en la vrication qu chaque itration le langage reconnu ne change pas. Cet invariant se vrie trs simplement : tout calcul russi passant par qi avant que qi soit supprim contient une squence q j qi qk . Ltiquette de ce sous-calcul tant copie lors de la suppression de qi sur larc q j qk , un calcul quivalent existe dans lautomate rduit. Cette mthode de construction de lexpression quivalente un automate est appele mthode dlimination des tats, connue galement sous le nom dalgorithme de Brzozowski et McCluskey. Vous noterez que le rsultat obtenu dpend de lordre selon lequel les tats sont examins. En guise dapplication, il est recommand de dterminer quelle est lexpression rationnelle corres38

pondant aux automates des gures 3.7 et 3.8. Un corollaire fondamental de ce rsultat est que pour chaque langage reconnaissable, il existe (au moins) une expression rationnelle qui le dnote : tout langage reconnaissable est rationnel. Kleene Nous avons montr comment construire un automate correspondant une expression rationnelle et comment driver une expression rationnelle dnotant un langage quivalent celui reconnu par un automate ni quelconque. Ces deux rsultats permettent dnoncer un des rsultats majeurs de ce chapitre. Thorme 3.10 (Kleene). Un langage est reconnaissable (reconnu par un automate ni) si et seulement si il est rationnel (dnot par une expression rationnelle). Ce rsultat permet de tirer quelques consquences non encore envisages : par exemple que les langages rationnels sont clos par complmentation et par intersection nie : ce rsultat, loin dtre vident si on sen tient aux notions doprations rationnelles, tombe simplement lorsque lon utilise lquivalence entre rationnels et reconnaissables. De manire similaire, les mthodes de transformation dune reprsentation lautre sont bien pratiques : sil est immdiat de driver de lautomate de la Figure 3.2 une expression rationnelle pour le langage contenant un nombre de a multiple de 3, il est beaucoup moins facile dcrire directement lexpression rationnelle correspondante. En particulier, le passage par la reprsentation sous forme dautomates permet de dduire une mthode pour vrier si deux expressions sont quivalentes : construire les deux automates correspondants, et vrier quils sont quivalents. Nous savons dj comment raliser la premire partie de ce programme ; une procdure pour tester lquivalence de deux automates est prsente la section 3.3.2.

3.3

Quelques proprits des langages reconnaissables

Lquivalence entre langages rationnels et langages reconnaissables a enrichi singulirement notre palette doutils concernant les langages rationnels : pour montrer quun langage est rationnel, on peut au choix exhiber un automate ni pour ce langage ou bien encore une expression rationnelle. Pour montrer quun langage nest pas rationnel, il est utile de disposer de la proprit prsente dans la section 3.3.1, qui est connue sous le nom de lemme de pompage (en anglais pumping lemma). Intuitivement, cette proprit pose des limitations intrinsques concernant la diversit des mots appartenant un langage rationnel inni : au del dune certaine longueur, les mots dun langage rationnel sont en fait construits par itration de motifs apparaissant dans des mots plus courts.

3.3.1

Lemme de pompage

Thorme 3.11 (Lemme de pompage). Soit L un langage rationnel inni. Il existe un entier k tel que pour tout mot x de L plus long que k, x se factorise en x = uvw, avec (i) | v | 1 (ii) | uv | k et (iii) pour tout i 0, uvi w est galement un mot de L. Si un langage est inni, alors il contient des mots de longueur arbitrairement grande. Ce que dit ce lemme, cest essentiellement que ds quun mot de L est assez long, il contient un facteur dirent 39

de qui peut tre itr volont tout en restant dans L. En dautres termes, les mots longs de L sont construits par rptition dun facteur sinsrant lintrieur de mots plus courts. Preuve : Soit A un DFA de k tats reconnaissant L et soit x un mot de L, de longueur suprieure ou gale k. La reconnaissance de x dans A correspond un calcul q0 . . . qn impliquant | x | + 1 tats. A nayant que k tats, le prxe de longueur k + 1 de cette squence contient ncessairement deux fois le mme tat q, aux indices i et j, avec 0 i < j k. Si lon note u le prxe de x tel que (q0 , u) = q et v le facteur tel que (q, v) = q, alors on a bien (i) car au moins un symbole est consomm le long du cycle q . . . q ; (ii) car j k ; (iii) en court-circuitant ou en itrant les parcours le long du circuit q . . . q. Attention : le lemme est aussi vri pour de nombreux langages non-rationnels : il nexprime donc quune condition ncessaire (mais pas susante) de rationalit. Ce lemme permet, par exemple, de prouver que le langage des carrs parfaits dni par L = {u , v tel que u = v2 } nest pas un langage rationnel. En eet, soit k lentier spci par le lemme de pompage et x un mot plus grand que 2k : x = yy avec | y | k. Il est alors possible dcrire x = uvw, avec | uv | k. Ceci implique que uv est un prxe de y, et y un suxe de w. Pourtant, uvi w doit galement tre dans L, alors quun seul des y est aect par litration : ceci est manifestement impossible. Vous montrerez de mme que le langage ne contenant que les mots dont la longueur est un carr parfait et que le langage des mots dont la longueur est un nombre premier ne sont pas non plus des langages reconnaissables. Une manire simple dexprimer cette limitation intrinsque des langages rationnels se fonde sur lobservation suivante : dans un automate, le choix de ltat successeur pour un tat q ne dpend que de q, et pas de la manire dont le calcul sest droul avant q. En consquence, un automate ni ne peut grer quun nombre ni de congurations direntes, ou, dit autrement, possde une mmoire borne. Cest insusant pour un langage tel que le langage des carrs parfaits pour lequel laction conduire (le langage reconnatre) aprs un suxe u dpend de u tout entier : reconnatre un tel langage demanderait en fait un nombre inni dtats.

3.3.2

Quelques consquences

Dans cette section, nous tablissons quelques rsultats complmentaires portant sur la dcidabilit, cest--dire sur lexistence dalgorithmes permettant de rsoudre quelques problmes classiques portant sur les langages rationnels. Nous connaissons dj un algorithme pour dcider si un mot appartient un langage rationnel (lalgorithme 1) ; cette section montre en fait que la plupart des problmes classiques pour les langages rationnels ont des solutions algorithmiques. Thorme 3.12. Si A est un automate ni contenant k tats : (i) L(A) est non vide si et seulement si A reconnat un mot de longueur strictement infrieure k. (ii) L(A) est inni si et seulement si A reconnat un mot u tel que k | u | < 2k Preuve (i) : un sens de limplication est trivial : si A reconnat un mot de longueur infrieure k, L(A) est non-vide. Supposons L(A) non vide et soit u le plus petit mot de L(A) ; supposons que la longueur de u soit strictement suprieure k. Le calcul (q0 , u) A (q, ) contient au moins k tapes, impliquant quun tat au moins est visit deux fois et est donc impliqu dans un circuit C. En court-circuitant C, on dduit un mot de L(A) de longueur strictement infrieure la longueur de u, ce qui contredit lhypothse de dpart. On a donc bien | u | < k.

40

(ii) : un raisonnement analogue celui utilis pour montrer le lemme de pompage nous assure quun sens de limplication est vrai. Si maintenant L(A) est inni, il doit au moins contenir un mot plus long que k. Soit u le plus petit mot de longueur au moins k : soit il est de longueur strictement infrieure 2k, et le rsultat est prouv. Soit il est au moins gal 2k, mais par le lemme de pompage on peut court-circuiter un facteur de taille au plus k et donc exhiber un mot strictement plus court et de longueur au moins 2k, ce qui est impossible. Cest donc que le plus petit mot de longueur au moins k a une longueur infrieure 2k. Thorme 3.13. Soit A un automate ni, il existe un algorithme permettant de dcider si : L(A) est vide L(A) est ni / inni Ce rsultat dcoule directement des prcdents : il existe, en eet, un algorithme pour dterminer si un mot u est reconnu par A. Le rsultat prcdent nous assure quil sut de tester | | k mots pour dcider si le langage dun automate A est vide. De mme, | | 2k | | k vrications susent pour prouver quun automate reconnat un langage inni. On en dduit un rsultat concernant lquivalence : Thorme 3.14. Soient A1 et A2 deux automates nis. Il existe une procdure permettant de dcider si A1 et A2 sont quivalents. Il sut en eet pour cela de former lautomate reconnaissant (L(A1 ) L(A2 )) (L(A1 ) L(A2 )) (par exemple en utilisant les procdures dcrites la section 3.2.1) et de tester si le langage reconnu par cet automate est vide. Si cest le cas, alors les deux automates sont eectivement quivalents.

3.4

Lautomate canonique

Dans cette section, nous donnons une nouvelle caractrisation des langages reconnaissables, partir de laquelle nous introduisons la notion dautomate canonique dun langage. Nous prsentons ensuite un algorithme pour construire lautomate canonique dun langage reconnaissable reprsent par un DFA quelconque.

3.4.1

Une nouvelle caractrisation des reconnaissables

Commenons par une nouvelle dnition : celle dindistinguabilit. Dnition 3.8. Soit L un langage de . Deux mots de u et v sont dits indistinguables dans L si pour tout w dans , soit uw et vw sont tous deux dans L, soit uw et vw sont tous deux dans L. En dautres termes, deux mots u et v sont distinguables dans L sil existe un mot w de L tel que uw soit dans L, mais pas vw. La relation dindistinguabilit dans L est une relation rexive, symtrique et transitive : cest une relation dquivalence que nous noterons L . Considrons, titre dillustration, le langage L = a(a + b)(bb) . Pour ce langage, u = aab et v = abb sont indistinguables : pour tout mot de L x = uw, ayant pour prxe u, y = vw est en eet un autre mot de L. u = a et v = aa sont par contre distinguables : en concatnant w = abb u, on obtient aabb qui est dans L ; en revanche, aaabb nest pas un mot de L. De manire similaire, on dnit la notion dindistinguabilit dans un automate dterministe A par : 41

Dnition 3.9. Soit A = (, Q, q0 , F, ) un automate ni dterministe. Deux mots de u et v sont dits indistinguables dans A si et seulement si (q0 , u) = (q0 , v). On notera dindistinguabilit dans A par : u A v. Autrement dit, deux mots u et v sont indistinguables pour A si le calcul par A de u depuis q0 aboutit dans le mme tat q que le calcul de v. Cette notion rejoint bien la prcdente, puisque tout mot w tel que (q, w) aboutisse dans un tat nal est une continuation valide la fois de u et de v dans L ; inversement tout mot conduisant un chec depuis q est une continuation invalide la fois de u et de v. Pour continuer, rappelons la notion de congruence droite, dj introduite la section 1.4.2 : Dnition 3.10 (Invariance droite). Une relation dquivalence R sur est dite invariante droite si et seulement si : uRv w, uwRvw. Une relation invariante droite est appele une congruence droite. Par dnition, les deux relations dindistinguabilit dnies ci-dessus sont invariantes droite. Nous sommes maintenant en mesure dexposer le rsultat principal de cette section. Thorme 3.15 (Myhill-Nerode). Soit L un langage sur , les trois assertions suivantes sont quivalentes : (i) L est un langage rationnel (ii) il existe une relation dquivalence sur , invariante droite, ayant un nombre ni de classes dquivalence et telle que L est gal lunion de classes dquivalence de (iii) L possde un nombre ni de classes dquivalences Preuve : (i) (ii) : A tant rationnel, il existe un DFA A qui le reconnat. La relation dquivalence A ayant autant de classes dquivalences quil y a dtats, ce nombre est ncessairement ni. Cette relation est bien invariante droite, et L, dni comme {u , (q0 , u) F} est simplement lunion des classes dquivalences associes aux tats naux de A. (ii) (iii) : Soit la relation satisfaisant la proprit (ii), et u et v tels que u v. Par la proprit dinvariance droite, on a pour tout mot w dans uw vw. Ceci entrane que soit uw et vw sont simultanment dans L (si leur classe dquivalence commune est un sous-ensemble de L), soit tout deux hors de L (dans le cas contraire). Il sensuit que u L v : toute classe dquivalence pour est incluse dans une classe dquivalence de L ; il y a donc moins de classes dquivalence pour L que pour , ce qui entrane que le nombre de classes dquivalence de L est ni. (iii) (i) : construisons lautomate A = (, Q, q0 , F, ) suivant : chaque tat de Q correspond une classe dquivalence [u]L de L ; do il sensuit que Q est ni. q0 = []L , classe dquivalence de F = {[u]L , u L} ([u]L , a) = [ua]L . Cette dnition de est indpendante du choix dun reprsentant de [u]L : si u et v sont dans la mme classe pour L , par invariance droite de L , il en ira de mme pour ua et va. A ainsi dni est un automate ni dterministe et complet. Montrons maintenant que A reconnat L et pour cela, montrons par induction que (q0 , u) A [u]L . Cette proprit est vraie pour u = , supposons la vraie pour tout mot de taille infrieure k et soit u = va de taille k + 1. On a (q0 , ua) A (p, a) A (q, ). Or, par lhypothse de rcurrence on sait que p = [u]L ; et comme q = ([u]L , a), alors q = [ua]L , ce qui est bien le rsultat recherch. On dduit que si u est dans L(A), un calcul sur lentre u aboutit dans un tat nal de A, et donc que u est dans L. Rciproquement, si u est dans L, un calcul sur lentre u aboutit dans un tat [u]L , qui est, par dnition de A, nal. 42

Ce rsultat fournit une nouvelle caractrisation des langages reconnaissables et peut donc tre utilis pour montrer quun langage est, ou nest pas, reconnaissable. Ainsi, par exemple, L = j i i {u, a , i N tq. u = a2 } nest pas reconnaissable. En eet, pour tout i, j, a2 et a2 sont distingus i par a2 . Il ny a donc pas un nombre ni de classes dquivalence pour L , et L ne peut en consquence tre reconnu par un automate ni. L nest donc pas un langage rationnel.

3.4.2

Automate canonique

La principale consquence du rsultat prcdent concerne lexistence dun reprsentant unique ( une renumrotation des tats prs) et minimal (en nombre dtats) pour les classes de la relation dquivalence sur les automates nis. Thorme 3.16. Lautomate AL , fond sur la relation dquivalence L , est le plus petit automate dterministe complet reconnaissant L. Cet automate est unique ( une renumrotation des tats prs) et appel automate canonique de L. Preuve : soit A un automate ni dterministe reconnaissant L. A dnit une relation dquivalence satisfaisant les conditions de lalina (ii) de la preuve du thorme 3.15 prsent ci-dessus. Nous avons montr que chaque tat de A correspond une classe dquivalence (pour A ) incluse dans une classe dquivalence pour L . Le nombre dtats de A est donc ncessairement plus grand que celui de AL . Le cas o A et AL ont le mme nombre dtats correspond au cas o les classes dquivalences sont toutes semblables, permettant de dnir une correspondance biunivoque entre les tats des deux machines. Lexistence de AL tant garantie, reste savoir comment le construire : la construction directe des classes dquivalence de L nest en eet pas ncessairement immdiate. Nous allons prsenter un algorithme permettant de construire AL partir dun automate dterministe quelconque reconnaissant L. Comme pralable, nous dnissons une troisime relation dindistinguabilit, portant cette fois sur les tats : Dnition 3.11. Deux tats q et p dun automate ni dterministe A sont distinguables sil existe un mot w tel que le calcul (q, w) termine dans un tat nal alors que le calcul (p, w) choue. Si deux tats ne sont pas distinguables, ils sont indistinguables. Comme les relations dindistinguabilit prcdentes, cette relation est une relation dquivalence, note sur les tats de Q. Lensemble des classes dquivalence [q] est note Q . Pour un automate ni dterministe A = (, Q, q0 , F, ), on dnit lautomate ni A par : A = (, Q , [q0 ] , F , ), avec : ([q] , a) = [(q, a)] ; et F = [q] , avec q dans F. est correctement dni en ce sens que si p et q sont indistinguables, alors ncessairement (q, a) (p, a). Montrons, dans un premier temps, que ce nouvel automate est bien identique lautomate canonique AL . On dnit pour cela une application , qui associe un tat de A un tat de AL de la manire suivante : ([q] ) = [u]L sil existe u tel que (q0 , u) = q Notons dabord que est une application : si u et v de aboutissent tous deux dans des tats indistinguables de A, alors il est clair que u et v sont galement indistinguables, et sont donc dans la mme classe dquivalence pour L : le rsultat de ne dpend pas dun choix particulier de u.

43

Montrons maintenant que est une bijection. Ceci se dduit de la suite dquivalences suivante : ([q] ) = ([p] ) u, v , (q0 , u) = q, (q0 , u) = p, et u L v (q0 , u) (q0 , u) [q] = [p] (3.1) (3.2) (3.3)

Montrons enn que les calculs dans A sont en bijection par avec les calculs de AL . On a en eet : ([q0 ] ) = []L , car (q0 , ) = q0 [q0 ] ( ([q] , a) = L (([q] ), a) car soit u tel que (q0 , u) [q] , alors : (i) ( (q0 , u), a) ([q] , a) (cf. la dnition de ) et [ua]L = ( ([q] , a)) = L ([u], a) (cf. la dnition de L ), ce quil fallait prouver. si [q] est nal dans A , alors il existe u tel que (q0 , u) soit un tat nal de A, impliquant que u est un mot de L, et donc que [u]L est un tat nal de lautomate canonique. Il sensuit que chaque calcul dans A est isomorphe (par ) un calcul dans AL , puis que, ces deux automates ayant les mmes tats initiaux et naux, ils reconnaissent le mme langage. Lide de lalgorithme de minimisation de A = (, Q, q0 , F, ) consiste alors chercher identier les classes dquivalence pour , de manire driver lautomate A (alias AL ). La nitude de Q nous garantit lexistence dun algorithme pour calculer ces classes dquivalences. La procdure itrative dcrite ci-dessous esquisse une implantation nave de cet algorithme, qui construit la partition correspondant aux classes dquivalence par ranement dune partition initiale 0 qui distingue simplement tats naux et non-naux. Cet algorithme se glose comme suit : Initialiser avec deux classes dquivalence : F et Q\F Itrer jusqu stabilisation : pour toute paire dtat q et p dans la mme classe de la partition k , sil existe a tel que (q, a) et (p, a) ne sont pas dans la mme classe pour k , alors ils sont dans deux classes direntes de k+1 . On vrie que lorsque cette procdure sarrte (aprs un nombre ni dtapes), deux tats sont dans la mme classe si et seulement si ils sont indistinguables. Cette procdure est connue sous le nom dalgorithme de Moore. Implante de manire brutale, elle aboutit une complexit quadratique ( cause de ltape de comparaison de toutes les paires dtats). En utilisant des structures auxiliaires, il est toutefois possible de se ramener une complexit en n log(n), avec n le nombre dtats. Considrons pour illustrer cette procdure lautomate reproduit la Figure 3.18 :
a a b a

q0 b q3

q1 a

q2 b

q4

q5

a,b

F. 3.18 Un DFA minimiser Les itrations successives de lalgorithme de construction des classes dquivalence pour se droulent alors comme suit : 44

0 = {{q0 , q1 , q2 , q3 , q4 }, {q5 }} (car q5 est le seul tat nal) 1 = {{q0 , q1 , q3 }, {q2 , q4 }, {q5 }} (car q2 et q4 , sur le symbole b, atteignent q5 ). 2 = {{q0 }, {q1 , q3 }, {q2 , q4 }, {q5 }} (car q1 et q3 , sur le symbole b, atteignent respectivement q2 et q4 ). 3 = 2 n de la procdure. Lautomate minimal rsultant de ce calcul est reproduit la Figure 3.19.
a a, b b a b a,b

q0

q 1 ,q 3

q 2 ,q 4

q5

F. 3.19 Lautomate minimal de (a + b)a ba b(a + b)

45

Chapitre 4

Grammaires syntagmatiques
Dans cette partie, nous prsentons de manire gnrale les grammaires syntagmatiques, ainsi que les principaux concepts arents. Nous montrons en particulier quau-del de la classe des langages rationnels, il existe bien dautres familles de langages, qui valent galement la peine dtre explores.

4.1

Grammaires

Dnition 4.1 (Grammaire). Une grammaire syntagmatique G est dnie par un quadruplet (V, , P, S), o V, et P dsignent respectivement des ensembles de variables (ou non-terminaux), de terminaux , et de productions . V et sont des ensembles nis de symboles tels que V = . Les productions sont des lments de (V ) (V ) , que lon note sous la forme . S est un lment distingu de V, appel le symbole initial ou encore laxiome de la grammaire. La terminologie de langue anglaise quivalente grammaire syntagmatique est Phrase Structure Grammar, plutt utilise par les linguistes, qui connaissent bien dautres sortes de grammaires. Les informaticiens disent plus simplement grammar (pour eux, il ny a pas dambigut sur le terme !). Dans la suite, nous utiliserons les conventions suivantes pour noter les lments de la grammaire : les variables seront notes par des symboles en majuscule ; les terminaux par des symboles minuscule ; les mots de (V ) par des lettres de lalphabet grec. Illustrons ces premires dnitions en examinant la grammaire dnie dans la Table 4.1. Cette grammaire contient une seule variable, S, qui est galement laxiome ; deux lments terminaux a et b, et deux rgles de production. p1 : S aSb p2 : S ab T. 4.1 Une grammaire pour an bn Si est une production dune grammaire G, on dit que est la partie gauche et la partie droite de la production. 46

Lunique opration autorise, dans les grammaires syntagmatiques, est la rcriture dune squence de symboles par application dune production. Formellement, Dnition 4.2 (Drivation Immdiate ). On dnit la relation G (lire : drive immdiatement) sur lensemble (V ) (V ) par G si et seulement si est une production de G. La notion de drivation immdiate se gnralise la drivation en un nombre quelconque dtapes. Il sut pour cela de considrer la fermeture transitive de la relation G , que lon note G : Dnition 4.3 (Drivation ). On dnit la relation G sur lensemble (V ) (V ) par 1 G m si et seulement si il existe 2 , ..., m1 dans (V ) tels que 1 G 2 G ... G m1 G m . Ainsi, par exemple, la drivation suivante est une drivation pour la grammaire de la Table 4.1 : S G1 aSb G1 aaSbb G1 aaaSbbb G1 aaaaSbbbb permettant de dduire que S G1 aaaaSbbbb. Ces dnitions prliminaires tant poses, il est maintenant possible dexprimer formellement le lien entre grammaires et langages. Dnition 4.4 (Langage engendr par une grammaire). On appelle langage engendr par G, not L(G), le sous-ensemble de dni par {w , S G w}. L(G) est donc un sous-ensemble de , contenant prcisment les mots qui se drivent par G depuis S. Lorsqu, contenant des non-terminaux, se drive de S, on dit qu est un proto-mot (en anglais sentential form). Pour produire un mot1 du langage, il faudra alors habilement utiliser les productions, de manire se dbarrasser, par rcritures successives depuis laxiome, de tous les non-terminaux du proto-mot courant. Vous vrierez ainsi que le langage engendr par la grammaire de la Table 4.1 est lensemble des mots forms en concatnant n fois le symbole a, suivi de n fois le symbole b (soit le langage {an bn , n 1}). Si toute grammaire engendre un langage unique, la rciproque nest pas vraie. Un langage L peut tre engendr par de multiples grammaires, comme on peut sen persuader en rajoutant volont des non-terminaux ou des terminaux inutiles. Il existe plusieurs manires pour un nonterminal dtre inutile : par exemple en napparaissant dans aucune partie droite (ce qui fait quil napparatra dans aucun proto-mot) ; ou bien en napparaissant dans aucune partie gauche (il ne pourra jamais tre limin dun proto-mot, ni donc tre utilis dans la drivation dune phrase du langage...). Nous reviendrons sur cette notion dutilit des lments de la grammaire la section 8.1.2. Comme nous lavons fait pour les expressions rationnelles ( la section 2.1.3) et pour les automates nis (voir la section 3.1), il est en revanche possible de dnir des classes dquivalence de grammaires qui engendrent le mme langage. Dnition 4.5 (quivalence entre grammaires). Deux grammaires G1 et G2 sont quivalentes si et seulement si elles engendrent le mme langage
1 La terminologie est ainsi faite que lorsque lon parle de grammaires, il est dusage dappeler phrase les squences dlments terminaux, que nous appelions prcdemment mot. Il sensuit parfois (et cest fort fcheux), que le terme de mot est parfois employ pour dnoter les lments de lalphabet (et non plus les lments de ). Nous essaierons dviter cette confusion, et nous continuerons de parler de mots pour dsigner les lments dun langage, mme lorsque ces mots correspondront ce quil est commun dappeler phrase dans le langage courant.

47

Les grammaires syntagmatiques dcrivent donc des systmes permettant dengendrer, par rcriture successive, les mots dun langage : pour cette raison, elles sont parfois galement appeles grammaires gnratives . De ces grammaires se dduisent, (de manire plus ou moins directe) des algorithmes permettant de reconnatre les mots dun langage, voire, pour les sous-classes les plus simples, de dcider si un mot appartient ou non un langage. Le processus de construction itrative dun mot par rcriture dune suite de proto-mots permet de tracer les tapes de la construction et apporte une information indispensable pour interprter le mot. Les grammaires syntagmatiques permettent donc galement dassocier des structures aux mots dun langage, partir desquelles il est possible de calculer leur signication. Ces notions sont formalises la section 5.2.

4.2

La hirarchie de Chomsky

Chomsky identie une hirarchie de familles de grammaires de complexit croissante, chaque famille correspondant une contrainte particulire sur la forme des rgles de rcriture. Cette hirarchie, laquelle correspond une hirarchie2 de langages, est prsente dans les sections suivantes.

4.2.1

Grammaires de type 0

Dnition 4.6 (Type 0). On appelle grammaire de type 0 une grammaire syntagmatique dans laquelle la forme des production est non-contrainte. Le type 0 est le type le plus gnral. Toute grammaire syntagmatique est donc de type 0 ; toutefois, au fur et mesure que les autres types seront introduits, on prendra pour convention dappeler type dune grammaire le type le plus spcique auquel elle appartient. Le principal rsultat retenir pour les grammaires de type 0 est le suivant, que nous ne dmontrerons pas. Thorme 4.1. Les langages rcursivement numrables sont les langages engendrs par une grammaire de type 0. Lensemble des langages rcursivement numrables est not RE. Rappelons quil a t introduit la section 1.2.2. Ce qui signie quen dpit de leur apparente simplicit, les grammaires syntagmatiques permettent de dcrire (pas toujours avec lgance, mais cest une autre question) exactement les langages que lon sait reconnatre (ou numrer) avec une machine de Turing. Les grammaires syntagmatiques de type 0 ont donc une expressivit maximale. Ce rsultat est thoriquement satisfaisant, mais ne nous en dit gure sur la vritable nature de ces langages. Dans la pratique, il est extrmement rare de rencontrer un langage de type 0 qui ne se ramne pas un type plus simple.
2 Les dveloppements des travaux sur les grammaires formelles ont conduit largement raner cette hirarchie. Il existe ainsi, par exemple, de multiples sous-classes des langages algbriques, dont certaines seront prsentes dans la suite.

48

4.2.2

Grammaires contextuelles (type 1)

Les grammaires monotones introduisent une premire restriction sur la forme des rgles, en imposant que la partie droite de chaque production soit ncessairement plus longue que la partie gauche. Formellement : Dnition 4.7 (Grammaire monotone). On appelle grammaire monotone une grammaire syntagmatique dans laquelle toute production est telle que | | | | . Cette dnition impose quau cours dune drivation, les proto-mots dune grammaire monotone stendent de manire monotone. Cette contrainte interdit en particulier dengendrer le mot vide . Nous reviendrons en dtail sur cette question la section 4.2.6. Les langages engendrs par les grammaires monotones sont galement obtenus en posant une contrainte alternative sur la forme des rgles, conduisant la notion de grammaire contextuelle : Dnition 4.8. On appelle grammaire contextuelle , ou sensible au contexte, en abrg grammaire CS (en anglais Context-Sensitive) une grammaire telle que toute production de G est de la forme 1 A2 1 2 , avec 1 , 2 , dans ( V ) , et A est dans V. Les grammaires contextuelles sont donc telles que chaque production ne rcrit quun symbole non-terminal la fois, le contexte (cest--dire les symboles encadrant ce non-terminal) restant inchang : do la qualication de contextuelles pour ces grammaires. Par construction, toute grammaire contextuelle est monotone (car ). Le thorme suivant nous dit plus : grammaires contextuelles et monotones engendrent exactement les mmes langages. Thorme 4.2. Pour tout langage L engendr par une grammaire monotone G, il existe une grammaire contextuelle qui engendre L. Preuve : Soit L engendr par la grammaire monotone G = (T, N, S, P). Sans perte de gnralit, nous supposons que les terminaux napparassent que dans des productions de la forme A a. Si cela nest pas le cas, il sut dintroduire un nouveau non-terminal Xa pour chaque terminal, de remplacer a par Xa dans toutes les productions, et dajouter P XA a. Nous allons construire une grammaire contextuelle quivalente G et pour cela nous allons dmontrer deux rsultats intermdiaires. Lemme 4.1. Si G est une grammaire monotone, il existe une grammaire monotone quivalente dans laquelle toutes les parties droites ont une longueur infrieure ou gale 2. Soit, en eet, = 1 . . . m = 1 . . . n une production de G. G tant monotone, m est infrieur ou gal n : compltons alors avec des de manire crire = 1 . . . n , o les i sont dans V {}. Construisons ensuite G , dduite de G en introduisant les n 1 nouveaux non-terminaux X1 . . . Xn1 , et en remplaant par les n les productions suivantes : 1 2 1 X1 i, 1 < i < n, Xi1 i+1 i Xi Xn1 n Il est clair que G est monotone et que lapplication successive de ces nouvelles rgles a bien pour eet global de rcrire de proche en proche en par : 1 2 . . . m G G G G G 1 X1 3 . . . m 1 2 X2 4 . . . n ... 1 2 . . . n1 Xn1 1 2 . . . n1 n 49

Soit alors u dans L(G) : si u se drive de S sans utiliser

, alors u se drive pareillement de

S dans G . Si u se drive dans G par S G vw G vw G u, alors u se drive dans G en remplaant ltape de drivation vw G vw par les tapes de drivation dtailles ci-dessus. Inversement, si u se drive dans G sans utiliser aucune variable Xi , elle se drive lidentique dans G. Si X1 apparat dans une tape de la drivation, son limination par application successive des n rgles prcdentes implique la prsence du facteur dans le proto-mot drivant u : u se drive alors dans G en utilisant . Par itration de cette transformation, il est possible de transformer toute grammaire monotone en une grammaire monotone quivalente dont toutes les productions sont telles que leur partie droite (et, par consquent, leur partie gauche : G est monotone) ont une longueur infrieure ou gale 2. Le lemme suivant nous permet darriver la forme dsire pour les parties gauches. Lemme 4.2. Si G est une grammaire monotone ne contenant que des productions de type AB CD, avec A, B, C et D dans V {}, alors il existe une grammaire quivalente satisfaisant la proprit du thorme 4.2. La dmonstration de ce lemme utilise le mme principe que la dmonstration prcdente, en introduisant pour chaque production R = AB CD le nouveau non-terminal XAB et en remplaant R par les trois productions suivantes : AB XAB B XAB B XAB D XAB D CD On dduit directement le rsultat qui nous intresse : toute grammaire monotone est quivalente une grammaire dans laquelle chaque production ne rcrit quun seul et unique symbole. Ces rsultats permettent nalement dintroduire la notion de langage contextuel. Dnition 4.9 (Langage contextuel). On appelle langage contextuel (ou langage sensible au contexte, en abrg langage CS) un langage engendr par une grammaire contextuelle (ou par une grammaire monotone). Les langages contextuels constituent une classe importante de langages, que lon rencontre eectivement (en particulier en traitement automatique des langues). Une prsentation plus complte des langages contextuels et des grammaires qui les reconnaissent est eectu au chapitre 13. Un reprsentant notable de ces langages est le langage {an bn cn , n 1}, qui est engendr par la grammaire G daxiome S et dont les productions sont reprsentes la Table 4.2. p1 p2 p3 p4 : : : : S aSQ S abc cQ Qc bQcbbcc

T. 4.2 Une grammaire pour an bn cn La grammaire de la Table 4.2 est monotone. Dans cette grammaire, on observe par exemple les drivations listes dans la Table 4.3. Il est possible de montrer quen fait les seules drivations qui russissent dans cette grammaire produisent les mots (et tous les mots) du langage {an bn cn , n 1}, ce qui est dailleurs loin dtre vident lorsque lon examine les productions de la grammaire. Un dernier rsultat important concernant les langages contextuels est le suivant : 50

SG abc ( par p1 ) SG aSQ ( par p1 ) G aabcQ ( par p2 ) G aabQc ( par p3 ) G aabbcc ( par p4 ) SG aSQ ( par p1 ) G aaSQQ ( par p1 ) G aaabcQQ ( par p2 ) G aaabQcQ ( par p3 ) G aaabbccQ ( par p4 ) G aaabbcQc ( par p3 ) G aaabbQcc ( par p3 ) G aaabbbccc ( par p4 ) T. 4.3 Des drivations pour an bn cn Thorme 4.3. Tout langage contextuel est rcursif, soit en notant RC lensemble des langages rcursifs, et CS lensemble des langages contextuels : CS RC. Ce que dit ce rsultat, cest quil existe un algorithme capable de dcider si un mot appartient ou pas au langage engendr par une grammaire contextuelle. Pour sen convaincre, esquissons le raisonnement suivant : soit u le mot dcider, de taille | u | . Tout proto-mot implique dans la drivation de u est au plus aussi long que u, cause de la proprit de monotonie. Il sut donc, pour dcider u, de construire de proche en proche lensemble D de toutes les proto-mots quil est possible dobtenir en inversant les productions de la grammaire. D contient un nombre ni de proto-mots ; il est possible de construire de proche en proche les lments de cet ensemble. Au terme de processus, si S est trouv dans D, alors u appartient L(G), sinon, u nappartient pas L(G). Ce bref raisonnement ne dit rien de la complexit de cet algorithme, cest--dire du temps quil mettra se terminer. Dans la pratique, tous les algorithmes gnraux pour les grammaires CS sont exponentiels. Quelques sous-classes particulires admettent toutefois des algorithmes de dcision polynomiaux. De nouveau, le lecteur intress se reportera au chapitre 13, dans lequel certains de ces algorithmes sont prsents. Pour nir, notons quil est possible de montrer que la rciproque nest pas vraie, donc quil existe des langages rcursifs qui ne peuvent tre dcrits par aucune grammaire contextuelle.

4.2.3

Grammaires hors-contexte

Une contrainte supplmentaire par rapport celle impose pour les grammaires contextuelles consiste exiger que toutes les productions contextuelles aient un contexte vide. Ceci conduit la dnition suivante. Dnition 4.10 (Grammaire de type 2). On appelle grammaire de type 2 (on dit galement hors-contexte ou algbrique , en abrg grammaire CF) (en anglais Context-free) une grammaire syntagmatique dans laquelle toute production est de la forme : A , avec A dans V et dans (V )+ . Le sens de cette nouvelle contrainte est le suivant : chaque fois quune variable A gure dans un 51

proto-mot, elle peut tre rcrite indpendamment du contexte dans lequel elle apparat. Par dnition, toute grammaire hors-contexte est un cas particulier de grammaire contextuelle. Cette nouvelle restriction permet dintroduire la notion de A-production : Dnition 4.11 (A-production). On appelle A-production une production dont la partie gauche est rduit au symbole A. Les langages hors-contexte se dnissent alors par : Dnition 4.12 (Langage hors-contexte ). On appelle langage hors-contexte (ou langage algbrique, en abrg langage CF) un langage engendr par une grammaire hors-contexte. Attention : ce nest pas parce quun langage est engendr par une grammaire hors-contexte quil est lui-mme ncessairement hors-contexte ; ni parce quun langage est engendr par une grammaire contextuelle quil est lui-mme contextuel. Considrez par exemple la grammaire contextuelle suivante : p1 : S aSb p2 : aSb aaSbb p3 : S ab T. 4.4 Une grammaire contextuelle pour an bn La grammaire (contextuelle) de la Table 4.4 engendre le langage hors-contexte an bn . Ce langage tant un langage CF, on peut toutefois trouver une grammaire CF pour ce langage. On notera CF lensemble des langages hors-contexte. Ces langages constituent probablement la classe de langages la plus tudie et la plus utilise dans les applications pratiques. Nous aurons loccasion de revenir en dtail sur ces langages dans les chapitres qui suivent et den tudier de nombreux exemples, en particulier dans le chapitre 5. Notons simplement, pour linstant, que cette classe contient des langages non-triviaux, comme par exemple {an bn , n 1}, engendr par la grammaire de la Table 4.1, qui est bien une grammaire hors-contexte ; ou encore le langage des palindromes (lcriture de cette grammaire est laisse en exercice).

4.2.4

Grammaires rgulires

Rgularit Les grammaires de type 3 rduisent un peu plus la forme des rgles autorises, dnissant une classe de langages encore plus simple que la classe des langages hors-contexte. Dnition 4.13 (Grammaire de type 3). On appelle grammaire de type 3 (on dit galement rgulire , en abrg grammaire RG) (en anglais regular) une grammaire syntagmatique dans laquelle toute production est soit de la forme : A aB, avec a dans et A, B dans V, soit de la forme A a. Par dnition, toute grammaire rgulire est hors-contexte. Le trait spcique des grammaires rgulires est que chaque production rcrit au moins un symbole terminal et au plus un nonterminal sa droite. Les drivations dune grammaire rgulire ont donc une forme trs simple, 52

puisque tout proto-mot produit par n tapes successives de drivation contient en tte n symboles terminaux, suivis dau plus une variable. La drivation se termine par la production dun mot du langage de la grammaire, lorsque le dernier terminal est limin par une rcriture de type :A a. La notion de langage rgulier se dnit comme prcdemment par : Dnition 4.14 (Langage rgulier). Un langage est rgulier si et seulement si il existe une grammaire rgulire qui lengendre. On notera RG lensemble des langages rguliers. Les rguliers sont rationnels Le rsultat principal concernant les langages rguliers est nonc dans le thorme suivant : Thorme 4.4. Si L est un langage rgulier, il existe un automate ni A qui reconnat L. Rciproquement, si L est un langage reconnaissable, avec L, alors il existe une grammaire rgulire qui engendre L. Ainsi les langages rguliers, un dtail prs (que nous discutons la section 4.2.6), ne sont rien dautre que les langages rationnels, aussi connus sous le nom de reconnaissables. Leurs proprits principales ont t dtailles par ailleurs (notamment la section 3.2) ; nous y renvoyons le lecteur. Pour avoir lintuition de ce thorme, considrons la grammaire engendrant le langage aa(a | b) a et lautomate reconnaissant ce langage, tous deux reproduits dans la Table 4.5. G p1 : p2 : p3,4 : p5 : S aA AaB B aB | bB B a A
a a a a

T. 4.5 Grammaire et automate pour aa(a | b) Dans G, la drivation de lentre aaba est S G aA G aaB G aabB G aaba, correspondant au calcul : (S, aabb) A (A, abb) A (B, bb) A (B, a) A (F, ). Cet exemple illustre la symtrie du rle jou par les variables de la grammaire et les tats de lautomate. Cette symtrie est formalise dans la construction suivante, qui vise fournir une dmonstration de lquivalence entre rationnels et rguliers. Soient G = (V, , P, S) une grammaire rgulire et A lautomate driv de G suivant A = (, V {Z}, S, {Z}, ), avec la fonction est dnie selon : (A, a) = B (A aB) P (A, a) = Z (A a) P Montrons maintenant que L(G) = L(A) et pour cela, montrons par induction lquivalence suivante : S G uB si et seulement si (S, u) A (B, ). Cette quivalence est vraie par dnition si u est de longueur 1. Supposons-la vraie jusqu une longueur n, et considrons : u = avb tel que S G avA G avbB. Par lhypothse de rcurrence il sensuit que (S, av) A (A, ), et donc que (S, avb) A (B, ) par construction de . Pour conclure, reste examiner comment une drivation se 53

termine : il faut ncessairement liminer la dernire variable par une production de type A a ; ceci correspond une transition dans ltat Z, unique tat nal de A. Inversement, un calcul russi dans A correspond une drivation liminant toutes les variables et donc un mot du langage L(G). La construction rciproque, permettant de construire une grammaire quivalente un automate ni quelconque est exactement inverse : il sut dassocier une variable chaque tat de lautomate (en prenant ltat initial pour axiome) et de rajouter une production par transition. Cette construction est acheve en rajoutant une nouvelle production A a pour toute transition (A, a) aboutissant dans un tat nal. Une consquence de cette quivalence est que si tout langage rgulier est par dnition hors contexte, le contraire nest pas vrai. Nous avons rencontr plus haut ( la section 4.2.3) une grammaire engendrant {an bn , n 1}, langage dont on montre aisment quen vertu du lemme de pompage pour les langages rationnels (cf. la section 3.3.1), il ne peut tre reconnu par un automate ni. La distinction introduite entre langages rguliers et langages hors-contexte nest pas de pure forme : il existe des langages CF qui ne sont pas rationnels. Variantes Il est possible de dnir de manire un peu plus librale les grammaires de type 3 : la limitation essentielle concerne en fait le nombre de non-terminaux en partie droite et leur positionnement systmatique droite de tous les terminaux. Dnition 4.15 (Grammaire de type 3). On appelle grammaire de type 3 (ici linaire droite ) (en anglais right linear) une grammaire syntagmatique dans laquelle toute production est soit de la forme : A uB, avec u dans et A, B dans V, soit de la forme A u, avec u dans + . Cette dnition est donc plus gnrale que la dnition des grammaires rgulires. Il est pourtant simple de montrer que les langages engendrs sont les mmes : chaque grammaire linaire droite admet une grammaire rgulire quivalente. La dmonstration est laisse en exercice. Les grammaires linaires droite engendrent donc exactement la classe des langages rationnels. On montre, de mme, que les grammaires linaires gauche (au plus un non-terminal dans chaque partie droite, toujours positionn en premire position) engendrent les langage rationnels. Ces grammaires sont donc aussi des grammaires de type 3. Attention : ces rsultats ne sappliquent plus si lon considre les grammaires linaires quelconques (dnies comme tant les grammaires telles que toute partie droite contient au plus un nonterminal) : les grammaires linaires peuvent engendrer des langages hors-contexte non rationnels. Pour preuve, il sut de considrer de nouveau la grammaire de la Table 4.1.

4.2.5

Grammaires choix nis

Il existe des grammaires encore plus simples que les grammaires rgulires. En particulier les grammaires choix nis sont telles que tout non-terminal ne rcrit que des terminaux. On appelle de telles grammaires les grammaires de type 4 : Dnition 4.16 (Grammaire de type 4). On appelle grammaire de type 4 (on dit galement choix nis , en abrg grammaire FC) une grammaire syntagmatique dans laquelle toute production est de la forme : A u, avec A dans V et u dans + . 54

Les grammaires de type 4, on sen convaincra aisment, nengendrent que des langages nis, mais engendrent tous les langages nis.

4.2.6

Les productions

La dnition que nous avons donne des grammaires de type 1 implique un accroissement monotone de la longueur des proto-mots au cours dune drivation, ce qui interdit la production du mot vide. Cette limitation thorique de lexpressivit des grammaires contextuelles a conduit noncer une version faible (cest--dire ne portant que sur les reconnaissables ne contenant pas le mot vide) de lquivalence entre langages rguliers et langages rationnels. Pour rsoudre cette limitation, on admettra quune grammaire contextuelle (ou hors-contexte, ou rgulire) puisse contenir des rgles de type A et on acceptera la possibilit quun langage contextuel contienne le mot vide. Pour ce qui concerne les grammaires CF, nous reviendrons sur ce point en tudiant les algorithmes de normalisation de grammaires ( la section 8.1.4). Pour ce qui concerne les grammaires rgulires, notons simplement que si lon accepte des productions de type A , alors on peut montrer que les langages rguliers sont exactement les langages reconnaissables. Il sut pour cela de complter la construction dcrite la section 4.2.4 en marquant comme tats naux de A tous les tats correspondant une variable pour laquelle il existe une rgle A . La construction inverse en est galement simplie : pour chaque tat nal A de lautomate, on rajoute la production A . Pour direntier les rsultats obtenus avec et sans , on utilisera le qualicatif de strict pour faire rfrence aux classes de grammaires et de langages prsentes dans les sections prcdentes : ainsi on dira quune grammaire est strictement hors-contexte si elle ne contient pas de production de type A ; quelle est simplement hors-contexte sinon. De mme on parlera de langage strictement hors-contexte pour un langage CF ne contenant pas et de langage hors-contexte sinon.

4.2.7

Conclusion

Le titre de la section introduisait le terme de hirarchie : quelle est-elle nalement ? Nous avons en fait montr dans cette section la srie dinclusions suivante : F C RG CF CS RC RE Il est important de bien comprendre le sens de cette hirarchie : les grammaires les plus complexes ne dcrivent pas des langages plus grands, mais permettent dexprimer des distinctions plus subtiles entre les mots du langage de la grammaire et ceux qui sont ne sont pas grammaticaux. Un autre point de vue, sans doute plus intressant, consiste dire que les grammaires plus complexes permettent de dcrire des lois plus gnrales que celles exprimables par des grammaires plus simples. Prenons un exemple en traitement des langues naturelles : en franais, le bon usage impose que le sujet dune phrase armative saccorde avec son verbe en nombre et personne. Cela signie, par exemple, que si le sujet est un pronom singulier la premire personne, le verbe sera galement la premire personne du singulier. Si lon appelle L lensemble des phrases respectant cette rgle, on a : la phrase lenfant mange est dans L la phrase lenfant manges nest pas dans L Une description de la syntaxe du franais par une grammaire syntagmatique qui voudrait exprimer cette rgle avec une grammaire rgulire est peut-tre possible, mais serait certainement trs 55

fastidieuse, et sans aucune vertu pour les linguistes, ou pour les enfants qui apprennent cette rgle. Pourquoi ? Parce quen franais, le sujet peut tre spar du verbe par un nombre arbitraire de mots, comme dans lenfant de Jean mange, lenfant du ls de Jean mange... Il faut donc implanter dans les rgles de la grammaire un dispositif de mmorisation du nombre et de la personne du sujet qui retienne ces valeurs jusqu ce que le verbe soit rencontr, cest--dire pendant un nombre arbitraire dtapes de drivation. La seule solution, avec une grammaire rgulire, consiste envisager lavance toutes les congurations possibles, et de les encoder dans la topologie de lautomate correspondant, puisque la mmorisation fournie par la grammaire est de taille 1 (le pass de la drivation est immdiatement oubli). On peut montrer quune telle contrainte sexprime simplement et sous une forme bien plus naturelle pour les linguistes, lorsque lon utilise une grammaire CF. La prix payer pour utiliser une grammaire plus ne est que le problme algorithmique de la reconnaissance dune phrase par une grammaire devient de plus en plus complexe. Vous savez dj que ce problme est solvable en temps linaire pour les langages rationnels (rguliers), et non-solvable (indcidable) pour les langages de type 0. On peut montrer (voir en particulier au chapitre 9 pour les langages CF et la chapitre 13 pour les langages CS )quil existe des automates gnralisant le modle dautomate ni pour les langages CF et CS, do se dduisent des algorithmes (polynomiaux pour les langages CF, exponentiels en gnral pour les langages CS) permettant de galement de dcider ces langages. En particulier, le problme de la reconnaissance pour les grammaires CF sera tudi en dtail dans les chapitre 6 et chapitre 7.

56

Chapitre 5

Langages et grammaires hors-contexte


Dans ce chapitre, nous nous intressons plus particulirement aux grammaires et aux langages hors-contexte. Rappelons que nous avons caractris ces grammaires la section 4.2.3 comme tant des grammaires syntagmatiques dont toutes les productions sont de la forme A u, avec A un non-terminal et u une squence quelconque de terminaux et non-terminaux. Autrement dit, une grammaire algbrique est une grammaire pour laquelle il est toujours possible de rcrire un non-terminal en cours de drivation, quel que soit le contexte (les symboles adjacents dans le proto-mot) dans lequel il apparat. Ce chapitre dbute par la prsentation, la section 5.1, de quelques grammaires CF exemplaires. Cette section nous permettra galement dintroduire les systmes de notation classiques pour ces grammaires. Nous dnissons ensuite la notion de drivation gauche et darbre de drivation, puis discutons le problme de lquivalence entre grammaires et de lambigut (section 5.2). La section 5.3 introduit enn un certain nombre de proprits lmentaires des langages CF, qui nous permettent de mieux cerner la richesse (et la complexit) de cette classe de langages. Ltude des grammaires CF, en particulier des algorithmes permettant de traiter le problme de la reconnaissance dun mot par une grammaire, sera poursuivie dans les chapitres suivants, en particulier au chapitre 6.

5.1
5.1.1

Quelques exemples
La grammaire des djeuners du dimanche

Un exemple de grammaire hors-contexte est prsent la Table 5.1, correspondant une illustration trs simplie de lutilisation de ces grammaires pour des applications de traitement du langage naturel. Cette grammaire engendre un certain nombre dnoncs du franais. Dans cette grammaire, les non-terminaux sont en majuscule, les terminaux sont des mots du vocabulaire usuel. On utilise galement dans cette grammaire le symbole | pour exprimer une alternative : A u | v vaut pour les deux rgles A u et A v. Premire remarque sur la grammaire de la Table 5.1 : elle contient de nombreuses rgles de type A a, qui servent simplement introduire les symboles terminaux de la grammaire : les symboles apparaissant en partie gauche de ces production sont appels pr-terminaux . En changeant le vocabulaire utilis dans ces productions, on pourrait facilement obtenir une grammaire permettant dengendrer des noncs dcrivant dautres aspects de la vie quotidienne. Il est important de raliser que, du point de vue de leur construction (de leur structure interne), les noncs ainsi 57

p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14

GN GV S GN DET N GN GN GNP GN NP GV V GV V GN GV V GNP GV V GN GNP GV V GNP GNP GNP PP GN ` PP de | a DET la | le DET sa | son DET un | une

p15 p16 p17 p18 p19 p20 p21 p22 p23 p24 p25 p26 p27 p28

V V V V V V NP NP N N N N ADJ ADJ

mange | sert donne boude | s ennuie parle coupe | avale discute | gronde Louis | Paul Marie | Sophie f ille | maman paternel | f ils | viande | soupe | salade dessert | f romage | pain petit | gentil petite | gentille

T. 5.1 La grammaire GD des repas dominicaux

obtenus resteraient identiques ceux de L(GD ). En utilisant la grammaire de la Table 5.1, on construit une premire drivation pour lnonc Louis boude, reprsente dans la Table 5.2 : S G D S G D G D G D G D GN GV NP GV Louis GV Louis V Louis boude (par p1 ) (par p4 ) (par p21 ) (par p5 ) (par p17 )

T. 5.2 Louis boude Il existe dautres drivations de Louis boude, consistant utiliser les productions dans un ordre dirent : par exemple p5 avant p4 , selon : S GD GN GV GD GN V GD GN boude GD NP boude GD Louis boude. Ceci illustre une premire proprit importante des grammaires hors contexte : lors dune drivation, il est possible dappliquer les productions dans un ordre arbitraire. Notons galement qu la place de Louis, on aurait pu utiliser Marie ou Paul, ou mme le f ils boude et obtenir un nouveau mot du langage : nouveau, cest la proprit dindpendance au contexte qui sexprime. Ces exemples clairent un peu la signication des noms de variables : GN dsigne les groupes nominaux, GV les groupes verbaux... La premire production de GD dit simplement quun nonc bien form est compos dun groupe nominal (qui, le plus souvent, est le sujet) et dun groupe verbal (le verbe principal) de la phrase. Cette grammaire permet galement dengendrer des noncs plus complexes, comme par exemple : le paternel sert le f romage qui utilise une autre production (p6 ) pour driver un groupe verbal (GV ) contenant un verbe et son complment dobjet direct.

58

La production p3 est particulire, puisquelle contient le mme symbole dans sa partie gauche et dans sa partie droite. On dit dune production possdant cette proprit quelle est rcursive . Pour tre plus prcis p3 est rcursive gauche : le non-terminal en partie gauche de la production gure galement en tte de la partie droite. Comme cest llment le plus gauche de la partie droite, on parle parfois de coin gauche de la production. Cette proprit de p3 implique immdiatement que le langage engendr par GD est inni, puisquon peut crer des noncs de longueur arbitraire par application itre de cette rgle, engendrant par exemple : le f ils de Paul mange le f ils de la f ille de Paul mange le f ils de la f ille de la f ille de Paul mange le f ils de la f ille de la f ille . . . de Paul mange Il nest pas immdiatement vident que cette proprit, savoir quune grammaire contenant une rgle rcursive engendre un langage inni, soit toujours vraie... Pensez, par exemple, ce qui se passerait si lon avait une production rcursive de type A A. En revanche, il est clair quune telle production risque de poser problme pour engendrer de manire systmatique les mots de la grammaire. Le problme est dviter de tomber dans des drivations interminables telles que : GN GD GN GNP GD GN GNP GNP GD GN GNP GNP GNP . . .. Dernire remarque concernant GD : cette grammaire engendre des noncs qui sont (du point de ` la f ille de Paul, qui peut exprimer soit une conversation vue du sens) ambigu. Ainsi Louis parle a entre Louis et la f ille de Paul, soit un change concernant Paul entre Louis et la f ille. En crivant les diverses drivations de ces deux noncs, vous pourrez constater que les deux sens correspondent deux drivations employant des productions direntes pour construire un groupe verbal : la premire utilise p7 , la seconde p9 .

5.1.2

Une grammaire pour le shell

Dans cette section, nous prsentons des fragments1 dune autre grammaire, celle qui dcrit la syntaxe des programmes pour linterprteur bash. Nous ferons, dans la suite, rfrence cette grammaire sous le nom de GB . Un mot tout dabord sur les notations : comme il est dusage pour les langages informatiques, cette grammaire est exprime en respectant les conventions initialement proposes par Backus et Naur pour dcrire le langage ALGOL 60. Ce systme de notation des grammaires est connu sous le nom de Backus-Naur Form ou en abrg BNF. Dans les rgles de la Table 5.3, les non-terminaux gurent entre crochets (<>) ; les terminaux sont les autres chanes de caractres, certains caractres spciaux apparaissant entre apostrophes ; les productions sont marques par loprateur ::= ; enn les productions alternatives ayant mme partie gauche sont spares par le symbole |, chaque alternative gurant ici sur une ligne distincte. Les lments de base de la syntaxe sont les mots et les chires, dnis dans la Table 5.3. Les deux premires dnitions sont des simples numrations de terminaux dnissant les lettres (<letter>), puis les chires (<digit>). Le troisime non-terminal, <number>, introduit une gure rcurrente dans les grammaires informatiques : celle de la liste, ici une liste de chires. Une telle construction ncessite deux productions : une production rcursive (ici rcursive gauche) spcie une liste comme une liste suivie dun
1 Ces fragments sont extraits de Learning the Bash Shell, de C. Newham et B. Rosenblatt, OReilly & associates, 1998, consultable en ligne ladresse http://safari.oreilly.com.

59

<letter> : := a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z| A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z <digit> : := 0|1|2|3|4|5|6|7|8|9 <number> : := <number> <digit> | <digit> <word> : := <word> <letter> | <word> _ | <letter> <word_list> : := <word_list> <word> | <word>

T. 5.3 Constructions lmentaires du bash nouvel lment la seconde alternative achve la rcursion, en dnissant la liste compose dun unique chire. Ce couple de rgles permet de driver des squences de longueur arbitraire, selon des drivations similaires celle de la Table 5.4. On reconnat dans la drivation de la Table 5.4 une drivation <number> GB <number> 0 GB <number> 10 GB <number> 510 3510 GB T. 5.4 Drivation du nombre 3510 rgulire : le fragment de GB rduit aux trois productions relatives aux nombres et daxiome <number> dnit une grammaire rgulire et pourrait tre reprsent sous la forme dun automate ni. Le mme principe est luvre pour dcrire les mots, <word>, par des listes de lettres ; ou encore les listes de mots (<word_list>). Une seconde gure remarquable et typique des langages de programmation apparat dans les productions de la Table 5.5
<group_command> : := { <list> }

<if_command> : := if <compound_list> then <compound_list> fi | if <compound_list> then <compound_list> else <compound_list> fi | if <compound_list> then <compound_list> <elif_clause> fi <elif_clause> : := elif <compound_list> then <compound_list> | elif <compound_list> then <compound_list> else <compound_list> | elif <compound_list> then <compound_list> <elif_clause>

T. 5.5 Constructions parenthses La dnition du non-terminal <group_command> fait apparatre deux caractres spciaux apparis { (ouvrant) et } (fermant) : dans la mesure o cette production est la seule qui introduit ces symboles, il est garanti qu chaque ouverture de { correspondra une fermeture de }, et ceci indpendamment du nombre et du degr dimbrication de ces symboles. Inversement, si cette condition nest pas satisfaite dans un programme, une erreur de syntaxe sera dtecte. 60

Le cas des constructions conditionnelles est similaire : trois constructions sont autorises, correspondant respectivement la construction sans alternative (simple if-then), construction alternative unique (if-then-else), ou construction avec alternatives multiples, (if-then-elif...). Dans tous les cas toutefois, chaque mot-cl if (ouvrant) doit sapparier avec une occurrence motcl fi (fermant), quel que soit le contenu dlimit par le non-terminal <compound_list>. Les constructions parenthses apparaissent, sous de multiples formes, dans tous les langages de programmation. Sous leur forme la plus pure, elles correspondent des langages de la forme an bn , qui sont des langages hors-contexte, mais pas rguliers (cf. la discussion de la section 4.2.4).

5.2

Drivations

Nous lavons vu, une premire caractristique des grammaires CF est la multiplicit des drivations possibles pour un mme mot. Pour neutraliser cette source de variabilit, nous allons poser une convention permettant dordonner lapplication des productions. Cette convention pose, nous introduisons une reprsentation graphique des drivations et dnissons les notions dambigut et dquivalence entre grammaires.

5.2.1

Drivation gauche

Dnition 5.1 (Drivation gauche). On appelle drivation gauche dune grammaire hors-contexte G une drivation dans laquelle chaque tape de drivation rcrit le non-terminal le plus gauche du proto-mot courant. En guise dillustration, considrons de nouveau la drivation de Louis boude prsente dans la Table 5.2 : chaque tape rcrivant le non-terminal le plus gauche, cette drivation est bien une drivation gauche. Un eort supplmentaire est toutefois requis pour rendre la notion de drivation gauche compltement opratoire. Imaginez, par exemple, que la grammaire contienne une rgle de type A A. Cette rgle engendre une innit de drivations gauches quivalentes pour toute drivation gauche contenant A : chaque occurrence de cette production peut tre rpte volont sans modier le mot engendr. Pour achever de spcier la notion de drivation gauche, on ne considrera dans la suite que des drivations gauches minimales, cest--dire qui sont telles que chaque tape de la drivation produit un proto-mot dirent de la prcdente. On notera A G u lorsque u drive de A par une drivation gauche. De manire duale, on dnit la notion de drivation droite : Dnition 5.2 (Drivation droite). On appelle drivation droite dune grammaire hors-contexte G une drivation dans laquelle chaque tape de la drivation rcrit le terminal le plus droite du proto-mot courant. Un premier rsultat est alors nonc dans le thorme suivant, qui nous assure quil est justi de ne sintresser quaux seules drivations gauches dune grammaire. Thorme 5.1. Soit G une grammaire CF daxiome S, et u dans : S G u si et seulement si S G u (idem pour S G u).
R L L

61

Preuve Un sens de limplication est immdiat : si un mot u se drive par une drivation gauche depuis S, alors u L(G). Rciproquement, soit u = u1 . . . un se drivant de S par une drivation non-gauche, soit B le premier non-terminal non-gauche rcrit dans la drivation de u (par B ) et soit A le non-terminal le plus gauche de ce proto-mot. La drivation de u scrit : S G u1 . . . ui Au j . . . uk B G u1 . . . ui Au j . . . uk G u La gnration de u implique qu une tape ultrieure de la drivation, le non-terminal A se rcrive (ventuellement en plusieurs tapes) en : ui+1 . . . u j1 . Soit alors A la premire production implique dans cette drivation : il apparat quen appliquant cette production juste avant B , on obtient une nouvelle drivation de u depuis S, dans laquelle A, qui est plus gauche que B, est rcrit avant lui. En itrant ce procd, on montre que toute drivation non-gauche de u peut se transformer de proche en proche en drivation gauche de u, prcisment ce quil fallait dmontrer. Attention : si lon peut driver par drivation gauche tous les mots dun langage, on ne peut pas en dire autant des proto-mots. Il peut exister des proto-mots qui ne sont pas accessibles par une drivation gauche : ce nest pas gnant, dans la mesure o ces proto-mots ne sont utiliss dans aucune drivation dun mot de la grammaire. En utilisant ce rsultat, il est possible de dnir une relation dquivalence sur lensemble des drivations de G : deux drivations sont quivalentes si elles se transforment en une mme drivation gauche. Il apparat alors que ce qui caractrise une drivation, ou plutt une classe de drivation, est partiellement2 indpendant de lordre dapplication des productions, et peut donc simplement tre rsum par lensemble3 des productions utilises. Cet ensemble partiellement ordonn admet une expression mathmatique (et visuelle) : larbre de drivation.

5.2.2

Arbre de drivation

Dnition 5.3 (Arbre de drivation). Un arbre A est un arbre de drivation dans G si et seulement si : tous les nuds de A sont tiquets par un symbole de V la racine est tiquete par S si un nud n nest pas une feuille et porte ltiquette X, alors X V si n1 , n2 ...nk sont les ls de n dans A, dtiquettes respectives X1 ...Xk , alors X X1 ...Xk est une production de G. Notons que cette dnition nimpose pas que toutes les feuilles de larbre soient tiquetes par des terminaux : un arbre peut trs bien dcrire une proto-mot en cours de drivation. Pour passer de larbre de drivation la drivation proprement dite, il sut de parcourir larbre de drivation en lisant les productions appliques. La drivation gauche sobtient en eectuant un parcours prxe de larbre, cest--dire en visitant dabord un nud pre, puis tous ses ls de gauche droite. Dautres parcours fourniront dautres drivations quivalentes. Un arbre de drivation (on parle aussi darbre danalyse dun mot) correspondant la production de lnonc Paul mange son f romage dans la grammaire des dimanches est reprsent la Figure 5.1. Les numros des nuds sont ports en indice des tiquettes correspondantes ; la numrotation adopte correspond un parcours prxe de larbre. Sur cette gure, on voit en particulier quil existe deux nuds tiquets GN, portant les indices 2 et 8.
Partiellement seulement : pour quun non-terminal A soit driv, il faut quil est t pralablement produit par une production qui le contient dans sa partie droite. 3 Pas un ensemble au sens traditionnel : le nombre dapplications de chaque production importe.
2

62

S1

GN2

GV5

NP3

V6

GN8

Paul 4

mange7

DET9

N11

son 10

fromage 12

F. 5.1 Larbre de drivation de Paul mange son f romage Larbre de drivation reprsente graphiquement la structure associe un mot du langage, de laquelle se dduira linterprtation lui donner. On appelle parsage (en anglais parsing ) dun mot dans la grammaire le processus de construction du ou des arbres de drivation pour ce mot, lorsquils existent. Linterprtation correspond la signication dun nonc pour la grammaire des dimanches, la valeur du calcul dnot par une expression arithmtique pour une grammaire de calculs, ou encore la squence dinstructions lmentaires eectuer dans le cadre dune grammaire reprsentant un langage informatique. On appelle smantique dun mot le rsultat de son interprtation, et par extension la smantique le domaine (formel) traitant les problmes dinterprtation. Smantique soppose ainsi syntaxique aussi bien lorsque lon parle de langage informatique ou de langage humain. On notera que dans les deux cas, il existe des phrases syntaxiques qui nont pas de sens, comme 0 = 1, ou encore le dessert s ennuie Marie. Notons que la structure associe un mot nest pas ncessairement unique, comme le montre lexemple suivant. Soit GE une grammaire daxiome Sum dnissant des expressions arithmtiques simples en utilisant les productions de la Table 5.6. Sum Sum + Sum | Number NumberNumber Digit | Digit Digit 0 | 1 | 2 . . . | 9 T. 5.6 Une grammaire pour les sommes Pour cette grammaire, lexpression 3 + 5 + 1 correspond deux arbres danalyse, reprsents la Figure 5.2. En remplaant loprateur +, qui est associatif, par , qui ne lest pas, on obtiendrait non seulement deux analyses syntaxiques direntes du mot, mais galement deux interprtations (rsultats) dirents : 3 dans un cas, 1 dans lautre. Ceci est fcheux.

63

Sum
rrr rr rr

Sum
rr rr r rr

Sum Number Digit 3

Sum

Sum

Sum + Number Digit 1

r r

rr

Number Digit 5

Number Digit 1

Number Digit 3

Number Digit 5

r r rr

F. 5.2 Deux arbres de drivation dun mme calcul

5.2.3

Ambigut

Dnition 5.4 (Ambigut). Une grammaire est ambigu sil existe un mot admettant plusieurs drivations gauches direntes dans la grammaire. De manire quivalente, une grammaire est ambigu sil existe un mot qui admet plusieurs arbres de drivation. La grammaire de la Table 5.7 est un exemple de grammaire ambigu. S ASB | AB A aA | a B bB | b T. 5.7 Une grammaire ambigu Dans la grammaire de la Table 5.7, le mot aabb admet ainsi plusieurs analyses, selon que lon utilise ou pas la premire production de S. Cette grammaire engendrant un langage rgulier (lequel ?), il est toutefois lmentaire, en utilisant le procd de transformation dun automate en grammaire rgulire, de construire une grammaire non-ambigu qui reconnat ce langage. Lambigut est donc une proprit des grammaires. Cette proprit contamine pourtant parfois mme les langages : Dnition 5.5 (Ambigut (dun langage)). Un langage hors-contexte est (intrinsquement) ambigu si toutes les grammaires qui lengendrent sont ambigus. Un langage intrinsquement ambigu ne peut donc tre dcrit par une grammaire non-ambigu. Un exemple fameux est L = L1 L2 = {an bn cm } {am bn cn }, soit {an bm cp , avec m = n ou m = p}. Dcrire L1 demande dintroduire une rcursion centrale, pour apparier les a et les b ; L2 demande galement une rgle exhibant une telle rcursion, pour apparier les b et les c. On peut montrer que pour toute grammaire hors-contexte engendrant ce langage, tout mot de la forme an bn cn aura une double interprtation, selon que lon utilise le mcanisme dappariement (de comptage) des a et des b ou celui qui contrle lappariement des b et des c. 64

Fort heureusement, les langages (informatiques) intrinsquement ambigus ne courent pas les rues : lorsque lon conoit un nouveau langage informatique, il sut de se prmunir contre les ambiguts qui peuvent conduire des conits dinterprtation. Ainsi, les grammaires formelles utilises pour les langages de programmation sont-elles explicitement conues pour limiter lambigut danalyse. En revanche, lorsquon sintresse au langage naturel, lambigut lexicale (un mot ayant plusieurs catgories ou plusieurs sens) et syntaxique (un nonc avec plusieurs interprtations) sont des phnomnes massifs et incontournables, quil faut donc savoir aronter avec les outils adquats. Des techniques de parsage adaptes la gestion et la reprsentation compacte des ambiguts seront prsentes dans le chapitre consacr la tabulation 12

5.2.4

quivalence

travers la notion de drivation gauche et darbre de drivation, nous sommes en mesure de prciser les direntes notions dquivalence pouvant exister entre grammaires. Dnition 5.6 (quivalence). Deux grammaires G1 et G2 sont quivalentes si et seulement si elles engendrent le mme langage. Si, de plus, pour tout mot du langage, les arbres de drivation dans G1 et dans G2 sont identiques, on dit que G1 et G2 sont fortement quivalentes . Dans le cas contraire, on dit que G1 et G2 sont faiblement quivalentes . Ces notions sont importantes puisque, on la vu, cest larbre de drivation qui permet dinterprter le sens dun nonc : transformer une grammaire G1 en une autre grammaire G2 qui reconnat le mme langage est utile, mais il est encore plus utile de pouvoir le faire sans avoir changer les interprtations. A dfaut, il faudra se rsoudre utiliser des mcanismes permettant de reconstruire les arbres de drivation de la grammaire initiale partir de ceux de la grammaire transforme.

5.3
5.3.1

Les langages hors-contexte


Le lemme de pompage

Bien que se prtant de multiples applications pratiques, les grammaires algbriques sont intrinsquement limites dans la structure des mots quelles engendrent. Pour mieux apprhender la nature de cette limitation, nous allons introduire quelques notions nouvelles. Si a est un symbole terminal dun arbre de drivation dune grammaire G, on appelle ligne de a la squence de rgles utilise pour produire a partir de S. Chaque lment de la ligne est une paire (P, i), o P est une production, et i lindice dans la partie droite de P de lanctre de a. Considrant de nouveau la grammaire pour le langage an bn (prsente page 46) et une drivation de aaabbb dans cette grammaire, la ligne du second a de aaabbb correspond la squence (S aSb, 2), (S aSb, 1). On dit alors quun symbole est original si tous les couples (P, i) qui constituent sa ligne sont dirents. Contrairement au premier et au second a de aaabbb, le troisime a nest pas original, puisque sa ligne est (S aSb, 2), (S aSb, 2), (S ab, 1). Par extension, un mot est dit original si tous les symboles qui le composent sont originaux. Le rsultat intressant est alors quune grammaire algbrique, mme lorsquelle engendre un nombre inni de mots, ne peut produire quun nombre ni de mots originaux. En eet, puisquil ny a quun nombre ni de productions, chacune contenant un nombre ni de symboles dans sa 65

partie droite, chaque symbole terminal ne peut avoir quun nombre ni de lignes direntes. Les symboles tant en nombre ni, il existe donc une longueur maximale pour un mot original et donc un nombre ni de mots originaux. quoi ressemblent alors les mots non-originaux ? Soit s un tel mot, il contient ncessairement un symbole a, qui, tant non-original, contient deux fois le mme anctre (A, i). La drivation complte de s pourra donc scrire : S G uAy G uvAxy G uvwxy o u, v, w, x, y sont des squences de terminaux, la squence w contenant le symbole a. Il est alors facile de dduire de nouveaux mots engendrs par la grammaire, en remplaant w (qui est une drivation possible de A) par vwx qui est une autre drivation possible de A. Ce processus peut mme tre itr, permettant de construire un nombre inni de nouveaux mots, tous non-originaux, et qui sont de la forme : uvn wxn z. Ces considrations nous amnent un thorme caractrisant de manire prcise cette limitation des langages algbriques. Thorme 5.2 (Lemme de pompage pour les CFL). Si L est un langage CF, alors il existe un entier k tel que tout mot de L de longueur suprieure k se dcompose en cinq facteurs u,v,w,x,y, avec vx , vwx < k et tels que pour tout n, uvn wxn y est galement dans L. Une partie de la dmonstration de ce rsultat dcoule des observations prcdentes. En eet, si L est vide ou ni, on peut prendre pour k un majorant de la longueur dun mot de L. Comme aucun mot de L nest plus long que k, il est vrai que tout mot de L plus long que k satisfait le lemme prcdent. Supposons que L est eectivement inni, alors il existe ncessairement un mot z dans L(G) plus long que le plus long mot original. Ce mot tant non-original, la dcomposition prcdente en cinq facteurs, dont deux sont simultanment itrables, sapplique immdiatement. Les deux conditions supplmentaires drivent pour lune (vx ) de la possibilit de choisir G tel quaucun terminal autre que S ne drive (voir chapitre 8) : en considrant une drivation minimale, on sassure ainsi quau moins un terminal est produit durant la drivation A vAx. La seconde condition, (vwx < k), drive de la possibilit de choisir pour vwx un facteur original et donc de taille strictement infrieure n. Ce rsultat est utile pour prouver quun langage nest pas hors-contexte. Montrons, titre dillustration, que {an bn cn , n 1} nest pas hors-contexte. Supposons quil le soit et considrons un mot z susamment long de de ce langage. Dcomposons z en uvwxy, et notons zn = uvn wxn y. v et x ne peuvent chacun contenir quun seul des trois symboles de lalphabet, sans quoi leur rptition aboutirait des mots ne respectant pas le squencement impos : tous les a avant tous les b avant tous les c. Pourtant, en faisant crotre n, on augmente simultanment, dans tn , le nombre de a, de b et de c dans des proportions identiques : ceci nest pas possible puisque seuls deux des trois symboles sont concerns par lexponentiation de v et x. Cette contradiction prouve que ce langage nest pas hors-contexte.

5.3.2

Oprations sur les langages hors-contexte

Dans cette section, nous tudions les proprits de clture pour les langages hors-contexte, dune manire similaire celle conduite pour les reconnaissables la section 3.2.1. Une premire srie de rsultat est tablie par le thorme suivant : Thorme 5.3 (Clture). Les langages hors-contextes sont clos pour les oprations rationnelles. Pour les trois oprations, une construction simple permet dtablir ce rsultat. Si, en eet, G1 et G2 sont dnies par : G1 = (V1 , 1 , S1 , P1 ) et G2 = (V2 , 2 , S2 , P2 ), on vrie simplement que : 66

G = (V1 V2 {S}, 1 2 , S, P1 P2 {S S1 , S S2 }) engendre exactement L1 L2 . G = (V1 V2 {S}, 1 2 , S, P1 P2 {S S1 S2 }) engendre exactement L1 L2 . G = (V1 {S}, 1 , S, P1 {S SS1 , S }) engendre exactement L1 . En revanche, contrairement aux langages rationnels/reconnaissables, les langages algbriques ne sont pas clos pour lintersection. Soient en eet L1 = {an bn cm } et L2 = {am bn cn } : ce sont clairement deux langages hors-contexte dont nous avons montr plus haut que leur intersection, L = L1 L2 = {an bn cn }, nest pas un langage hors contexte. Un corollaire (dduit par application directe de la loi de Morgan4 ) est que les langages hors-contexte ne sont pas clos par complmentation. Pour conclure cette section, ajoutons un rsultat que nous ne dmontrons pas ici (mais la section 9.3) Thorme 5.4. Lintersection dun langage rgulier et dun langage hors-contexte est un langage horscontexte.

5.3.3

Problmes dcidables et indcidables

Dans cette section, nous prsentons sommairement les principaux rsultats de dcidabilit concernant les grammaires et langages hors-contexte. Cette panoplie de nouveaux rsultats vient enrichir le seul dont nous disposons pour linstant, savoir que les langages hors-contexte sont rcursifs et quen consquence, il existe des algorithmes permettant de dcider si un mot u de est, ou non, engendr par une grammaire G. Nous aurons loccasion de revenir longuement sur ces algorithmes, notamment au chapitre 6. Nous commenons par un rsultat positif, qui snonce comme : Thorme 5.5. Il existe un algorithme permettant de dterminer si une grammaire hors-contexte engendre un langage vide. La preuve exploite en fait un argument analogue celui utilis dans notre dmonstration du lemme de pompage (section 5.3.1) : on considre un arbre de drivation hypothtique quelconque de la grammaire, engendrant w. Supposons quun chemin contienne plusieurs fois le mme nonterminal A (aux nuds n1 et n2 , le premier dominant le second). n1 domine le facteur w1 , n2 domine w2 ; on peut remplacer dans w la partie correspondant w1 par celle correspondant w2 . Donc, sil existe un mot dans le langage engendr, il en existera galement un qui soit tel que le mme non-terminal napparat jamais deux fois dans un chemin. Dans la mesure o les non-terminaux sont en nombre ni, il existe un nombre ni de tels arbres. Il sut alors de les numrer et de vrier sil en existe un dont la frontire ne contient que des terminaux : si la rponse est oui, alors L(G) est non-vide, sinon, L(G) est vide. Thorme 5.6. Il existe un algorithme permettant de dterminer si une grammaire hors-contexte engendre un langage inni. Lide de la dmonstration repose sur lobservation suivante : aprs limination des productions inutiles, des productions epsilon et des cycles (voir la section 8.1), il est possible dnumrer tous les arbres de profondeur borne : si on ne trouve jamais deux fois le mme non terminal sur une branche, le langage est ni ; sinon il est inni. Ces rsultats sont les seuls rsultats positifs pour les grammaires CF, puisquil est possible de prouver les rsultats ngatifs suivants :
4

Rappelons : L1 L2 = L1 L2 .

67

il nexiste pas dalgorithme pour dcider si deux grammaires sont quivalentes (rappelons : la preuve du rsultat (positif) obtenu pour les langages rationnels utilisait la clture par intersection de ces langages) ; il nexiste pas dalgorithme pour dcider si le langage engendr par une grammaire CF G1 est inclus dans le langage engendr une grammaire CF G2 ; il nexiste pas dalgorithme pour dcider si une grammaire CF engendre en fait un langage rgulier ; il nexiste pas dalgorithme pour dcider si une grammaire est ambigu. Les preuves de ces assertions, ainsi que des rsultats complmentaires concernant lindcidabilit de problmes algorithmiques pour les grammaires et langages CF sont prsents au chapitre 11. Munis de ces rsultats, nous pouvons maintenant aborder le problme de la reconnaissance des mots engendrs par une grammaire CF, qui fait lobjet des chapitres suivants.

68

Chapitre 6

Introduction au parsage de grammaires hors-contexte


Dans ce chapitre, nous prsentons les principales dicults algorithmiques que pose lanalyse de grammaires hors-contexte. Il existe, en fait, trois tches distinctes que lon souhaiterait eectuer laide dune grammaire : la reconnaissance, qui correspond au calcul de lappartenance dun mot un langage ; lanalyse (ou le parsage), qui correspond au calcul de tous les arbres danalyse possibles pour un nonc ; la gnration, qui correspond la production de tous les mots du langage dcrit par une grammaire. Dans la suite de ce chapitre, nous ne nous intresserons quaux deux premires de ces tches. Les langages hors-contextes tant une sous classes des langages rcursifs, nous savons quil existe des algorithmes permettant daccomplir la tche de reconnaissance. En fait, il en existe de multiples, qui, essentiellement se ramnent tous deux grands types : les analyseurs ascendants et les analyseurs descendants. Comme expliqu dans la suite, toute la dicult pour les analyseurs consiste aronter le non-dterminisme inhrent aux langages hors-contexte de manire : viter de perdre son temps dans des impasses ; viter de refaire deux fois les mmes calculs. Ce chapitre est organis comme suit : dans la section 6.1, nous prsentons lespace de recherche du parsage ; nous prsentons ensuite dans les sections 6.2 et 6.3 les stratgies ascendantes et descendantes, ainsi que les problmes que pose la mise en uvre de telles stratgies. Cette tude des analyseurs se poursuit au chapitre 7, o nous prsentons des analyseurs dterministes, utilisables pour certains types de grammaires ; ainsi quau chapitre 8, o nous tudions des techniques de normalisation des grammaires, visant simplier lanalyse, o se prmunir contre des congurations indsirables. Lapprofondissement de ces techniques fait galement lobjet des chapitres9, consacr plus particulirement au parsage des grammaires de langages informatiques et au chapitre 12, consacr lanalyse de langages naturels. Une rfrence extrmement riche et complte pour aborder les questions de parsage est (Grune and Jacob, 1990).

6.1

Graphe de recherche

Un point de vue gnral sur la question de la reconnaissance est donn par la considration suivante. G dnit une relation binaire sur les squences de (V ) ; comme toute relation binaire, cette relation se reprsente par un graphe dont les sommets sont les squences de (V ) 69

et dans lequel un arc de vers indique que G . On appelle ce graphe le graphe de la grammaire G. Ce graphe est bien sr inni ds lors que L(G) est inni ; il est en revanche localement ni, signiant que tout sommet a un nombre ni de voisins. La question laquelle un algorithme de reconnaissance doit rpondre est alors la suivante : existet-il dans ce graphe un chemin du noeud S vers le nud u ? Un premier indice : sil en existe un, il en existe ncessairement plusieurs, correspondant plusieurs drivations direntes rductibles une mme drivation gauche. Il nest donc pas ncessaire dexplorer tout le graphe. Pour rpondre plus compltement cette question, il existe deux grandes manires de procder : construire et explorer de proche en proche les voisins de S en esprant rencontrer u : ce sont les approches dites descendantes ; ou bien inversement construire et explorer les voisins1 de u, en essayant de remonter vers S : on appelle ces approches ascendantes. Dans les deux cas, si lon prend soin, au cours de lexploration, de se rappeler des direntes tapes du chemin, on sera alors mme de reconstruire un arbre de drivation de u. Ces deux approches, ascendantes et descendantes, sont explicites dans les sections qui suivent, dans lesquelles on essayera galement de suggrer que ce problme admet une implantation algorithmique polynomiale : dans tous les cas, cest--dire que la reconnaissance de u demande un nombre dtapes born par k | u | p . Le second problme intressant est celui de lanalyse, cest--dire de la construction de tous les arbres de drivations de u dans G. Pour le rsoudre, il importe non seulement de dterminer non pas un chemin, mais tous les chemins2 et les arbres de drivation correspondants. Nous le verrons, cette recherche exhaustive peut demander, dans les cas o la grammaire est ambigu, un temps de traitement exponentiel par rapport la longueur de u. En eet, dans une grammaire ambigu, il peut exister un nombre exponentiel darbres de drivation, dont lnumration demandera ncessairement un temps de traitement exponentiel.

6.2

Reconnaissance ascendante

Supposons qutant donne la grammaire des repas dominicaux (cf. la page 58), nous soyons confronts lnonc : le ls mange sa soupe. Comment faire alors pour : vrier que ce mot appartient au langage engendr par la grammaire ? lui assigner, dans le cas o la rponse est positive, une (ou plusieurs) structure(s) arbore(s) ? Une premire ide dexploration nous est donne par lalgorithme suivant, qui, partant des terminaux du mot dentre, va chercher inverser les rgles de production pour parvenir rcrire le symbole initial de la grammaire : chaque tape de lalgorithme vise rduire la taille du proto-mot courant, en substituant la partie droite dune production par sa partie gauche. Dans lalgorithme prsent ci-dessous, cette rduction se fait par la gauche : on cherche rcrire le proto-mot courant en commenant par les symboles qui se trouvent le plus gauche : chaque tape, il sagit donc didentier, en commenant par la gauche, une partie droite de rgle. Lorsquune telle partie droite est trouve, on la remplace par la partie gauche correspondante et on continue. Si on ne peut trouver une telle partie droite, il faut remettre en cause une rgle prcdemment applique (par retour en arrire) et reprendre la recherche en explorant un autre chemin. Cette recherche sarrte lorsque le proto-mot courante ne contient plus, comme unique symbole, que laxiome S. Une trace de lexcution de cet algorithme est donne ci-dessous, aprs que le proto-mot courant a t initialis avec le f ils mange sa soupe :
1 2

En renversant lorientation des arcs. En fait, seulement ceux qui correspondent une drivation gauche.

70

1. on remplace le par la partie gauche de la rgle le DET. = DET ls mange sa soupe. 2. on essaie de remplacer DET en le trouvant comme partie droite. chec. Idem pour DET ls, DET ls mange... 3. on rcrit ls : N. =DET N mange sa soupe. 4. on essaie de remplacer DET en le trouvant comme partie droite. chec. 5. on rcrit DET N : GN. =GN mange sa soupe. 6. on essaie de remplacer GN en le trouvant comme partie droite. chec. Idem pour GN mange, GN mange sa... 7. on rcrit mange : V. =GN V sa soupe. 8. on essaie de remplacer GN en le trouvant comme partie droite. chec. Idem pour GN V, GN V sa... 9. on rcrit V : GV. =GN GV sa soupe. 10. on essaie de remplacer GN en le trouvant comme partie droite. chec. 11. on rcrit GN GV : S. =S sa soupe. 12. on essaie de remplacer S en le trouvant comme partie droite. chec. Idem pour S sa, S sa soupe. 13. on rcrit sa : DET. Rsultat : S DET soupe. 14. on essaie de remplacer S en le trouvant comme partie droite. chec. Idem pour S DET, S DET soupe. 15. on essaie de remplacer DET en le trouvant comme partie droite. chec. Idem pour DET soupe. 16. on remplace soupe par N. =S DET N. 17. on essaie de remplacer S en le trouvant comme partie droite. chec. Idem pour S DET, S DET GN. 18. on essaie de remplacer DET en le trouvant comme partie droite. chec. 19. on remplace DET N par GN. =S GN. 20. on essaie de remplacer S en le trouvant comme partie droite. chec. 21. on essaie de remplacer S GN en le trouvant comme partie droite. chec. On est bloqu : on fait un retour arrire jusquen [11]. = GN GV sa soupe. ... on va dabord parcourir entirement le choix aprs GN jusqu GN GV GN. Nouvelle impasse. Donc on revient en arrire en [8]. Et on recommence... ... tt ou tard, on devrait nalement parvenir une bonne solution. Cette stratgie est mise en uvre par lalgorithme 2. La procdure dtaille dans lalgorithme 2 correspond la mise en uvre dune stratgie ascendante (en anglais bottom-up), signiant que lon cherche construire larbre de drivation depuis le bas (les feuilles) vers le haut (la racine ( !) de larbre), donc depuis les symboles de vers S. La stratgie mise en uvre par lalgorithme 2 consiste explorer le graphe de la grammaire en profondeur dabord. Chaque branche est explore de manire successive ; chaque chec (lorsque toutes les parties droites possibles ont t successivement envisages), les choix prcdents sont remis en cause et des chemins alternatifs sont visits. Seules quelques branches de cet arbre mneront nalement une solution. Notez quil est possible damliorer un peu burlp pour ne considrer que des drivations droites. Comment faudrait-il modier cette fonction pour oprer une telle optimisation ? Comme en tmoigne laspect un peu rptitif de la simulation prcdente, cette stratgie conduit rpter de nombreuses fois les mmes tests, et reconstruire en de multiples occasions les mmes constituants (voir la Figure 6.1). Lactivit principale de ce type dalgorithme consiste chercher, dans le proto-mot courant, une squence pouvant correspondre la partie droite dune rgle. Lalternative que cette stratgie danalyse conduit valuer consiste choisir entre remplacer une partie droite identie par le non-terminal correspondant (tape de rduction, en anglais reduce ), ou bien direr la rduction et

71

Algorithm 2 Parsage ascendant en profondeur dabord // la fonction principale est bulrp : bottom-up left-right parsing // contient le proto-mot courant bulrp () begin if ( = S) then return (true) for i := 1 to | | do for j := i to | | do if (A i . . . j ) then if (bulrp (1 . . . i1 A j+1 . . . n ) = true) then return (true) od od return (false) end
ma soeur mange sa soupe

DET soeur mange sa soupe

ma N soeur sa soupe

ma soeur V sa soupe

ma soeur mange DET soupe

DET N mange sa soupe

ma N V sa soupe

ma N mange DET soupe

ma N mange sa N

DET N mange DET soupe

F. 6.1 Recherche ascendante

essayer dtendre la partie droite en considrant des symboles supplmentaires (tape dextension, on dit aussi dcalage, en anglais shift ). Ainsi les tapes de rduction 9 et 11 dans lexemple prcdent conduisent-elles une impasse, amenant les remplacer par des tapes dextension, qui vont permettre dans notre cas de construire lobjet direct du verbe avant dentreprendre les bonnes rductions. Comme on peut le voir dans cet exemple, lecacit de lapproche repose sur la capacit de lanalyseur prendre les bonnes dcisions (shift ou reduce ) au bon moment. cet eet, il est possible de pr-calculer un certain nombre de tables auxiliaires, qui permettront de mmoriser le fait que par exemple, mange attend un complment, et que donc il ne faut pas rduire V avant davoir trouv ce complment. Cette intuition sera formalise dans le chapitre suivant, la section 7.2. La stratgie nave conduit une analyse exponentielle en fonction de la longueur de lentre. Fort heureusement, il existe des techniques prouves, consistant stocker les rsultats intermdiaires dans des tableaux, qui permettent daboutir une complexit polynomiale. Ces techniques sont en particulier prsentes dans le chapitre 12.

72

Notez, pour conclure, que dans notre exemple, la stratgie mise en uvre termine, ce qui ne serait pas le cas si notre grammaire tait moins propre. Lanalyse ascendante est prise en dfaut par des rgles du type X X, ou par des cycles de production de type X Y, Y X, qui conduisent eectuer (indniment !) des sries de rductions striles, cest--dire des rductions qui laissent inchange la longueur du proto-mot courant. Des problmes srieux se posent galement avec les productions , qui sont susceptibles de sappliquer toutes les tapes de lalgorithme. La grammaire des dimanches nen comporte pas, mais de telles rgles ne sont pas rares dans les grammaires relles. Avant de montrer quil est, en thorie, possible de se prmunir contre de telles horreurs (voir la section 8.1), il est important de noter que cette stratgie saccompagne de multiples variantes, consistant par exemple eectuer lexploration en largeur dabord, ou de droite gauche, ou simultanment dans les deux sens... Donnons lintuition de ce que donnerait une exploration en largeur dabord : dune manire gnrale, ce type de recherche correspond la poursuite en parallle dun ensemble de chemins possibles. Lalgorithme est initialis avec un seul proto-mot, qui est lnonc analyser. chaque tape, un nouvel ensemble de proto-mots est considr, auxquels sont appliques toutes les rductions possibles, donnant lieu un nouvel ensemble de proto-mots. Si cet ensemble contient S, on arrte ; sinon la procdure est rpte. En guise dapplication, crivez sur le modle de lalgorithme prcdent une procdure mettant en application cette ide.

6.3

Reconnaissance descendante

Une seconde stratgie de recherche consiste procder de manire descendante, cest--dire partir de laxiome de la grammaire pour tenter dengendrer lnonc analyser. Les impasses de cette recherche sont dtectes en confrontant des prxes terminaux du proto-mot courant avec les terminaux de lnonc analyser. Comme prcdemment, dans une recherche en profondeur dabord, les situations dchecs conduisent remettre en cause les choix prcdemment eectus ; une recherche en largeur dabord conduit dvelopper simultanment plusieurs proto-mots. La recherche sarrte lorsque le proto-mot driv depuis S est identique la squence quil fallait analyser. Simulons, par exemple, le fonctionnement dun analyseur en profondeur dabord : 1. S 2. GN GV 3. DET N GV 4. la N GV. chec : lentre commence par le, pas par la. On revient DET N GV 5. le N GV. 6. le lle GV. Nouvel chec =le N GV ... 7. le ls GV. ... le ls V. ... le ls boude. chec =le ls V ... le ls sennuie. chec =le ls V ... le ls mange. Il reste des terminaux non-analyss dans lentre, mais le proto-mot ne contient plus de non-terminaux. chec et retour en [7.] ... Algorithmiquement, cette stratgie danalyse correspond une boucle dans laquelle lanalyseur examine le non-terminal le plus gauche du proto-mot courant et essaie de le driver tout en 73

restant compatible avec lnonc dentre. Cet analyseur construit donc des drivations gauches. Son activit alterne des tapes de prdiction (en anglais prediction) dun symbole terminal ou nonterminal et des tapes dappariement (en anglais matching) des terminaux prdits avec les mots de lentre. Pour cette raison, le parsage descendant est souvent quali de prdictif. Le pseudo-code dun tel analyseur est donn dans lalgorithme 3. Algorithm 3 Parsage descendant en profondeur dabord // la fonction principale est tdlrp : top-down left-right parsing // est le proto-mot courant, u lentre reconnatre tdlrp (, u) begin if ( = u) then return (true) = u1 . . . uk A while (A ) do ( = uk+1 ...uk+l ) avec = ou = A . . . if (tdlrp (u1 . . . uk+l ) = true) then return (true) od return (false) end Une implantation classique de cette stratgie reprsente sous la forme dune pile de laquelle est exclu le prxe terminal u1 . . . uk : chaque tape il sagit de dpiler le non-terminal A en tte de la pile, et dempiler la place un suxe de la partie droite correspondante (), aprs avoir vri que l(ventuel) prxe terminal de (uuk+1 . . . uk + l) tait eectivement compatible avec la partie non-encore analyse de u. Pour que cette stratgie soit ecace, il est possible de pr-calculer dans des tables lensemble des terminaux qui peuvent dbuter lexpansion dun non-terminal. En eet, considrons de nouveau la grammaire dominicale de la Table 5.1 : cette grammaire possde galement les productions suivantes, GN NP, NP Louis, NP Paul, correspondant des noms propres. ltape 2 du parcours prcdent, lalgorithme pourrait tre (inutilement) conduit prdire un constituant de catgorie NP, alors mme quaucun nom propre ne peut dbuter par le, qui est le premier terminal de lnonc analyser. Cette intuition est formalise dans les analyseurs LL, qui sont prsents dans la section 7.1. Dans loptique dune stratgie de reconnaissance descendante, notre grammaire possde un vice de forme manifeste, savoir la production GN GN GNP, qui est rcursive gauche : lorsque cette production est considre, elle insre en tte du proto-mot courant un nouveau symbole GN, qui son tour peut tre remplac par un nouveau GN, conduisant un accroissement indni de . Dans le cas prsent, la rcursivit gauche est relativement simple liminer. Il existe des congurations plus complexes, dans lesquelles cette rcursivit gauche rsulte non-pas dune rgle unique mais dune squence de rgles, comme dans : S A , A S . On trouvera au chapitre 8 une prsentation des algorithmes permettant dliminer ce type de rcursion. Notons, pour nir, que nous avons esquiss ci-dessus les principales tapes dune stratgie descendante en profondeur dabord. Il est tout aussi possible denvisager une stratgie en largeur dabord, consistant conduire de front lexamen de plusieurs proto-mots. Lcriture dun algorithme mettant en uvre cette stratgie est laisse en exercice.

74

6.4

Conclusion provisoire

Nous avons, dans ce chapitre, dni les premires notions ncessaires ltude des algorithmes danalyse pour les grammaires algbriques. Les points de vue sur ces algorithmes dirent trs sensiblement suivant les domaines dapplication : dans le cas des langages informatiques, les mots (des programmes, des document structurs) sont longs, voire trs longs ; lambigut est proscrire, pouvant conduire des conits dinterprtation. Les algorithmes de vrication syntaxique doivent donc avoir une faible complexit (idalement une complexit linaire en fonction de la taille de lentre) ; il sut par ailleurs en gnral de produire une analyse et une seule. Les algorithmes qui rpondent ce cahier des charges sont prsents au chapitre 7. dans le cas des langues naturelles, lambigut est une des donnes du problme, quil faut savoir contrler. Les mots tant courts, une complexit suprieure (polynomiale, de faible degr) pour lanalyse est supportable. On peut montrer qu laide de techniques de programmation dynamique, consistant sauvegarder dans des tables les fragments danalyse raliss, il est possible de parvenir une complexit en O(n3 ) pour construire dun seul coup tous les arbres danalyse. Leur numration exhaustive conserve une complexit exponentielle. Ces algorithmes seront prsents dans le chapitre consacr au parsage tabulaire 12 Quel que soit le contexte, les algorithmes de parsage bncient toujours dune tape de prtraitement et de normalisation de la grammaire, visant en particulier viter les congurations problmatiques (cycles et productions epsilon pour les analyseurs ascendants ; rcursions gauches pour les analyseurs descendants). Ces pr-traitement sont prsents dans le chapitre 8.

75

Chapitre 7

Introduction aux analyseurs dterministes


Dans ce chapitre, nous prsentons deux stratgies danalyse pour les grammaires hors-contexte, qui toutes les deux visent produire des analyseurs dterministes. Comme prsent au chapitre 6, le parsage peut tre vu comme lexploration dun graphe de recherche. Lexploration est rendue coteuse par lexistence de ramications dans le graphe, correspondant des chemins alternatifs : ceci se produit, pour les analyseurs descendants, lorsque le terminal le plus gauche du protomot courant se rcrit de plusieurs manires direntes (voir la section 6.1). De telles alternatives ncessitent de mettre en uvre des stratgies de retour arrire (recherche en profondeur dabord) ou de pouvoir explorer plusieurs chemins en parallle (recherche en largeur dabord). Les stratgies danalyse prsentes dans ce chapitre visent viter au maximum les circonstances dans lesquelles lanalyseur explore inutilement une branche de larbre de recherche (en profondeur dabord) ou dans lesquelles il conserve inutilement une analyse dans la liste des analyses alternatives (en largeur dabord). cet eet, ces stratgies mettent en uvre des techniques de pr-traitement de la grammaire, cherchant identier par avance les productions qui conduiront des chemins alternatifs ; ainsi que des contrles permettant de choisir sans hsiter la bonne ramication. Lorsque de tels contrles existent, il devient possible de construire des analyseurs dterministes, cest--dire des analyseurs capables de toujours faire le bon choix. Ces analyseurs sont algorithmiquement ecaces, en ce sens quil conduisent une complexit danalyse linaire par rapport la longueur de lentre. La section 7.1 prsente la mise en application de ce programme pour les stratgies danalyse descendantes, conduisant la famille danalyseurs prdictifs LL. La section 7.2 sintresse la construction danalyseurs ascendants, connus sous le nom danalyseurs LR, et prsente les analyseurs les plus simples de cette famille.

7.1

Analyseurs LL

Nous commenons par tudier les grammaires qui se prtent le mieux des analyses descendantes et drivons un premier algorithme danalyse pour les grammaires SLL(1). Nous gnralisons ensuite cette approche en introduisant les grammaires LL(1), ainsi que les algorithmes danalyse correspondants.

76

7.1.1

Une intuition simple

Comme expliqu la section 6.3, les analyseurs descendants essayent de construire de proche en proche une drivation gauche du mot u analyser : partant de S, il sagit daboutir, par des rcritures successives du (ou des) proto-mots(s) courant(s), u. chaque tape de lalgorithme, le non-terminal A le plus gauche est rcrit par A , conduisant lexploration dune nouvelle branche dans larbre de recherche. Deux cas de gure sont alors possibles : (i) soit dbute par au moins un terminal : dans ce cas on peut immdiatement vrier si le proto-mot courant est compatible avec le mot analyser et, le cas chant, revenir sur le choix de la production A . Cest ce que nous avons appel la phase dappariement. (ii) soit dbute par un non-terminal (ou est vide) : dans ce cas, il faudra continuer de dvelopper le proto-mot courant pour valider la production choisie et donc direr la validation de ce choix. Un premire manire de simplier la tche des analyseurs consiste viter dutiliser dans la grammaire les productions de type (ii) : ainsi lanalyseur pourra toujours immdiatement vrier le bien-fond des choix eectus, lui vitant de partir dans lexploration dun cul-de-sac. Ceci nlimine toutefois pas toute source de non-dterminisme : sil existe un non-terminal A apparaissant dans deux productions de type (i) A a et A a, alors il faudra quand mme considrer (en srie ou en parallle) plusieurs chemins alternatifs. Considrons, titre dexemple, le fragment de grammaire prsent dans la Table 7.1. Cette grammaire prsente la particularit de ne contenir que des productions de type (i) ; de plus, les coins gauches des productions associes ce terminal sont toutes direntes. S i f ( B ) then { I } S while ( B ) { I } S do { I } until ( B ) B f alse | true I ... T. 7.1 Fragments dun langage de commande Il est clair quun analyseur trs simple peut tre envisag, au moins pour explorer sans hsitation (on dit aussi : dterministiquement) les drivations de S : soit le premier symbole apparier est le mot-cl i f , et il faut appliquer la premire production ; soit cest while et il faut appliquer la seconde ; soit cest do et il faut appliquer la troisime. Tous les autres cas de gure correspondent des situations derreur. Si lon suppose que tous les non-terminaux de la grammaire possdent la mme proprit que S dans la Table 7.1, alors cest lintgralit de lanalyse qui pourra tre conduite de manire dterministe par lalgorithme suivant : on initialise le proto-mot courant avec S et chaque tape, on consulte les productions du non-terminal A le plus gauche, en examinant sil en existe une dont le coin gauche est le premier symbole ui non-encore appari. Les conditions prcdentes nous assurant quil existe au plus une telle production, deux congurations sont possibles : il existe une production A ui , et on lutilise ; le prochain symbole apparier devient ui+1 il nen existe pas : le mot analyser nest pas engendr par la grammaire Cet algorithme se termine lorsque lon a limin tous les non-terminaux du proto-mot : on vrie alors que les terminaux non-encore apparis dans lentre correspondent bien au suxe du mot engendr : si cest le cas, lanalyse a russi. Illustrons cet algorithme en utilisant la grammaire G de la Table 7.2 ; la Table 7.3 dcrit pas--pas les tapes de lanalyse de aacddcbb par cette grammaire.

77

S aSb S cC C dC Cc T. 7.2 Une grammaire LL(1) simple itration 0 1 2 3 4 5 6 appari a aa aac aacd aacdd aacddc apparier aacddcbb acddcbb cddcbb ddcbb dcbb cbb bb prdit S Sb Sbb Cbb Cbb Cbb bb rgle S aSb S aSb S cC C dC C dC C c

T. 7.3 tapes de lanalyse de aacddcbb A litration 3 de lalgorithme, le proto-mot courant commande la rcriture de C : le symbole apparier tant un d, le seul choix possible est dappliquer la production C dC ; ceci a pour eet de produire un nouveau proto-mot et de dcaler vers la droite le symbole apparier. Lapplication de lalgorithme danalyse prcdent demande des consultations rptitives de la grammaire pour trouver quelle rgle appliquer. Il est possible de construire lavance une table enregistrant les productions possibles. Cette table, dite table danalyse prdictive, contient pour chaque non-terminal A et pour chaque symbole dentre a lindice de la production utiliser lorsque A est le plus gauche dans le proto-mot courant, alors que lon veut apparier a. Cette table est en fait exactement analogue la table de transition dun automate dterministe : pour chaque non-terminal (tat) et chaque symbole dentre, elle indique la production (la transition) utiliser. Pour la grammaire de la Table 7.2, cette matrice est reproduite la Table 7.4. a b c d S aSb cC C c dC T. 7.4 Table danalyse prdictive Si S est prdit et a le premier terminal non appari, alors rcrire S par aSb. Les cases vides sont des situations dchec. Cette analogie1 suggre que la stratgie danalyse applique ci-dessus a une complexit linaire : un mot de longueur k ne demandera jamais un nombre dtapes suprieur k : le dterminisme rend lanalyse algorithmiquement ecace, ce qui justie les eorts pour rechercher des algorithmes dterministes.
1 cest un peu plus quune analogie : une grammaire rgulire, par dnition, vrie la proprit (i) ci-dessus ; si elle vrie de plus la proprit (ii), alors vous vrierez que lalgorithme de transformation de la grammaire en automate dcrit la section 4.2.4 aboutit en fait un automate dterministe.

78

Les grammaires prsentant les deux proprits prcdentes sont appeles des grammaires LL(1) simples et sont dnies formellement par : Dnition 7.1 (grammaires SLL(1)). Une grammaire G = (V, , S, P) est une grammaire SLL(1) si et seulement si : (i) (A ) P, a , = a (ii) A V, (A a1 1 ) P et (A a2 2 ) P a1 a2 Pourquoi cette terminologie ? Parce quelles permettent directement de mettre en uvre des analyseurs construisant de manire dterministe de gauche droite (Left-to-right) des drivations gauches (Left) avec un regard avant (en anglais Lookahead) de 1 seul symbole. Dans la mesure o la forme de la grammaire rend immdiate cette construction, ces grammaires sont additionnellement qualies de simples, do la terminologie Simple LL. La question qui se pose alors est la suivante : tout langage hors-contexte est-il susceptible dtre analys par une telle technique ? En dautres termes, est-il possible de construire une grammaire SLL(1) pour tout langage algbrique ? La rponse est malheureusement non : il existe des langages intrinsquement ambigus (voir la section 5.2.3) pour lesquels il est impossible de construire un analyseur dterministe. Il est, en revanche, possible de transformer toute grammaire en une grammaire satisfaisant la proprit (i) par une suite de transformations aboutissant la forme normale de Greibach (voir la section 8.2.2). Cette transformation conduisant toutefois des grammaires (et donc des drivations) trs loignes de la grammaire initiale, il est tentant de chercher gnraliser les stratgies dveloppes dans cette section, de manire pouvoir les appliquer des grammaires moins contraintes. Cette dmarche est poursuivie dans la suite de ce chapitre avec lintroduction des grammaires LL.

7.1.2

Grammaires LL(1)

La cl du succs des analyseurs pour les grammaires SLL(1) est la possibilit de contrler sans attendre la validit dune prdiction, rendue possible par la proprit que tout non-terminal rcrit comme premier symbole un symbole terminal. Considrons alors une grammaire qui na pas cette proprit, telle que celle de la Table 7.5, qui engendre des formules arithmtiques. S S+F|F F FT |T T (S) | D D 0 | . . . | 9 | 0D | . . . | 9D T. 7.5 Une grammaire pour les expressions arithmtiques Le non-terminal F de la grammaire de la Table 7.5, par exemple, se rcrit toujours en un nonterminal. En examinant les drivations de ce terminal, on constate toutefois que son limination dune drivation gauche conduit toujours avoir comme nouveau non-terminal le plus gauche un T, par des drivations de la forme : F A F T A F T T . . . T A T T . . . T Examinons alors les productions de T : lune commence par rcrire le terminal ( : cela signie donc que T, et donc F aussi, drive des proto-mots de type (. T peut galement se rcrire D ; ce 79

non-terminal respecte la contrainte prcdente, nous garantissant quil rcrit toujours en premier un chire entre 0 et 9. On en dduit que les drivations de T dbutent soit par (, soit par un chire ; il en va alors de mme pour les drivations de F. quoi nous sert cette information ? Dune part, dtecter une erreur ds que F apparat en tte dun proto-mot alors quun autre terminal (par exemple + ou ) doit tre appari. Mais on peut faire bien mieux encore : supposons en eet que lon cherche driver T. Deux productions sont disponibles : le calcul prcdent nous fournit un moyen infaillible de choisir entre elles : si le symbole apparier est (, il faut choisir T (S) ; sinon si cest un chire, il faut choisir T D. En dautres termes, le calcul des terminaux qui sont susceptibles dinitier une drivation gauche permet de slectionner au plus tt entre productions ayant une mme partie gauche, ainsi que danticiper sur lapplication errone de productions. En fait, ces symboles jouent le mme rle que les terminaux apparaissant en coin gauche des productions de grammaire SLL(1) et leur calcul est donc essentiel pour anticiper sur les bonnes prdictions. Lexemple prcdent suggre une approche rcursive pour eectuer ce calcul, consistant examiner rcursivement les coins gauches des productions de la grammaire jusqu tomber sur un coin gauche terminal. Formalisons maintenant cette intuition.

7.1.3

NULL, FIRST et FOLLOW

FIRST Pour commencer, dnissons lensemble FIRST(A) des symboles terminaux pouvant apparatre en tte dune drivation gauche de A, soit : Dnition 7.2 (FIRST). Soit G = (V, , S, P) une grammaire CF et A un lment de V. On appelle FIRST(A) le sous-ensemble de dni par : FIRST(A) = {a , (V ), A G a} Ainsi, dans la grammaire de la Table 7.5, on a : FIRST(F) = FIRST(T) = {(, 0, 1, . . . , 9} Comment construire automatiquement cet ensemble ? Une approche nave consisterait implanter une formule rcursive du type : FIRST(A) = X,AXP FIRST(X) Cette approche se heurte toutefois deux dicults : les productions rcursives gauche, qui sont du type du type A A ; ces productions sont hautement nocives pour les analyseurs descendants (voir la section 6.3) et il faudra dans tous les cas sen dbarrasser. Des techniques idoines pour ce faire sont prsentes la section 8.2.2 ; dans la suite de lexpos on considrera quil ny a plus de production (ni de chane de productions) rcursive gauche ; les productions A X pour lesquelles le non-terminal X est tel que X G : dans ce cas, il faudra, pour calculer correctement FIRST(A), tenir compte du fait que le coin gauche X des A-productions peut driver le mot vide. Ces non-terminaux soulvent toutefois un problme nouveau : supposons en eet que P contienne une rgle de type A , et considrons ltat dun analyseur descendant tentant de faire des prdictions partir dun proto-mot de la forme uA. A pouvant ne driver aucun symbole, il parat dicile de contrler les applications errones de la production A en 80

regardant simplement FIRST(A) et le symbole apparier. Notons quil en irait de mme si lon avait A G . Comment alors anticiper sur les drivations errones de tels non-terminaux et prserver le dterminisme de la recherche ? Pour rsoudre les problmes causs par lexistence de non-terminaux engendrant le mot vide, introduisons deux nouveaux ensembles : NULL et FOLLOW . NULL NULL est lensemble des non-terminaux drivant le mot . Il est dni par :

Dnition 7.3 (NULL). Soit G = (V, , S, P) une grammaire CF. On appelle NULL le sous-ensemble de V dni par : NULL = {A V, A G } Cet ensemble se dduit trs simplement de la grammaire G par la procdure consistant initialiser NULL avec et ajouter itrativement dans NULL tous les non-terminaux A tels quil existe une production A et que tous les symboles de sont soit dj dans NULL, soit gaux . Cette procdure sachve lorsquun examen de toutes les productions de P nentrane aucun nouvel ajout dans NULL. Il est facile de voir que cet algorithme termine en un nombre ni dtapes (au plus | V | ). Illustrons son fonctionnement sur la grammaire de la Table 7.6. S c | ABS AB | a B b | T. 7.6 Une grammaire (ambigu) pour (a | b) c Un premier examen de lensemble des productions conduit insrer B dans NULL ( cause de B ) ; la seconde itration conduit ajouter A, puisque A B. Une troisime et dernire itration najoute aucun autre lment dans NULL : en particulier S ne drive pas puisque tout mot du langage engendr par cette grammaire contient au moins un c en dernire position. Calculer FIRST Nous savons maintenant calculer NULL : il est alors possible dcrire une procdure pour calculer FIRST(A) pour tout A. Le pseudo-code de cette procdure est donn par lalgorithme 4. Illustrons le fonctionnement de cet algorithme sur la grammaire de la Table 7.6 : linitialisation conduit faire FIRST(S) = FIRST(A) = FIRST(B) = . La premire itration ajoute c dans FIRST(S), puis a dans FIRST(A) et b dans FIRST(B) ; la seconde itration conduit augmenter FIRST(S) avec a (qui est dans FIRST(A)), puis avec b (qui nest pas dans FIRST(A), mais comme A est dans NULL, il faut aussi considrer les lments de FIRST(B)) ; on ajoute galement durant cette itration b dans FIRST(A). Une troisime itration ne change pas ces ensembles, conduisant nalement aux valeurs suivantes : FIRST(S) ={a, b, c} FIRST(A)={a, b} FIRST(B) ={b} FOLLOW FOLLOW est ncessaire pour contrler par anticipation la validit de prdictions de

la forme A , ou, plus gnralement A G : pour valider un tel choix, il faut en eet connatre 81

Algorithm 4 Calcul de FIRST // initialisation foreach A V do FIRST0 (A) := od k := 0 cont := true while (cont = true) do k := k + 1 foreach A V do FIRSTk (A) := FIRSTk1 (A) od foreach (A X1 . . . Xk ) P do j := 0 do j := j + 1 // Par convention, si X j est terminal, FIRST(X j ) = X j FIRSTk (A) := FIRSTk (A) FIRSTk (X j ) while (X j NULL) od // Vrie si un des FIRST a chang ; sinon stop cont := false foreach A V do if (FIRSTk (A) FIRSTk1 (A)) then cont := true od end

les terminaux qui peuvent apparatre aprs A dans un proto-mot. Une fois ces terminaux connus, il devient possible de valider lapplication de A en vriant que le symbole apparier fait bien partie de cet ensemble ; si ce nest pas le cas, alors lutilisation de cette production aboutira ncessairement un chec. Formellement, on dnit : Dnition 7.4 (FOLLOW). Soit G = (V, , S, P) une grammaire CF et A un lment de V. On appelle FOLLOW (A) le sous-ensemble de dni par : FOLLOW (A) = {a , u , , (V ) , S uA uAa} Comment calculer ces ensembles ? En fait, la situation nest gure plus complique que pour le calcul de FIRST : la base de la rcursion est que si A X1 . . . Xn est une production de G, alors tout symbole apparaissant aprs A peut apparatre aprs Xn . La prise en compte des non-terminaux pouvant driver complique un peu le calcul, et requiert davoir au pralable calcul NULL et FIRST. Ce calcul se formalise par lalgorithme 5. Illustrons, de nouveau, le fonctionnement de cette procdure sur la grammaire de la Table 7.6. La premire itration de cet algorithme conduit examiner la production S ABS : cette rgle prsente une conguration traite dans la premire boucle for , avec X j = A, l = 0 : les lments de 82

Algorithm 5 Calcul de FOLLOW // initialisation foreach A V do FOLLOW 0 (A) := od foreach (A X1 . . . Xn ) P do for j = 1 to n 1 do if X j V then for l = 0 to n j do // Inclut le cas o X j+1 . . . X j+l+1 = if X j+1 . . . X j+l NULL then FOLLOW 0 (X j ) = FOLLOW 0 (X j ) FIRST(X j+l+1 ) od od od k := 0 cont := true while (cont = true) do k := k + 1 foreach A V do FOLLOW k (A) := FOLLOW k1 (A) od foreach (A X1 . . . Xn ) P do j := n + 1 do j := j 1 FOLLOW k (X j ) := FOLLOW k (X j ) FOLLOW k (A) while (X j NULL) od // Vrie si un des FOLLOW a chang ; sinon stop cont := f alse foreach A V do if (FOLLOW k (A) FOLLOW k1 (A)) then cont := true od od

83

FIRST(B), soit b, sont ajouts FOLLOW 1 (A). Comme B est dans NULL, on obtient aussi que les lments de FIRST(S) sont dans FOLLOW 1 (A), qui vaut alors {a, b, c} ( j = 1, l = 1). En considrant, toujours pour cette production, le cas j = 2, l = 0, il savre que les lments de FIRST(S) doivent tre insrs galement dans FOLLOW 1 (B). La suite du droulement de lalgorithme napportant aucun nouveau changement, on en reste donc : FOLLOW (S) = FOLLOW (A)={a, b, c} FOLLOW (B) ={a, b, c} On notera que FOLLOW (S) est vide : aucun terminal ne peut apparatre la droite de S dans un proto-mot. Ceci est conforme ce que lon constate en observant quelques drivations : S gure, en eet, toujours en dernire position des proto-mots qui le contiennent.

7.1.4

La table de prdiction

Nous avons montr la section prcdente comment calculer les ensembles FIRST() et FOLLOW (). Nous tudions, dans cette section, comment les utiliser pour construire des analyseurs ecaces. Lide que nous allons dvelopper consiste dduire de ces ensembles une table M (dans V ) permettant de dterminer coup sr les bons choix eectuer pour construire dterministiquement une drivation gauche. Comme pralable, gnralisons la notion de FIRST des squences quelconques de (V ) de la manire suivante2 . FIRST( = X1 . . . Xk ) = FIRST(X1 ) si X1 NULL FIRST(X1 ) FIRST(X2 . . . Xk ) sinon

Revenons maintenant sur lintuition de lanalyseur esquiss pour les grammaires SLL(1) : pour ces grammaires, une production de type A a est slectionne coup sr ds que A est le plus gauche du proto-mot courant et que a est le symbole apparier dans le mot en entre. Dans notre cas, cest lexamen de lensemble des lments pouvant apparatre en tte de la drivation de la partie droite dune production qui va jouer le rle de slecteur de la bonne production. Formellement, on commence remplir M en appliquant le principe suivant : Si A , avec , est une production de G et a est un lment de FIRST(), alors on insre dans M(A, a) Ceci signie simplement que lorsque lanalyseur descendant voit un A en tte du proto-mot courant et quil cherche apparier un a, alors il est licite de prdire , dont la drivation peut eectivement dbuter par un a. Reste prendre en compte le cas des productions de type A : lide est que ces productions peuvent tre appliques lorsque A est le plus gauche du proto-mot courant, et que le symbole apparier peut suivre A. Ce principe doit en fait tre gnralis toutes les productions A o ne contient que des symboles dans NULL ( NULL ). Ceci conduit la seconde rgle de remplissage de M : Si A , avec NULL , est une production de G et a est un lment de FOLLOW (A), alors insrer dans M(A, a)
2 Rappelons que nous avons dj tendu la notion de FIRST (et de FOLLOW ) pour des terminaux quelconques par FIRST(a) = FOLLOW (a) = a.

84

Considrons alors une dernire fois la grammaire de la Table 7.6. Lapplication du premier principe conduit aux oprations de remplissage suivantes : par le premier principe on insrera c dans M(S, c), puis ABS dans les trois cases M(S, a), M(S, b), M(S, c). Ce principe conduit galement placer a dans M(A, a), B dans M(A, b) puis b dans M(B, b). reste tudier les deux productions concernes par le second principe de remplissage. Commenons par la production B : elle est insre dans M(B, x) pour tout symbole dans FOLLOW (B), soit dans les trois cases M(B, a), M(B, b), M(B, c). De mme, la partie droite de A B doit tre insre dans toutes les cases M(A, x), avec x dans FOLLOW (A), soit dans les trois cases : M(A, a), M(A, b), M(A, c). On parvient donc la conguration de la Table 7.7. a b c S ABS ABS ABS c A a B B B B b T. 7.7 Table danalyse prdictive pour la grammaire de la Table 7.6 Lexamen de la Table 7.7 se rvle instructif pour comprendre comment analyser les mots avec cette grammaire. Supposons, en eet, que lon souhaite analyser le mot bc. Le proto-mot courant tant initialis avec un S, nous consultons la case M(S, b) de la Table 7.7, qui nous prescrit de rcrire S en ABS. Comme nous navons vri aucun symbole dans lopration, nous consultons maintenant la case M(A, b). De nouveau la rponse est sans ambigut : appliquer A B. A ce stade, les choses se compliquent : lopration suivante demande de consulter la case M(B, b), qui contient deux productions possibles : B b et B . Si, toutefois, on choisit la premire, on aboutit rapidement un succs de lanalyse : b tant appari, il sagit maintenant dapparier le c, partir du proto-mot courant : BS. Aprs consultation de la case M(B, c), on limine le B ; choisir S c dans la case M(S, c) achve lanalyse. Pour aboutir ce rsultat, il a toutefois fallu faire des choix, car la Table 7.7 ne permet pas de mettre en uvre une analyse dterministe. Ceci est d lambigut de la grammaire de la Table 7.6, dans laquelle plusieurs (en fait une innit de) drivations gauches direntes sont possibles pour le mot c (comme pourra sen persuader le lecteur en en listant quelques-unes).

7.1.5

Analyseurs LL(1)

Nous sommes nalement en mesure de dnir les grammaires LL(1) et de donner un algorithme pour les analyser. Dnition 7.5 (Grammaire LL(1)). Une grammaire hors-contexte est LL(1) si et seulement si sa table danalyse prdictive M() contient au plus une squence de (V ) pour chaque valeur (A, a) de V . Toutes les grammaires ne sont pas LL(1), comme nous lavons vu la section prcdente en tudiant une grammaire ambigu. Il est, en revanche, vrai que toute grammaire LL(1) est non-ambigu. La dmonstration est laisse en exercice. 85

Une grammaire LL(1) est susceptible dtre analyse par lalgorithme suivant (on suppose que la construction de M est une donne de lalgorithme) : Algorithm 6 Analyseur pour grammaire LL(1) // le mot en entre est : u = u1 . . . un initialisation matched := tomatch := u1 le f t := S i := 1 while (le f t i | u | ) do le f t = X if X V then do if undened (M(X, tomatch)) then return(false) := M(X, tomatch) // Remplace A par le f t := od else // le symbole de tte est terminal : on apparie simplement if (X ui ) then return(false) matched := matched . ui tomatch := ui+1 i := i + 1 od if (le f t = tomatch = ) then return(true) else return(false)

7.1.6

LL1-isation

Les grammaires LL(1) sont particulirement sympathiques, puisquelles se prtent une analyse dterministe fonde sur lexploitation dune table de prdiction. Bien que toutes les grammaires ne soient pas aussi accommodantes, il est instructif dtudier des transformations simples qui permettent de se rapprocher du cas LL(1). Un premier procd de transformation consiste supprimer les rcursions gauches (directes et indirectes) de la grammaire : cette transformation est implicite dans le processus de mise sous forme normale de Greibach et est dcrit la section 8.2.2. Une seconde transformation bien utile consiste factoriser gauche la grammaire. Pour mesurer lutilit de cette dmarche, considrons la grammaire reproduite la Table 7.8. Ce fragment de grammaire nest pas conforme la dnition donne pour les grammaires LL(1), puisquil apparat clairement que le mot-cl i f slectionne deux productions possibles pour S. Il est toutefois possible de transformer la grammaire pour se dbarrasser de cette conguration : il sut ici de factoriser le plus long prxe commun aux deux parties droites, et dintroduire un nouveau terminal S . Ceci conduit une nouvelle grammaire, prsente dans la Table 7.9. 86

S i f B then S S i f B then S else S ... T. 7.8 Une grammaire non-LL(1) pour i f -then-else S i f B then S S S else S | ... T. 7.9 Une grammaire factorise gauche pour i f -then-else Le mot cl i f slectionne maintenant une production unique ; cest aussi vrai pour else. Le fragment dcrit dans la Table 7.9 devient alors susceptible dtre analys dterministiquement (vriez-le en examinant comment appliquer coup sr S ). Ce procd se gnralise au travers de la construction utilise pour dmontrer le thorme suivant : Thorme 7.1 (Factorisation gauche). Soit G = (V, , S, P) une grammaire hors-contexte, alors il existe une grammaire quivalente qui est telle que si A X1 . . . Xk et A Y1 . . . Yl sont deux A-productions de G , alors X1 Y1 . Preuve : La preuve repose sur le procd de transformation suivant. Supposons quil existe une srie de A-productions dont les parties droites dbutent toutes par le mme symbole X. En remplaant toutes les productions A Xi par lensemble {A XA , A i }, o A est un nouveau symbole non-terminal introduit pour la circonstance, on obtient une grammaire quivalente G. Si, lissue de cette transformation, il reste des A -productions partageant un prxe commun, il est possible de rpter cette procdure, et de litrer jusqu ce quune telle conguration nexiste plus. Ceci arrivera au bout dun nombre ni ditrations, puisque chaque transformation a le double eet de rduire le nombre de productions potentiellement problmatiques, ainsi que de rduire la longueur des parties droites.

7.1.7

Quelques complments

Dtection des erreurs Le rattrapage sur erreur La dtection derreur, dans un analyseur LL(1), correspond une conguration (non-terminal A le plus gauche, symbole a apparier) pour laquelle la table danalyse ne prescrit aucune action. Le message donner lutilisateur est alors clair : Arriv au symbole numro X, jai rencontr un a alors que jaurais du avoir ... (suit lnumration des symboles tels que M(A, .) est non-vide). Stopper l lanalyse est toutefois un peu brutal pour lutilisateur, qui, en gnral, souhaite que lon dtecte en une seule passe toutes les erreurs de syntaxe. Deux options sont alors possibles pour continuer lanalyse : sil nexiste quun seul b tel que M(A, b) est non-vide, on peut faire comme si on venait de voir un b, et continuer. Cette stratgie de rcupration derreur par insertion comporte toutefois un 87

risque : celui de dclencher une cascade dinsertions, qui pourraient empcher lanalyseur de terminer correctement ; lalternative consisterait dtruire le a et tous les symboles qui le suivent jusqu trouver un symbole pour lequel une action est possible. Cette mthode est de loin prfrable, puisquelle conduit une procdure qui est assure de se terminer. Pour obtenir un dispositif de rattrapage plus robuste, il peut tre souhaitable dabandonner compltement tout espoir dtendre le A et de le faire disparatre : lanalyse reprend alors lorsque lon trouve, dans le ux dentre, un symbole dans FOLLOW (A). Les grammaires LL(k) Nous lavons vu, toutes les grammaires ne sont pas LL(1), mme aprs limination des congurations les plus problmatiques (rcursions gauches...). Ceci signie que, pour au moins un couple (A, a), M(A, a) contient plus dune entre, indiquant que plusieurs prdictions sont en concurrence. Une ide simple pour lever lindtermination concernant la bonne expansion de A consiste augmenter le regard avant. Cette intuition se formalise travers la notion de grammaire LL(k) et danalyseur LL(k) : pour ces grammaires, il sut dun regard avant de k symboles pour choisir sans hsitation la A-production appliquer ; les tables danalyse correspondantes croisent alors des non-terminaux (en ligne) avec des mots de longueur k (en colonne). Il est important de raliser que ce procd ne permet pas de traiter toutes les grammaires : cest videmment vrai pour les grammaires ambigus ; mais il existe galement des grammaires non-ambigus, pour lesquelles aucun regard avant de taille born ne permettra une analyse descendante dterministe. Ce procd de gnralisation des analyseurs descendants, bien que fournissant des rsultats thoriques importants, reste dune donc utilit pratique modeste, surtout si on compare cette famille danalyseurs lautre grande famille danalyseurs dterministes, les analyseurs de type LR, qui font lobjet de la section suivante.

7.1.8

Un exemple complet comment

Nous dtaillons dans cette section les constructions dun analyseur LL pour la grammaire de la Table 7.5, qui est rappele dans la Table 7.10, sous une forme lgrement modie. Laxiome est la variable Z. Z S# S S+T |T T TF|F F (S) | D D1|2 T. 7.10 Une grammaire (simplie) pour les expressions arithmtiques La premire tape de la construction consiste se dbarrasser des productions rcursives gauches, puis factoriser gauche la grammaire rsultante. Au terme de ces deux tapes, on aboutit la grammaire transforme 7.11, qui comprend deux nouvelles variables rcursives droite, S et F , et dont nous allons montrer quelle est eectivement LL(1). Le calcul de NULL permet didentier S et T comme les seules variables drivant le mot vide. Les tapes du calcul des ensembles FIRST et FOLLOW sont dtailles dans la Table 7.12.

88

Z S S T T F D

S# TS +TS | FT FT | (S) | D 1|2

T. 7.11 Une grammaire LL pour les expressions arithmtiques It. Z S S T T F D 1 2 FIRST 3 ( + (12 * (12 12 4 ( (12 + (12 * (12 12 5 (12 (12 + (12 * (12 12 It. Z S S F F T D FOLLOW 0 1 2 #) + * #) #) +#) +#) *+#) *+#) #) #) +#) +#) *+#) *+#)

+ * ( 12

+ ( * (12 12

T. 7.12 Calcul de FIRST et FOLLOW Il est alors possible de dterminer la table danalyse prdictive, reprsente dans la Table 7.13. Cette table est sans conit, puisque chaque case contient au plus une production. # Z S S T T F D + + FS

( Z S# S FS

1 Z S# S FS

2 Z S# S FS T

S F

S F

F T

T TF F T (S) D

TF

TF D

TD D2

T. 7.13 Table danalyse prdictive pour la grammaire de larithmtique Cette table permet eectivement danalyser dterministiquement des expressions arithmtiques simples, comme le montre la trace dexcution de la Table 7.14.

7.2
7.2.1

Analyseurs LR
Concepts

Comme voqu la section 6.2, les analyseurs ascendants cherchent rcrire le mot analyser an de se ramener, par des rductions successives, laxiome de la grammaire. Les bifurcations dans le graphe de recherche correspondent alors aux alternatives suivantes : (i) la partie droite dune production A est trouve dans le proto-mot courant ; on choisit de remplacer par A pour construire un nouveau proto-mot et donc dappliquer une rduction. 89

Pile Z S# TS# FTS# DTS# 2TS# 2*FTS# 2*(S)TS# 2*(TS)TS# 2*(FTS)TS# 2*(DTS)TS#

Symbole 2 2 2 2 2 * ( 1 1 1 1

(...) Pile 2*(1TS)TS# 2*(1S)TS# 2*(1+TS)TS# 2*(1+FTS)TS# 2*(1+DTS)TS# 2*(1+2TS)TS# 2*(1+2S)TS# 2*(1+2)TS# 2*(1+2)S# 2*(1+2)# succs

Symbole + + + + + ) ) # # #

T. 7.14 Trace de lanalyse dterministe de 2 (1 + 2) (ii) on poursuit lexamen du proto-mot courant en considrant un autre facteur , obtenu, par exemple, en tendant par la droite. Cette action correspond un dcalage de lentre. An de rationaliser lexploration du graphe de recherche correspondant la mise en uvre de cette dmarche, commenons par dcider dune stratgie dexamen du proto-mot courant : linstar de ce que nous avons mis en uvre dans lalgorithme 2, nous lexaminerons toujours depuis la gauche vers la droite. Si lon note le proto-mot courant, factoris en = , o est la partie dj examine, lalternative prcdente se rcrit selon : possde un suxe correspondant la partie droite dune rgle : rduction et dveloppement dun nouveau proto-mot. est tendu par la droite par dcalage dun nouveau terminal. Cette stratgie conduit la construction de drivations droites de lentre courante. Pour vous en convaincre, remarquez que le suxe du proto-mot courant nest jamais modi : il ny a toujours que des terminaux droite du symbole rcrit, ce qui est conforme la dnition dune drivation droite. Illustrons ce fait en considrant la grammaire de la Table 7.15. S AB A aA | b B bB | a T. 7.15 Une grammaire pour a bb a Soit alors u = abba ; une analyse ascendante de ce mot est reproduite la Table 7.16. En considrant les rductions opres, on obtient la drivation : S G AB G AbB G Aba G aAba G abba, qui est eectivement une drivation droite. On note galement quon a introduit un troisime type daction de lanalyseur, consistant accepter lentre comme un mot de la grammaire. Il existe enn un quatrime type daction, non reprsent ici, consistant diagnostiquer une situation dchec de lanalyse. Dernire remarque concernant cette trace : les direntes transformations possibles de via les actions de rduction et de dcalage nagissent que sur les suxes de . Ceci suggre dimplanter sous la forme dune pile, sur laquelle saccumulent (puis se rduisent) progressivement les symboles de u. Si lon adopte ce point de vue, une pile correspondant la trace de la Table 7.16 90

abba abba abba aAba Aba Aba Aba AbB AB S

abba a bba ab ba aA ba A ba Ab a Aba AbB AB

Action dcaler dcaler rduire par A b rduire par A aA dcaler dcaler rduire par B a rduire par B bB rduire par S AB n : accepter lentre

T. 7.16 Analyse ascendante de u = abba passerait par les tats successifs suivants : a, ab, aA, A, Ab, Aba, AbB, AB, S. Bien naturellement, cette implantation demanderait galement de conserver un pointeur vers la position courante dans u, an de savoir quel symbole empiler. Dans la suite, nous ferons lhypothse que est eectivement implant sous la forme dune pile. Comment procder pour rendre ce processus dterministe ? Cherchons des lments de rponse dans la trace danalyse prsente dans la Table 7.16. Ce processus contient quelques actions dterministes, comme la premire opration de dcalage : lorsquen eet (la pile) ne contient aucun suxe correspondant une partie droite de production, dcaler est lunique action possible. De manire duale, lorsque est vide, dcaler est impossible : il faut ncessairement rduire, lorsque cela est encore possible : cest, par exemple, ce qui est fait durant la dernire rduction. Un premier type de choix correspond au second dcalage : = a est ce moment gal une partie droite de production (B a), pourtant on choisit ici de dcaler (ce choix est presque toujours possible) plutt que de rduire. Notons que la dcision prise ici est la (seule) bonne dcision : rduire prmaturment aurait conduit positionner un B en tte de , conduisant lanalyse dans une impasse : B napparaissant en tte daucune partie droite, il aurait t impossible de le rduire ultrieurement. Un second type de conguration (non reprsente ici) est susceptible de produire du non-dterminisme : il correspond au cas o lon trouve en queue de deux parties droites de productions : dans ce cas, il faudra choisir entre deux rductions concurrentes. Rsumons-nous : nous voudrions, de proche en proche, et par simple consultation du sommet de la pile, tre en mesure de dcider dterministiquement si laction eectuer est un dcalage ou bien une rduction (et dans ce cas quelle est la production utiliser), ou bien encore si lon se trouve dans une situation derreur. Une condition susante serait que, pour chaque production p, on puisse dcrire lensemble Lp des congurations de la pile pour lesquelles une rduction par p est requise ; et que, pour deux productions p1 et p2 telles que p1 p2 , Lp1 et Lp2 soient toujours disjoints. Voyons quelle(s) condition(s) cela est possible.

7.2.2

Analyseurs LR(0)

Pour dbuter, formalisons la notion de contexte LR(0) dune production. Dnition 7.6. Soit G une grammaire hors-contexte, et p = (A

) une production de G, on appelle

91

contexte LR(0) de p le langage LA dni par : LA = { = ( V ) tq. v , S G Av G v} En dautres termes, tout mot de LA contient un suxe et est tel quil existe une rduction de v en S qui dbute par la rduction de en A. Chaque fois quun tel mot apparat dans la pile dun analyseur ascendant gauche-droit, il est utile doprer la rduction A ; linverse, si lon trouve dans la pile un mot absent de LA , alors cette rduction ne doit pas tre considre, mme si ce mot se termine par . Examinons maintenant de nouveau la grammaire de la Table 7.15 et essayons de calculer les langages Lp pour chacune des productions. Le cas de la premire production est clair : il faut imprativement rduire lorsque la pile contient AB, et cest l le seul cas possible. On dduit directement que LSAB = {AB}. Considrons maintenant A aA : la rduction peut survenir quel que soit le nombre de a prsents dans la pile. En revanche, si la pile contient un symbole dirent de a, cest quune erreur aura t commise. En eet : une pile contenant une squence baA ne pourra que se rduire en AA, dont on ne sait plus que faire ; ceci proscrit galement les piles contenant plus dun A, qui aboutissent pareillement des congurations dchec ; une pile contenant une squence B . . . A ne pourra que se rduire en BA, dont on ne sait non plus comment le transformer. En consquence, on a : LAaA = aa A. Des considrations similaires nous amnent conclure que : LAb = a b ; LBbB = Abb B ; LBa = Ab a ; Chacun des ensembles Lp se dcrivant par une expression rationnelle, on dduit que lensemble des Lp se reprsente sur lautomate de la Figure 7.1, qui ralise lunion des langages Lp . Vous noterez de plus que (i) lalphabet dentre de cet automate contient la fois des symboles terminaux et non-terminaux de la grammaire ; (ii) les tats naux de lautomate de la Figure 7.1 sont associs aux productions correspondantes ; (iii) toute situation dchec dans lautomate correspond un chec de lanalyse : en eet, ces congurations sont celles o la pile contient un mot dont lextension ne peut aboutir aucune rduction : il est alors vain de continuer lanalyse. Comment utiliser cet automate ? Une approche nave consiste mettre en uvre la procdure suivante : partant de ltat initial qi = q0 et dune pile vide on applique des dcalages jusqu atteindre un tat nal q. On rduit ensuite la pile selon la production associe q, donnant lieu une nouvelle pile qui induit un repositionnement dans ltat qi = (q0 , ) de lautomate. La procdure est itre jusqu puisement simultan de la pile et de u. Cette procdure est formalise travers lalgorithme 7. Limplantation dcrite dans lalgorithme 7 est un peu nave : en eet, chaque rduction, on se repositionne ltat initial de lautomate, perdant ainsi le bnce de lanalyse des symboles en tte de la pile. Une implantation plus ecace consiste mmoriser, pour chaque symbole de la pile, ltat q atteint dans A. A la suite dune rduction, on peut alors directement se positionner sur q pour poursuivre lanalyse. Cette amlioration est mise en uvre dans lalgorithme 8. Notez, pour nir, que lon eectue en fait deux sortes de transitions dans A : celles qui sont eectues directement lissue dun dcalage et qui impliquent une extension de la pile ; et celles qui sont eectues lissue dune rduction et qui consistent simplement un repositionnement ne ncessitant pas de nouveau dcalage. Ces deux actions sont parfois distingues, lune sous le nom de dcalage (shift), lautre sous le nom de goto. De lautomate prcdent, se dduit mcaniquement une table danalyse (dite LR(0)), donne pour 92

2
A

aA

1
a b b b

0
B

6 5
b

bB

A S

4
B

AB

F. 7.1 Lautomate des rductions licites

Algorithm 7 Reconnaissance ascendante guide par un automate A = ( V, Q, q0 , F, ). Version 1 // initialisation := // Initialisation de la pile q := q0 // Se positionner dans ltat initial i := j := 0 while (i | u | ) do while ( j | | ) do j := j + 1 q := (q, j ) od while (q F) do := ui // Empilage de ui if ((q, ui ) existe ) then q := (q, ui ) else return (false) i := i + 1 od // Rduction de p : A := 1 A j := 0 q := q0 od if ( = S q F) then return (true) else return (false)

93

Algorithm 8 Reconnaissance ascendante guide par un automate A = ( V, Q, q0 , F, ). Version 2 // initialisations := (, q0 ) // Initialisation de la pile q := q0 // Se positionner dans ltat initial i := 0 while (i | u | ) do while (q F) do if ((q, ui ) existe ) then do q := (q, ui ) // Progression dans A push (, (ui , q)) // Empilage de (ui , q) i := i + 1 od else return (false) od // On atteint un tat nal : rduction de p : A j := 0 // Dpilage de while ( j <| | ) do pop () j := j + 1 od // (x, q) est sur le sommet de la pile : repositionnement push (, (A, (q, A))) q := (q, A) od if ( = (S, q) q F) then return (true) else return (false)

lautomate de la Figure 7.1 la Table 7.17. Cette table rsume les direntes actions eectuer en fonction de ltat courant de lautomate. La Table 7.17 contient trois types dentres : une entre de type (s, i) en colonne x signie : eectuer un dcalage, lire le symbole en tte de pile, si cest un x transiter dans ltat i. Attention : le dcalage a bien lieu de manire inconditionnelle, cest-dire indpendamment de la valeur du symbole empil ; en revanche, cette valeur dtermine la transition de lautomate exercer ; une entre de type ( g, j) en colonne X signie : lire le symbole en tte de pile, si cest un X transiter dans ltat j. une entre de type (r, A ) en colonne signie : rduire la pile selon A . Toutes les autres congurations (qui correspondent aux cases vides de la table) sont des situations derreur. Pour distinguer, dans la table, les situations o lanalyse se termine avec succs, il est courant dutiliser la transformation suivante : on ajoute un nouveau symbole terminal, par exemple # ; on transforme G en G en ajoutant un nouvel axiome Z et une nouvelle production Z S#, o S est laxiome de G. on transforme lentre analyser en u# ; 94

0 1 2 3 4 5 6 7 8

A g,4 g,2

a s,1 s,1

b s,3 s,3

r, A aA r, A b g,8 g,6 s,7 s,7 s,5 s,5 r, B bB r, B a r, S AB A B a b

T. 7.17 Une table danalyse LR(0) ltat (nal) correspondant la rduction Z S# est (le seul) tat dacceptation, puisquil correspond la fois la n de lexamen de u (# est empil) et la prsence du symbole S en tte de la pile. Il apparat nalement, qu laide de la Table 7.17, on saura analyser la grammaire de la Table 7.15 de manire dterministe et donc avec une complexit linaire. Vous pouvez vrier cette armation en tudiant le fonctionnement de lanalyseur pour les entres u = ba (succs), u = ab (chec), u = abba (succs). Deux questions se posent alors : (i) peut-on, pour toute grammaire, construire un tel automate ? (ii) comment construire lautomate partir de la grammaire G ? La rponse (i) est non : il existe des grammaires (en particulier les grammaires ambigus) qui rsistent toute analyse dterministe. Il est toutefois possible de chercher se rapprocher de cette situation, comme nous le verrons la section 7.2.3. Dans lintervalle, il est instructif de rchir la manire de construire automatiquement lautomate danalyse A. Lintuition de la construction se fonde sur les remarques suivantes. Initialement, on dispose de u, non encore analys, quon aimerait pouvoir rduire en S, par le biais dune srie non-encore dtermine de rductions, mais qui sachvera ncessairement par une rduction de type S . Supposons, pour linstant, quil nexiste quune seule S-production : S X1 . . . Xk : le but original de lanalyse aboutir une pile dont S est lunique symbole en ayant dcal tous les symboles de u se reformule alors en : aboutir une pile gale X1 . . . Xk en ayant dcal tous les symboles de u. Ce nouveau but se dcompose naturellement en une srie dtapes qui vont devoir tre accomplies squentiellement : dabord parvenir une conguration o X1 est au fond de la pile, puis faire que X2 soit empil juste au-dessus de X1 ... Conserver la trace de cette srie de buts suggre dinsrer dans lautomate danalyse une branche correspondant la production S X1 . . . Xk , qui sachvera donc sur un tat nal correspondant la rduction de X1 . . . Xk en S. Une telle branche est reprsente la Figure 7.2.
0
X1

X2

Xk

X1...X k

F. 7.2 Une branche de lautomate Chaque tat le long de cette branche correspond la rsolution dun sous-but supplmentaire, la transition Xi annonant lempilage de Xi , et dclenchant la recherche dun moyen dempiler Xi+1 . 95

Pour formaliser cette ide, nous introduisons le concept de production (ou rgle) pointe 3 . Dnition 7.7. Une production pointe dune grammaire hors-contexte G est un triplet (A, , ) de V (V ) (V ) , avec A = une production de G. Une production pointe est note avec un point : A . Une production pointe exprime la rsolution partielle dun but : A exprime que la rsolution du but empiler A en terminant par la rduction A a t partiellement accomplie, en particulier que a dj t empil et quil reste encore empiler les symboles de . Chaque tat de la branche de lautomate correspondant la production A sidentie ainsi une production pointe particulire, les tats initiaux et naux de cette branche correspondant respectivement : A et A . Retournons notre problme original, et considrons maintenant le premier des sous-buts : empiler X1 au fond de la pile. Deux cas de gure sont possibles : soit X1 est symbole terminal : le seul moyen de lempiler consiste eectuer une opration de dcalage, en cherchant un tel symbole en tte de la partie non encore analyse de lentre courante. soit X1 est un non-terminal : son insertion dans la pile rsulte ncessairement dune srie de rductions, dont la dernire tape concerne une X1 -production : X1 Y1 . . . Yn . De nouveau, le but observer X1 au fond de la pile se dcompose en une srie de sous-buts, donnant naissance une nouvelle branche de lautomate pour le mot Y1 . . . Yn . Comment relier ces deux branches ? Tout simplement par une transition entre les deux tats initiaux, indiquant que lempilage de X1 se rsoudra en commenant lempilage de Y1 (voir la Figure 7.3). Sil existe plusieurs X1 -productions, on aura une branche (et une transition ) par production.
X1
S
G

X1X2...X k

X2
S X1GX2...X k

Xk

X1...X k

Y1
X1
G

Y2

Yn

Y1Y2...Y n

X1 Y1...Y n

F. 7.3 Deux branches de lautomate Ce procd se gnralise : chaque fois quune branche porte une transition (q, X) = r, avec X un non-terminal, il faudra ajouter une transition entre q et tous les tats initiaux des branches correspondants aux X-productions. De ces remarques, dcoule un procd systmatique pour construire un -NFA (V , Q, q0 , F, ) permettant de guider une analyse ascendante partir dune grammaire G = (, V, Z, P), telle que Z est non-rcursif et ne gure en partie gauche que dans lunique rgle Z : Q = {[A ] avec A P} q0 = [Z ] F = {[A ] avec A P} ; chaque tat nal est associe une production A q = [A X] Q, (q, X) = [A X ] q = [A B] Q tq. B V, q = [B ], (q, ) = q . Le thorme suivant, non dmontr ici, garantit que ce procd de construction permet eectivement didentier les contextes LR(0) des productions.
3

On trouve galement le terme ditem et en anglais de dotted rule.

96

Thorme 7.2. Soit A lautomate ni driv de G par la construction prcdente, alors : (q0 , ) = [A ] si et seulement si : (i) , = (ii) LA Ce rsultat assure, en particulier, que lorsque lon atteint un tat nal de lautomate (pour = ), la pile contient eectivement un mot appartenant au contexte LR(0) de la production associe ltat nal atteint. Il est naturellement possible de dterminiser cet automate, en appliquant les algorithmes de suppression des transitions spontanes (voir page 33), puis la construction des sous-ensembles dcrite la page 30 ; on prendra soin de propager lors de ces transformations linformation de rduction associe aux tats naux des branches. En clair, si un tat q du dterminis contient une production pointe originale de type A , alors q sera un tat (nal) dans lequel cette rduction est possible. Le lecteur est vivement encourag entreprendre cette dmarche et vrier quil retrouve bien, en partant de la grammaire de la Table 7.15 un automate ressemblant fortement celui de la Figure 7.1. On dduit nalement de cet automate dterministe, par le procd utilis pour construire la Table 7.17, la table danalyse LR(0). Dnition 7.8. Une grammaire hors-contexte est LR(0) 4 si sa table T() danalyse LR(0) est telle que : pour toute ligne i (correspondant un tat de lautomate), soit il existe x V tel que T(i, x) est non-vide et T(i, ) est vide ; soit T(i, ) est non-vide et contient une rduction unique. Une grammaire LR(0) peut tre analyse de manire dterministe. La dnition dune grammaire LR(0) correspond des contraintes qui sont souvent, dans la pratique, trop fortes pour des grammaires relles, pour lesquelles la construction de la table LR(0) aboutit des conits. Le premier type de conguration problmatique correspond une indtermination entre dcaler et rduire (conit shift/reduce ) ; le second type correspond une indtermination sur la rduction appliquer ; on parle alors de conit reduce/reduce. Vous noterez, en revanche, quil ny a jamais de conit shift/shift. Pourquoi ? Comme pour les analyseurs descendants, il est possible de lever certaines indterminations en sautorisant un regard en avant sur lentre courante ; les actions de lanalyseur seront alors conditionnes non seulement par ltat courant de lautomate danalyse, mais galement par les symboles non-analyss. Ces analyseurs font lobjet de la section qui suit.

7.2.3

Analyseurs LR(1), LR(k)...

Regard avant Commenons par tudier le cas le plus simple, celui o les conits peuvent tre rsolus avec un regard avant de 1. Cest, par exemple, le cas de la grammaire de la Table 7.18 : Considrons une entre telle que x + x + x : sans avoir besoin de construire la table LR(0), il apparat quaprs avoir empil le premier x, puis lavoir rduit en T, par T x, deux alternatives vont sorir lanalyseur : soit immdiatement rduire T en E soit oprer un dcalage et continuer de prparer une rduction par E T + E.
4 Un L pour left-to-right, un R pour rightmost derivation, un 0 pour 0 lookahead ; en eet, les dcisions (dcalage vs. rduction) sont toujours prises tant uniquement donn ltat courant (le sommet de la pile).

97

S E# E T+E|T Tx T. 7.18 Une grammaire non-LR(0) Il apparat pourtant que + ne peut jamais suivre E dans une drivation russie : vous pourrez le vrier en construisant des drivations droites de cette grammaire. Cette observation anticipe du prochain symbole empiler sut, dans le cas prsent, restaurer le dterminisme. Comment traduire cette intuition dans notre analyseur ? La rponse consiste modier la procdure de construction de lautomate dcrite la section prcdente en choisissant comme ensemble dtats toutes les paires5 constitues dune production pointe et dun terminal. On note ces tats [A , a]. La construction de lautomate danalyse LR (ici LR(1)) (V , Q, q0 , F, ) se droule alors comme suit (on suppose toujours que laxiome Z nest pas rcursif et napparat que dans une seule rgle) : Q = {[A , a] avec A P et a } q0 = [Z , ?], o ? est un symbole joker qui vaut pour nimporte quel symbole terminal ; F = {[A , a], avec A P} ; chaque tat nal est associe la production A , correspondant la rduction oprer ; q = [A X, a] Q, (q, X) = [A X , a] ; comme prcdemment, ces transitions signient la progression de la rsolution du but courant par empilement de X ; q = [A B, a] Q tq. B V, q = [B , b] tq. b FIRST(a), (q, ) = q . La condition supplmentaire b FIRST(a) (voir la section 7.1.3) introduit une information de dsambigusation qui permet de mieux caractriser les rductions oprer. En particulier, dans le cas LR(1), on espre quen prenant en compte la valeur du premier symbole drivable depuis a , il sera possible de slectionner la bonne action eectuer en cas de conit sur B. Pour illustrer ce point, considrons de nouveau la grammaire prcdente 7.18. Ltat initial de lautomate LR(1) correspondant est [S E#] ; lequel a deux transitions , correspondant aux deux faons dempiler un E, atteignant respectivement les tats q1 = [E T + E, #] et q2 = [E T, #]. Ces deux tats se distinguent par leurs transitions sortantes : dans le cas de q1 , vers [T x, +] ; dans le cas de q2 , vers [T x, #]. lissue de la rduction dun x en T, le regard avant permet de dcider sans ambigut de laction : si cest un +, il faut continuer de chercher une rduction E T + E ; si cest un #, il faut rduire selon E T. Construction pas--pas de lautomate danalyse La construction de la table danalyse partir de lautomate se droule comme pour la table LR(0). Dtaillons-en les principales tapes : aprs construction et dterminisation de lautomate LR(1), on obtient un automate ni dont les tats naux sont associs des productions de G. On procde alors comme suit : pour chaque transition de q vers r tiquete par un terminal a, la case T(q, a) contient la squence dactions (dcaler, consommer a en tte de la pile, aller en r) ; pour chaque transition de q vers r tiquete par un non-terminal A, la case T(q, A) contient la squence dactions (consommer A en tte de la pile, aller en r) ; pour chaque tat nal q = [A , a], la case T(q, a) contient lunique action (rduire la pile selon A ) : la dcision de rduction (ainsi que la production appliquer) est maintenant
5

En fait, les prendre toutes est un peu excessif, comme il apparatra bientt.

98

conditionne par la valeur du regard avant associ q. Lorsque T() ne contient pas de conit, la grammaire est dite LR(1). Il existe des grammaires LR(1) ou presque6 LR(1) pour la majorit des langages informatiques utiliss dans la pratique. En revanche, lorsque la table de lanalyseur LR(1) contient des conits, il est de nouveau possible de chercher augmenter le regard avant pour rsoudre les conits restants. Dans la pratique7 , toutefois, pour viter la manipulation de tables trop volumineuses, on prfrera chercher des moyens ad-hoc de rsoudre les conits dans les tables LR(1) plutt que denvisager de construire des tables LR(2) ou plus. Une manire courante de rsoudre les conits consiste imposer des priorits via des rgles du type : en prsence dun conit shift/reduce, toujours choisir de dcaler8 ... En guise dapplication, le lecteur est invit sattaquer la construction de la table LR(1) pour la Table 7.18 et den dduire un analyseur dterministe pour cette grammaire. Idem pour la grammaire de la Table 7.19, qui engendre des mots tels que x = x. S S E V

S# V=E|E V E | x

T. 7.19 Une grammaire pour les manipulations de pointeurs Pour vous aider dans votre construction, la Figure 7.4 permet de visualiser leet de lajout du regard avant sur la construction de lautomate danalyse. Une construction directe Construire manuellement la table danalyse LR() est fastidieux, en particulier cause du passage par un automate non-dterministe, qui implique dutiliser successivement des procdures de suppression des transitions spontanes, puis de dterminisation. Dans la mesure o la forme de lautomate est trs strotype, il est possible denvisager la construction directe de lautomate dterminis partir de la grammaire, en saidant des remarques suivantes : chaque tat du dterminis est un ensemble dlments de la forme [production pointe, terminal] : ceci du fait de lapplication de la construction des sous-ensembles (cf. la section 3.1.4) la suppression des transitions spontanes induit la notion de fermeture : la -fermeture dun tat tant lensemble des tats atteints par une ou plusieurs transitions . Cette procdure de construction du DFA A est dtaille dans lalgorithme 9, qui utilise deux fonctions auxiliaires pour eectuer directement la dterminisation.
Cest--dire que les tables correspondantes sont presque sans conit Il existe une autre raison, thorique celle-l, qui justie quon se limite aux grammaires LR(1) : les grammaires LR(1) engendrent tous les langages hors-contextes susceptibles dtre analyss par une procdure dterministe ! Nous aurons loccasion de revenir en dtail sur cette question au chapitre 9. En dautres termes, laugmentation du regard avant peut conduire des grammaires plus simples analyser ; mais ne change rien lexpressivit des grammaires. La situation dire donc ici de ce quon observe pour la famille des grammaires LL(k), qui induit une hirarchie stricte de langages. 8 Ce choix de privilgier le dcalage sur la rduction nest pas innocent : en cas dimbrication de structures concurrentes, il permet de privilgier la structure la plus intrieure, ce qui correspond bien aux atteintes des humains. Cest ainsi que le mot if cnd1 then if cond2 then inst1 else inst2 sera plus naturellement interprte if cnd1 then (if cond2 then inst1 else inst2) que if cnd1 then (if cond2 then inst1) else inst2 en laissant simplement la priorit au dcalage du else qu la rduction de if cond2 then inst1. b
7 6

99

Algorithm 9 Construction de lautomate danalyse LR(1) // Programme principal begin q0 = Closure ([S S#, ?]) // Ltat initial de A Q := {q0 } // Les tats de A T := // Les transitions de A while (true) do Qi := Q Ti := T foreach q Q do // q est lui-mme un ensemble ! foreach [A X, a] q do r := Successor (q, X) Q := Q {r} T := T {(q, X, r)} od od // test de stabilisation if (Q = Qi T = Ti ) then break od end // Procdures auxiliaires Closure (q) // Construction directe de la -fermeture begin while (true) do qi := q foreach [A X, a] q do foreach (X ) P do foreach b FIRST (a) do q := q [X , b] od od od // test de stabilisation if (q = qi ) then break od return (q) end Successor (q, X) // Dveloppement des branches begin r := foreach [A X, a] q do r := r [A X , a] od return (Closure (r)) end

100

[S

S#, ?]

[S

S G #, ?]

[S

S# G , ?]

[S

V = E, #]

[S

V G = E, #]

[S

V = G E, #]

[S

V = E G , #]

[S

E, #]

[S

E G , #]

[E

V, #]

[E

V G , #]

[E

V, =]

[E

V G , =]

[V

x, #]

[V

x G , #]

[V

x, =]

[V

x G , =]

[V

* E, #]

[V

E, #]

[V

* E G , #]

[V

* E, =]

[V

E, =]

[V

* E G , =]

F. 7.4 Les rductions licites pour la Table 7.19 Pour amliorer la lisibilit, les ne sont pas reprsents. Ltat dacceptation est reprsent en gras.

En guise dapplication, vous vrierez que la mise en uvre de lalgorithme 9 construit directement le dterminis de lautomate de la Figure 7.4.

7.2.4

Complments

LR et LL La famille des analyseurs LR(k) permet danalyser tous les langages LL(k) et bien dautres langages non-ambigus. La raison de cette plus grande gnricit des analyseurs LR est au fond leur plus grande prudence : alors quun analyseur LL(k) doit pouvoir slectionner sans erreur une production A sur la seule base des k symboles terminaux non encore apparis (dont tout ou partie peut tre driv de A), un analyseur LR(k) fonde sa dcision dappliquer une rduction A sur (i) la connaissance de lintgralit de la partie droite et (ii) la connaissance des k symboles terminaux droite de A. Pour k x, il est alors normal quun analyseur LR(k), ayant plus dinformation sa disposition quun analyseur LL(k), fasse des choix plus clairs, faisant ainsi porter moins de contraintes sur la forme de la grammaire. Gnration danalyseurs Lorsque lon sintresse des grammaires relles, la construction de lautomate et de la table danalyse LR peut rapidement conduire de trs gros automates : il est en fait ncessaire de dterminiser un automate dont le nombre dtats est proportionnel la somme des longueurs des parties droites des productions de G ; tape qui peut conduire (cf. la section 3.1.4) un automate dterministe ayant exponentiellement plus dtats que le non-dterministe dorigine. 101

Il devient alors intressant de recourir des programmes capables de construire automatiquement un analyseur pour une grammaire LR : il en existe de nombreux, dont le plus fameux, yacc est disponible et document (dans sa version libre, connue sous le nom de bison) ladresse suivante : http://www.gnu.org/software/bison/bison.html. LR et LALR et ... Utiliser un gnrateur danalyseur tel que bison ne fait que reporter sur la machine la charge de construire (et manipuler) un gros automate ; ce qui, en dpit de lindniable bonne volont gnrale des machines, peut malgr tout poser problme. Le remde le plus connu est dessayer de compresser avec perte, lorsque cela est possible (et cest le cas gnral) les tables danalyse LR(1), donnant lieu la classe danalyseurs LALR(1), qui sont ceux que construit yacc. Il existe de nombreuses autres variantes des analyseurs LR visant fournir des solutions pour sauver le dterminisme de lanalyse, tout en maintenant les tables dans des proportions raisonnables. Nous aurons loccasion de revenir beaucoup plus en dtail sur les analyseurs (LA)LR et leurs multiples variantes au chapitre 9.

102

Chapitre 8

Normalisation des grammaires CF


Dans ce chapitre, nous tudions quelques rsultats complmentaires concernant les grammaires hors-contexte, rsultats qui garantissent dune part que les cas de rgles potentiellement problmatiques pour lanalyse (productions , rcursions gauches...) identies dans les discussions du chapitre 6 possdent des remdes bien identis ; dautre part, quil est possible dimposer a priori des contraintes sur la forme de la grammaire, en utilisant des transformations permettant de mettre les productions sous une forme standardise. On parle, dans ce cas, de grammaires sous forme normale. Nous prsentons dans ce chapitre les deux formes normales les plus utiles, la forme normale de Chomsky et la forme normale de Greibach.

8.1

Simplication des grammaires CF

Dans cette section, nous nous intressons tout dabord aux procdures qui permettent de simplier les grammaires CF, en particulier pour faire disparatre un certain nombre de congurations potentiellement embarrassantes pour les procdures danalyse.

8.1.1

Quelques prliminaires

Commenons par deux rsultats lmentaires, que nous avons utiliss sans les formaliser direntes reprises. Dnition 8.1 (Sous-grammaire). Soit G = (V, , S, P) une grammaire CF. On appelle sous-grammaire toute grammaire G = (V, , S, P ), avec P P. Si G est une sous-grammaire de G, alors L(G ) L(G). Une sous-grammaire de G nutilise quun sous-ensemble des productions de G ; le langage engendr est donc un sous-ensemble du langage engendr par G. Une seconde notion utile est celle du langage engendr par un non-terminal A. Formellement, Dnition 8.2 (Langage engendr par un non-terminal). Soit G = (V, , S, P) une grammaire CF. On appelle langage engendr par le non-terminal A le langage LA (G) engendr par la grammaire G = (V, , A, P). Le langage engendr par un non-terminal est donc obtenu en choisissant ce non-terminal comme axiome. Le langage engendr par la grammaire G est donc simplement le langage L(G) = LS (G). 103

Le procd suivant nous fournit un premier moyen pour construire systmatiquement des grammaires quivalentes une grammaire G. De manire informelle, ce procd consiste courtcircuiter des tapes de drivation en les remplaant par une drivation en une tape. Cette opration peut tre eectue sans changer le langage engendr, comme lnonce le rsultat suivant. Lemme 8.1 (Court-circuitage des drivations). Soit G = (V, , S, P) une grammaire CF ; soient A un non-terminal et une squence de terminaux et non-terminaux tels que A G . Alors G = (V, , S, P {A }) est faiblement quivalente G. Preuve : le lemme prcdent concernant les sous-grammaires nous assure que L(G) L(G ). Inversement, soit u dans L(G ) : si sa drivation nutilise pas la production A , alors la mme drivation existe dans G ; sinon si sa drivation utilise A , alors il existe une drivation dans G utilisant A G . Nous terminons cette section par un second procd permettant de construire des grammaires quivalentes, qui utilise en quelque sorte la distributivit des productions. Lemme 8.2 (Distributivit des drivations). Soit G une CFG, A 1 B2 une A-production de G et {B 1 , . . . , B n } lensemble des B-productions. Alors, la grammaire G drive de G en supprimant A 1 B2 et en ajoutant aux productions de G lensemble {A 1 1 2 , . . . , A 1 n 2 } engendre le mme langage que G. La dmonstration de ce second rsultat est laisse en exercice.

8.1.2

Non-terminaux inutiles

La seule contrainte dnitoire pose sur les productions des CFG est que leur partie gauche soit rduite un non-terminal unique. Toutefois, un certain nombre de congurations posent des problmes pratiques, notamment lorsquil sagit de mettre en uvre des algorithmes danalyse. Nous nous intressons, dans cette section, aux congurations qui, sans introduire de dicults majeures, sont source dinecacit. Une premire source dinecacit provient de lexistence de non-terminaux napparaissant que dans des parties droites de rgles. En fait, ces non-terminaux ne drivent aucun mot et peuvent tre supprims, ainsi que les rgles qui y font rfrence, sans altrer le langage engendr par la grammaire. Une conguration voisine est fournie par des non-terminaux (dirents de laxiome) qui napparatraient dans aucune partie droite. Ces non-terminaux ne pouvant tre drivs de laxiome, ils sont galement inutiles et peuvent tre supprims. Enn, les non-terminaux improductifs sont ceux qui, bien que drivables depuis laxiome, ne peuvent apparatre dans drivation russie, parce quils sont impossibles liminer. Pensez, par exemple, un non-terminal X qui napparatrait (en partie gauche) que dans une seule rgle de la forme X aX. Formalisons maintenant ces notions pour construire un algorithme permettant de se dbarrasser des non-terminaux et des productions inutiles. Dnition 8.3 (Utilit dune production et dun non-terminal). Soit G une CFG, on dit quune production P = A de G est utile si et seulement sil existe un mot w tel que S G xAy G x y G w. Sinon, on dit que P est inutile. De mme, on qualie dutiles les non-terminaux qui gurent en partie gauche des rgles utiles. 104

Lidentication des productions et non-terminaux utiles se fait en appliquant les deux procdures suivantes : La premire tape consiste tudier successivement toutes les grammaires {GA = (V, , A, P), A V }. L(GA ) contient donc lensemble des mots qui se drivent depuis le non-terminal A. Il existe un algorithme (cf. la section 5.3) permettant de dterminer si L(GA ) est vide. On construit alors G en supprimant de G tous les non-terminaux A pour lesquels L(GA ) = , ainsi que les productions dans lesquels ils apparaissent1 . La grammaire G ainsi construite est fortement quivalente G. En eet : L(G ) G, par le simple fait que G est une sous-grammaire de G ; de plus, les drivations gauches de G sont identiques celles de G. L(G) G : sil existe un mot u tel que S G u et S G u, alors ncessairement la drivation de u contient un des non-terminaux limins de G. Ce non-terminal drive un des facteurs de u, donc engendre un langage non-vide, ce qui contredit lhypothse. Cette procdure nest toutefois pas susante pour garantir quun non-terminal est utile : il faut, de plus, vrier quil peut tre driv depuis S. Cest lobjet de la seconde phase de lalgorithme. Dans une seconde tape, on construit rcursivement les ensembles VU et PU contenant respectivement des non-terminaux et des productions. Ces ensembles contiennent initialement respectivement S et toutes les productions de partie gauche S. Si, une tape donne de la rcursion, VU contient A, alors on ajoute PU toutes les rgles dont A est partie gauche, et VU tous les non-terminaux gurant dans les parties droites de ces rgles. Cette procdure sarrte aprs un nombre ni ditrations, quand plus aucun non-terminal ne peut-tre ajout VU . Par construction, pour toute production A de PU , il existe 1 et 2 tels que S G 1 A2 G 1 2 . En supprimant de G tous les terminaux qui ne sont pas dans VU , ainsi que les productions PU correspondantes, on construit, partir de G, une nouvelle sous-grammaire G , qui par construction ne contient que des terminaux et des productions utiles. Par un argument similaire au prcdent, on vrie que G est fortement quivalente G. Attention : ces deux procdures doivent tre appliques dans un ordre prcis. En particulier, il faut commencer par supprimer les variables ne gnrant aucun mot, puis liminer celles qui napparaissent dans aucune drivation. Vous pourrez vous en convaincre en examinant la grammaire de la Table 8.1. S a | AB Ab T. 8.1 limination des productions inutiles : lordre importe

8.1.3

Cycles et productions non-gnratives

Les cycles correspondent des congurations mettant en jeu des productions improductives de la forme A B. Ces productions, que lon appelle non-gnratives , eectuent un simple renommage de variable, sans rellement entraner la gnration (immdiate ou indirecte) de symboles terminaux (autres que ceux engendrs par la partie droite de la rgle). Ces productions sont potentiellement nuisibles pour les algorithmes de gnration ou encore danalyse ascendante, qui peuvent tre conduits dans des boucles sans n. Ceci est vident dans le
La procdure esquisse ici est mathmatiquement susante, mais algorithmiquement nave. Une implmentation plus ecace consisterait dterminer de proche en proche lensemble des non-terminaux engendrant un langage non-vide, par une procdure similaire celle dcrite plus loin. Lcriture dun tel algorithme est laisse en exercice.
1

105

cas de productions de type A A, mais apparat galement lorsque lon a des cycles de productions non-gnratives comme dans : A B, B C, C A. Ces cycles doivent donc faire lobjet dun traitement particulier. Fort heureusement, pour chaque mot dont la drivation contient un cycle, il existe galement une drivation sans cycle, suggrant quil est possible de se dbarrasser des cycles sans changer le langage reconnu. Cest prcisment ce quarme le thorme suivant : Thorme 8.1 (limination des cycles). Soit G une CFG, alors il existe une CFG G , quivalente G, qui ne contient aucune production de la forme A B, o A et B sont des non-terminaux. Preuve. Avant de rentrer dans les dtails techniques, donnons lintuition de la construction qui va tre dveloppe dans la suite : pour se dbarrasser dune rgle A B sans perdre de drivation, il sut de rajouter la grammaire une rgle A pour chaque rgle B : ceci permet eectivement bien de court-circuiter la production non-gnrative. Reste un problme rsoudre : que faire des productions B C ? En dautre termes, comment faire pour sassurer quen se dbarrassant dune production non-gnrative, on nen a pas ajout une autre ? Lide est de construire en quelque sorte la clture transitive de ces productions non-gnratives, an de dtecter (et de supprimer) les cycles impliquant de telles productions. Dnition 8.4. B V drive immdiatement non-gnrativement de A dans G si et seulement si A est une production de G. On notera A G B.

B drive non-gnrativement de A dans G, not A G B si et seulement si X1 . . . Xn dans V tels que A G X1 . . . G Xn G B Pour chaque variable A, il est possible, par un algorithme de parcours du graphe de la relation G , de dterminer de proche en proche CA = {A} {X V, A G X}. Construisons alors G selon : G a le mme axiome, les mmes terminaux et non-terminaux que G A est une production de G si et seulement sil existe dans G une production X , avec X CA et V . Cette condition assure en particulier que G est bien sans production non-gnrative. En dautres termes, on remplace les productions X de G en court-circuitant (de toutes les manires possibles) X. Montrons alors que G est bien quivalente G. Soit en eet D une drivation gauche minimale dans G, contenant une squence (ncessairement sans cycle) maximale de productions non-gnratives X1 . . . Xk suivie dune production gnrative Xk . Cette squence peut tre remplace par X1 , qui par construction existe dans G . Inversement, toute drivation dans G ou bien ninclut que des productions de G, ou bien inclut au moins une production A qui nest pas dans G. Mais alors il existe dans G une squence de rgles non-gnratives A ...X et la drivation D existe galement dans G. On notera que contrairement lalgorithme dlimination des variables inutiles, cette transformation a pour eet de modier (en fait daplatir) les arbres de drivation : G et G ne sont que faiblement quivalentes. Pour illustrer le fonctionnement de cet algorithme, considrons la grammaire de la Table 8.2. Le calcul de la clture transitive de G conduit aux ensembles suivants : CS CA CB CC = {S, A, B, C} = {A, B, C} = {B, C} = {B, C}

La grammaire G contient alors les productions listes dans la Table 8.3, qui correspondent aux quatre seules productions gnratives : a aB, B bb, C aAa, C Aa. 106

S A AB CB AB B bb

S B B C A aB C Aa C aAa

T. 8.2 Une grammaire contenant des productions non-gnratives S aB S bb S aAa S Aa B bb B aAa B Aa A aB A bb A aAa A Aa C aAa C Aa C bb

T. 8.3 Une grammaire dbarrasse de ses productions non-gnratives

8.1.4

Productions

Si lon accepte la version librale de la dnition des grammaires CF (cf. la discussion de la section 4.2.6), un cas particulier de rgle licite correspond au cas o la partie droite dune production est vide : A . Ceci nest pas gnant en gnration et signie simplement que le non-terminal introduisant peut tre supprim de la drivation. Pour les algorithmes danalyse, en revanche, ces productions particulires peuvent singulirement compliquer le travail, puisque lanalyseur devra tout moment examiner la possibilit dinsrer un non-terminal. Il peut donc tre prfrable de chercher se dbarrasser de ces productions avant denvisager doprer une analyse : le rsultat suivant nous dit quil est possible doprer une telle transformation et nous montre comment la mettre en uvre. Thorme 8.2 (Suppression des productions ). Si L est un langage engendr par G, une grammaire CF telle que toute production de G est de la forme : A , avec ventuellement vide, alors L peut tre engendr par une grammaire G = (V {S }, , , S , P ) dont les productions sont soit de la forme A , avec non-vide, soit S et S napparat dans la partie droite daucune rgle. Ce rsultat dit deux choses : dune part que lon peut liminer toutes les production sauf peut-tre une (si L(G)), dont la partie gauche est alors laxiome ; dautre part que laxiome lui-mme peut tre rendu non-rcursif (ie. ne gurer dans aucune partie droite). Lintuition du premier de ces deux rsultats sexprime comme suit : si S drive , ce ne peut tre quau terme dun enchanement de productions nimpliquant que des terminaux qui engendrent . En propageant de manire ascendante la proprit de driver , on se ramne une grammaire quivalente dans laquelle seul laxiome drive (directement) . Preuve : Commenons par le second rsultat en considrant le cas dune grammaire G admettant un axiome rcursif S. Pour obtenir une grammaire G (faiblement) quivalente, il sut dintroduire un nouveau non-terminal S , qui sera le nouvel axiome de G et une nouvelle production : S S. Cette transformation naecte pas le langage engendr par la grammaire G. Supposons alors, sans perte de gnralit, que laxiome de G est non-rcursif et intressons-nous 107

lensemble V des variables A de G telles que le langage engendr par A, LA (G), contient . Quels sont-ils ? Un cas vident correspond aux productions A . Mais peut galement se dduire depuis A par deux rgles A , condition que tous les symboles de soient eux-mmes dans V . On reconnat sous cette formulation le problme du calcul de lensemble NULL que nous avons dj tudi lors de la prsentation des analyseurs LL (voir en particulier la section 7.1.3). Une fois V calcul, la transformation suivante de G conduit une grammaire G faiblement quivalente : G contient les mmes axiome, non-terminaux et terminaux que G. De surcrot, G contient toutes les productions de G nimpliquant aucune variable de V . Si maintenant G contient une production A et inclut des lments de V , alors G contient toutes les productions de type A , o sobtient depuis en supprimant une ou plusieurs variables de V . Finalement, si S est dans V , alors G contient S . G ainsi construite est quivalente G : notons que toute drivation de G qui ninclut aucun symbole de V se droule lidentique dans G . Soit maintenant une drivation impliquant un symbole de V : soit il sagit de S G et la production S

permet une drivation quivalente dans G ; soit il sagit dune drivation S G G G u, avec u et contient au moins un symbole X de V , mais pas . Mais pour chaque X de , soit X engendre un facteur vide de u, et il existe une production de G qui se dispense dintroduire ce non-terminal dans ltape G ; soit au contraire X nengendre pas un facteur vide et la mme drivation existe dans G . On conclut donc que L(G) = L(G ). Cette procdure est illustre par les grammaires de la Table 8.4 : G contenant deux terminaux qui drivent le mot vide (V = {A, B}), les productions de G se dduisent de celles de G en considrant toutes les manires possibles dviter davoir utiliser ces terminaux. Productions de G S ASB | c A aA | B B b| Productions de G S ASB | AS | SB | S | c A aA | a | B B b

T. 8.4 Une grammaire avant et aprs limination des productions

8.1.5

limination des rcursions gauches directes

On appelle directement rcursifs les terminaux A dune grammaire G qui sont tels que A A (rcursion gauche) ou A A (rcursion droite). Les productions impliquant des rcursions gauches directes posent des problmes aux analyseurs descendants, qui peuvent tre entrans dans des boucles sans n (cf. les sections 6.3 et 7.1). Pour utiliser de tels analyseurs, il importe donc de savoir se dbarrasser de telles productions. Nous nous attaquons ici aux rcursions gauches directes ; les rcursions gauches indirectes seront traites plus loin ( la section 8.2.2). Il existe un procd mcanique permettant dliminer ces productions, tout en prservant le langage reconnu. Lintuition de ce procd est la suivante : de manire gnrique, un terminal rcursif gauche est impliqu dans la partie gauche de deux types de production : celles qui sont eectivement rcursives gauche et qui sont de la forme : A A1 | A2 . . . | An et celles qui permettent dliminer ce non-terminal, et qui sont de la forme : A 1 | 2 . . . | m o le premier symbole xi de i nest pas un A. 108

Leet net de lutilisation de ces productions conduit donc des drivations gauches de A dans lesquelles on accumule droite de A un nombre arbitraire de i ; llimination de A introduisant en tte du proto-mot le symbole (terminal ou non-terminal) x j . Formellement : A G Ai1 G Ai2 i1 . . . G Ain . . . i1 Llimination de A par la production A j conduit un proto-mot j in . . . i1 dont le symbole initial est donc x j . Le principe de la transformation consiste produire x j sans dlai et simultanment transformer la rcursion gauche (qui accumule simplement les i ) en une rcursion droite. Le premier de ces buts est servi par lintroduction dun nouveau non-terminal R dans des productions de la forme : A 1 | 2 . . . | m | 1 R . . . m R La rcursivit du terminal A est prserve par la nouvelle srie de productions : R 1 R | 2 R . . . n R | 1 | 2 . . . | n On vrie, par les techniques habituelles de preuve (eg. par induction sur la longueur des drivations) que cette transformation produit bien une grammaire (faiblement) quivalente la grammaire de dpart. En guise dillustration, reprenons la grammaire des expressions arithmtiques, entrevue la section 7.1.2 lors de notre prsentation des analyseurs LL(1). Cette grammaire, qui contient deux terminaux directement rcursifs gauche, est rappele2 dans la Table 8.5. S S F | F F F/T | T T (S) | D D0 | . . . | 9 | 0D | . . . | 9D T. 8.5 Une grammaire pour les expressions arithmtiques Le premier non-terminal traiter est S, qui contient une rgle directement rcursive et une rgle qui ne lest pas. On introduit donc le nouveau symbole S , ainsi que les deux productions : S FS | F et S FS | F. Le traitement du symbole F se droule de manire exactement analogue.

8.2

Formes normales

La notion de forme normale dune grammaire rpond la ncessit, pour un certain nombre dalgorithmes de parsage, de disposer dune connaissance a priori sur la forme des productions de la grammaire. Cette connaissance est exploite pour simplier la programmation dun algorithme de parsage, ou encore pour acclrer lanalyse. Les principales formes normales (de Chomsky et
A une dirence prs, et de taille : nous utilisons ici les oprateurs et /, qui sont ceux qui sont associatifs par la gauche et qui justient lcriture dune grammaire avec une rcursion gauche. Si lon avait que + et , il surait dcrire les rgles avec une rcursion droite et le tour serait jou !
2

109

de Greibach) sont dcrites dans les sections qui suivent. On verra que les algorithmes de mise sous forme normale construisent des grammaires faiblement quivalentes la grammaire dorigine : les arbres de drivation de la grammaire normalise devront donc tre transforms pour reconstruire les drivations (et les interprtations) de la grammaire originale.

8.2.1

Forme normale de Chomsky

Thorme 8.3 (Forme normale de Chomsky). Toute grammaire hors-contexte admet une grammaire faiblement quivalente dans laquelle toutes les productions sont soit de la forme A BC, soit de la forme A a, avec A, B, C des non-terminaux et a un terminal. Si, de surcrot, S G , alors la forme normale contient galement S . Cette forme est appele forme normale de Chomsky , abrge en CNF conformment la terminologie anglaise (Chomsky Normal Form). Preuve : Les rsultats de simplication obtenus la section 8.1 nous permettent de faire en toute gnralit lhypothse que G ne contient pas de production autre que ventuellement que S et que si A X est une production de G, alors X est ncessairement terminal (il ny a plus de production non-gnrative). La rduction des autres productions procde en deux tapes : elle gnralise tout dabord lintroduction des terminaux par des rgles ne contenant que ce seul lment en partie droite ; puis elle ramne toutes les autres productions la forme normale correspondant deux non-terminaux en partie droite. Premire tape : construisons G = (V , , S, P ) selon : V contient tous les symboles de V ; pour tout symbole a de , on ajoute une nouvelle variable Aa et une nouvelle production Aa a. toute production de P de la forme A a est copie dans P toute production A X1 . . . Xk , avec tous les Xi dans V est copie dans P ; soit A X1 ...Xm contenant au moins un terminal : cette production est transforme en remplaant chaque occurrence dun terminal a par la variable Aa correspondante. Par des simples raisonnements inductifs sur la longueur des drivations, on montre que pour toute variable de G, A G u si et seulement si A G u, puis lgalit des langages engendrs par ces deux grammaires. En eet, si A u = u1 . . . ul est une production de G, on a dans G : A Au1 . . . Aul

u1 Au2 . . . Aul . . . G

Supposons que cette proprit soit vraie pour toutes les drivations de longueur n et soit A et u tels que A u en n + 1 tapes. La premire production est de la forme : A x1 A1 x2 A2 . . . Ak , o chaque xi ne contient que des terminaux. Par hypothse de rcurrence, les portions de u engendrs dans G par les variables Ai se drivent galement dans G ; par construction chaque xi se drive dans G en utilisant les nouvelles variables Axi , donc A G similaire. u. La rciproque se montre de manire

Seconde phase de la procdure : les seules productions de G dans lesquelles apparaissent des terminaux sont du type recherch A a ; il sagit maintenant transformer de G en G de manire que toutes les productions qui contiennent des non-terminaux en partie droite en contiennent exactement 2. Pour aboutir ce rsultat, il sut de changer toutes les productions de type A B1 ...Bm , m 3 dans G par lensemble des productions suivantes (les non-terminaux Di sont crs pour loccasion) : {A B1 D1 , D1 B2 D2 , ... , Dm2 Bm1 Bm }. De nouveau, il est relativement direct de montrer que le langage engendr par G est le mme que celui engendr par G. 110

Les arbres de drivation des grammaires CNF ont une forme extrmement caractristique, puisque chaque nud interne de larbre a soit un ls unique et ce ls est une feuille portant un symbole terminal ; soit exactement deux ls et ces deux ls sont des variables. Comme exemple dapplication, entreprenez la mise sous forme normale de Chomsky de la grammaire dcrite la Table 8.6. Le rsultat auquel vous devez aboutir est donn dans la Table 8.7. S bA Aa A aS A bAA S aB Bb B bS B aBB

T. 8.6 Une grammaire Chomsky-normaliser S A A A D1 Aa Aa A a Aa S Aa D1 AA a


S B B B D2 Ab

Ab B b A S b Aa D2 BB b

T. 8.7 Une grammaire Chomsky-normalise En plus de son importance thorique, cette forme normale prsente de nombreux avantages : un premier avantage est que les terminaux sont introduits par des productions ddies, de type A a (au moins une par terminal). Ceci savre particulirement bienvenu pour les algorithmes de parsage ascendant. La mise sous CNF facilite galement les tapes de rduction des analyseurs ascendants, puisquil sut simplement de regarder les couples de non-terminaux successifs pour juger si une telle opration est possible. En revanche, cette transformation conduit en gnral une augmentation sensible du nombre de productions dans la grammaire. Cette augmentation joue dans le sens dune pnalisation gnrale des performances des analyseurs.

8.2.2

Forme normale de Greibach

La transformation dune grammaire en une grammaire sous forme normale de Greibach gnralise en un sens le procd dlimination des rcursions gauches directes (cf. la section 8.1.5), dans la mesure o elle impose une contrainte qui garantit que chaque production augmente de manire strictement monotone le prxe terminal du proto-mot en cours de drivation. la dirence de la forme normale de Chomsky, lexistence de la forme normale de Greibach est plus utilise pour dmontrer divers rsultats thoriques que pour fonder des algorithmes danalyse. La forme normale de Greibach est dnie dans le thorme suivant : Thorme 8.4 (Forme normale de Greibach). Tout langage hors-contexte L ne contenant pas peut tre engendr par une grammaire dont toutes les productions sont de la forme A a, avec a un terminal et est une squence de non-terminaux (ventuellement vide). Cette grammaire est appele forme normale de Greibach , en abrg GNF, conformment la terminologie anglaise.

111

Si L contient , alors ce rsultat reste valide, en ajoutant toutefois une rgle S depuis laxiome, comme dmontr la section 8.1.4.

, qui drive

Preuve : La preuve de lexistence dune GNF repose, comme prcdemment, sur un algorithme permettant de construire explicitement la forme normale de Greibach partir dune grammaire CF quelconque. Cet algorithme utilise de deux procds dj prsents, qui transforment une grammaire CF en une grammaire CF faiblement quivalente. Le premier procd est celui dcrit au lemme 8.1 et consiste ajouter une production A

si lon observe dans G la drivation A G . Le second procd est dcrit dans la section 8.1.5 et consiste transformer une rcursion gauche en rcursion droite par ajout dun nouveau nonterminal. Lalgorithme de construction repose sur une numrotation arbitraire des variables de la grammaire V = {A0 . . . An }, laxiome recevant conventionnellement le numro 0. On montre alors que : Lemme 8.3. Soit G une grammaire CF. Il existe une grammaire quivalente G dont toutes les productions sont de la forme : Ai a, avec a Ai A j , et A j est class strictement aprs Ai dans lordonnancement des non-terminaux (j > i). La procdure de construction de G est itrative et traite les terminaux dans lordre dans lequel ils sont ordonns. On note, pour dbuter, que si lon a pris soin de se ramener une grammaire dont laxiome est non rcursif, ce que lon sait toujours faire (cf. le rsultat de la section 8.1.4), alors toutes les productions dont S = A0 est partie gauche satisfont par avance la proprit du lemme 8.3. Supposons que lon a dj trait les non-terminaux numrots de 0 i 1, et considrons le non-terminal Ai . Soit Ai une production dont Ai est partie gauche, telle que dbute par une variable A j . Trois cas de gures sont possibles : (a) j < i : A j est class avant Ai ; (b) j = i : A j est gale Ai ; (c) j > i : A j est class aprs Ai ; Pour les productions de type (a), on applique itrativement le rsultat du lemme 8.2 en traitant les symboles selon leur classement : chaque occurrence dun terminal A j , j < i est remplace par lexpansion de toutes les parties droites correspondantes. Par lhypothse de rcurrence, tous les non-terminaux ainsi introduits ont ncessairement un indice strictement suprieur i. Ceci implique qu lissue de cette phase, toutes les productions dduites de Ai sont telles que leur partie droite ne contient que des variables dont lindice est au moins i. Toute production dont le coin gauche nest pas Ai satisfait par construction la proprit du lemme 8.3 : laissons-les en ltat. Les productions dont le coin gauche est Ai sont de la forme Ai Ai , sont donc directement rcursives gauche. Il est possible de transformer les Ai - productions selon le procd de la section 8.1.5, sans introduire en coin gauche de variable prcdant Ai dans le classement. En revanche, cette procdure conduit introduire de nouveaux non-terminaux, qui sont conventionnellement numrots depuis n + 1 dans lordre dans lequel ils sont introduits. Ces nouveaux terminaux devront subir le mme traitement que les autres, traitement qui est toutefois simpli par la forme des rgles (rcusions droites) dans lesquels ils apparaissent. Au terme de cette transformation, tous les non-terminaux dindice suprieur i + 1 satisfont la proprit du lemme 8.3, permettant la rcurrence de se poursuivre. Notons qu lissue de cette tape de lalgorithme, cest--dire lorsque le terminal dindice maximal n + p a t trait, G est dbarrasse de toutes les chanes de rcursions gauches : on peut en particulier envisager de mettre en uvre des analyses descendantes de type LL et satteler la construction de la table danalyse prdictive correspondante (voir la section 7.1). Cette premire partie de la construction est illustre par la Table 8.8. 112

tat initial

Traitement de A1

Traitement de A2 (premire tape)

Traitement de A2 (seconde tape)

Traitement de A3

Traitement de A4

S A1 A2 S A1 A2 R1 S A1 A2 R1 S A1 A2 A3 A4 S A1 A2 A3 A4 S A1 A2 A3 A4

A2 A2 A1 A1 | a A1 A1 | A2 A1 | b A2 A2 a | aR1 A3 est nouveau A1 A1 | A2 A1 | b A1 | A1 R1 rcursion droite A2 A2 aA1 | aA1 R1 aA1 A1 | aA1 R1 A1 | A2 A1 | b A1 | A1 R1 A2 A2 aA1 | aA1 A3 aA1 A1 | aA1 A3 A1 | b | aA1 A1 A4 | aA1 A3 A1 A4 | bA4 A1 | A1 A3 A1 | A1 A4 A2 A2 aA1 | aA1 A3 aA1 A1 | aA1 A3 A1 | b | aA1 A1 A4 | aA1 A3 A1 A4 | bA4 A4 est nouveau aA1 | aA1 A3 | aA1 A3 A3 A1 | A1 A4 A2 A2 aA1 | aA1 A3 aA1 A1 | aA1 A3 A1 | b | aA1 A1 A4 | aA1 A3 A1 A4 | bA4 aA1 | aA1 A3 | aA1 A3 A3 aA1 | aA1 A4 | aA1 A3 | aA1 A3 A4

T. 8.8 Une grammaire en cours de Greibach-normalisation Considrons maintenant ce quil advient aprs que lon achve de traiter le dernier non-terminal An+p . Comme les autres, il satisfait la proprit que le coin gauche de toutes les An+p -productions est soit un terminal, soit un non-terminal dindice strictement plus grand. Comme ce second cas de gure nest pas possible, cest donc que toutes les An+p -productions sont de la forme : An+p a, avec a , qui est la forme recherche pour la GNF. Considrons alors les An+p1 productions : soit elles ont un coin gauche terminal, et sont dj conformes la GNF ; soit elles ont An+p comme coin gauche. Dans ce second cas, en utilisant de nouveau le procd du lemme 8.2, il est possible de remplacer An+p par les parties droites des An+p -productions et faire ainsi merger un symbole terminal en coin gauche. En itrant ce processus pour i = n + p i = 0, on aboutit, de proche en proche, une grammaire quivalente la grammaire de dpart et qui, de plus, est elle que chaque partie droite de production dbute par un terminal. Il reste encore liminer les terminaux qui apparatraient dans les queues de partie droite (cf. la mise sous CNF) pour obtenir une grammaire qui respecte les contraintes nonces ci-dessus. Pour complter cette section, notons quil existe des variantes plus contraintes de la GNF, qui constituent pourtant galement des formes normales. Il est en particulier possible dimposer, dans la dnition du thorme 8.4, que toutes les parties droites de production contiennent au plus deux variables : on parle alors de forme normale de Greibach quadratique (Salomaa, 1973, p.202).

113

Deuxime partie

Complments : Algorithmes danalyse

114

Cette partie correspond au cours Complments sur les grammaires de la brique MFI.

115

Chapitre 9

Automates pile et langages dterministes


Dans ce chapitre, nous introduisons un nouveau type dautomate ni, les automates pile. Ces automates constituent une gnralisation des automates nis tudis au chapitre 3. Aprs avoir donn direntes dnitions de ces nouvelles machines, et prcis leur fonctionnement, nous montrons le rsultat principal de ce chapitre : les automates pile (non-dterministes) reconnaissent exactement les langages hors-contexte. Nous compltons ce chapitre par une caractrisation des langages dterministes, et par un nonc de quelques rsultats importants concernant ces langages.

9.1
9.1.1

Automates piles
Concepts

Un exemple introductif Le modle des automates nis soure dune limitation manifeste : sa mmoire du calcul est limite et intgralement rsume par ltat courant de lautomate. En consquence, un automate ni ne peut prendre en compte quun nombre ni de congurations direntes (cf. la discussion de la section 3.3.1). Un moyen simple de contourner cette limitation est de doter lautomate ni dune mmoire innie, que nous allons modliser par une pile1 . Cette pile permet de garder une mmoire (non-borne en taille) des tapes de calculs passes, mmoire qui peut conditionner les tapes de calcul venir. Le calcul dun automate ni tant principalement dni partir de sa fonction de transition, le modle dautomate pile enrichit cette fonction de transition de la manire suivante : (i) il existe un nouvel alphabet ni contenant les symboles qui peuvent tre empils et dpils ; (ii) les transitions sont conditionnes par le symbole trouv en haut de la pile ; (iii) lors dune transition dans lautomate, il est de plus possible de modier (par un push ou un pop ) la pile ; Avant dintroduire formellement ces machines, considrons lautomate ni A de la Figure 9.1, qui reconnat le langage {an bm , n, m > 0} et essayons dtendre ce modle pour en driver un automate pile capable de reconnatre {an bm , m = n > 0}. Lautomate A est incapable de compter le nombre
Rappel : une pile est une structure de donnes sur laquelle nagissent que deux oprations : lempilage dun nouvel lment en haut de la pile (push ) et le dpilage de llment positionn au sommet de la pile (pop ).
1

116

F. 9.1 Un automate pour an bm de a dj vus, ce qui interdit dimposer la contrainte n = m. Conons alors cette tche au mcanisme de pile, en empilant un symbole Z lors de chaque passage dans la boucle de ltat 1 et en dpilant un symbole lors de chaque passage dans la boucle de ltat 2. Si lon impose, de plus, quun calcul russi dans A doit correspondre une pile intgralement vide, alors il apparat que chaque mot reconnu par lautomate ni A augment de la pile est bien tel que le nombre de a est exactement gal au nombre de b. Toute autre situation correspond ou bien un calcul terminant avec une pile non vide (si n > m), ou bien une commande de dpilage dune pile vide (si m > n). La Table 9.1 donne la trace2 du calcul pour lentre aaabbb : Input aaabbb aabbb abbb bbb bb b tat 0 1 1 1 2 2 2 Pile Z ZZ ZZ Z

T. 9.1 Trace du calcul de aaabbb

Lautomate pile Nous pouvons maintenant dnir formellement un automate pile : Dnition 9.1 (Automate pile). Un automate pile (en anglais pushdown automaton, en abrg PDA) est un septuplet M = (, , Z0 , Q, q0 , F, ) o et sont deux alphabets nis, Z0 un symbole distingu de , Q un ensemble ni dtats contenant un tat initial q0 et un sous-ensemble dtats naux F, et est une fonction de Q ( {}) ( {}) vers lensemble des parties de Q ( {}). De manire sous-jacente, un automate pile est essentiellement un automate ni non-dterministe, la dirence prs que la fonction de transition comporte trois arguments : ltat courant, le symbole dentre courant et le symbole courant en haut de la pile, appartenant un inventaire ni (lalphabet de pile). Si (r, Z) est un lment de (q, a, Y), alors lutilisation de cette transition conduira : dpiler Y ; si Y = la transition a lieu indpendamment du symbole en haut de pile, qui reste inchange transiter dans ltat r
2

Attention : la pile est reprsente latralement : le haut de la pile est droite de la page.

117

empiler Z ; si Z = , aucun symbole nest empil. Compte-tenu de cette dnition, un automate ni traditionnel est un automate pile particulier, dni sur un alphabet de pile vide ( = ) et dont toutes les transitions laissent la pile inchange. Comme un automate ni, un automate pile admet une reprsentation graphique sur laquelle les modications de la pile sont reprsentes sous la forme Y/Z. La Figure 9.2 reprsente ainsi un automate pile reconnaissant le langage {an bn }.

/Z

Z /

a /

b /

F. 9.2 Un automate pile pour an bn

Conguration, calculs, langages Si lon appelle conguration de lautomate une description instantane consistant en lindication de ltat courant, du contenu de la pile, et du ruban dentre, alors le calcul dans un PDA est dni comme une succession de congurations c1 . . . cn telles que le passage dune conguration ci la suivante ci+1 corresponde lapplication dune transition tiquete par le symbole courant du ruban dentre a. La possibilit de passage de la conguration ci la conguration ci+1 , qui dnit une relation binaire sur lensemble des congurations, est note par le symbole M . La clture transitive de M , note M , est dnie par : c M c sil existe un ensemble de congurations intermdiaires c = c1 . . . cn = c telles que c1 M c2 . . . M cn . Ltiquette dun calcul est obtenue par concatnation des tiquettes le long du calcul ; un calcul russi est un calcul dbutant dans une conguration initialise en (q0 , Z0 , u) et sachevant dans un tat nal. Ces prliminaires permettent de dnir le langage associ un automate pile. Dnition 9.2. Soit M un automate pile, on note L(M) le langage reconnu par M. L(M) est lensemble des mots de tiquetant un calcul russi. Formellement, L(M) = {u | (q0 , Z0 , u) Variantes La dnition prcdente admet de nombreuses variantes, qui ne changent en rien lexpressivit du modle. En particulier : il est possible de dnir comme une fonction de Q ( {}) ( {}) vers lensemble des parties nies de Q : selon cette variante, il est possible de remplacer dun coup le symbole en haut de la pile par un mot de taille quelconque. La dnition 9.1 apparat comme un cas particulier de ce modle, auquel on se ramne simplement en rajoutant partout o cest ncessaire des transitions spontanes qui permettent de
M

(q, , ), q F}

118

dcomposer en une srie de transitions lmentaires les transitions empilant des mots de longueur suprieure 1. Sauf mention explicite du contraire, cest cette version un peu plus librale qui sera utilise par la suite. la condition darrt qui caractrise un calcul russi peut galement tre modie. Il est en particulier possible de dnir un calcul russi comme : un calcul se terminant avec une pile vide (ce qui revient implicitement considrer que tout tat est nal) : on parle dacceptation par pile vide ; par opposition lacceptation par tat nal, qui est ici le mode dacceptation par dfaut. En revanche, pour un PDA donn, dnir un calcul russi dune manire ou dune autre change naturellement le langage reconnu. Vous pourrez vous en persuader en faisant varier le mode dacceptation pour lautomate pile dont les transitions sont dans la Table 9.2, et en considrant pour les deux modes possibles dacceptation les langages correspondants. = {a, b}, Q = {q0 , q1 , q2 , q3 }, = {X1 , X2 }, Z0 = X1 , F = {q3 } (a, q0 , X1 ) =(q1 , X2 X1 ) (a, q0 , X2 ) =(q2 , X2 X2 X1 ) (, q1 , X1 )=(, q3 ) (a, q1 , X2 ) =(q1 , X2 X1 ) (a, q2 , X1 ) =(q2 , X2 X2 X1 ) (a, q0 , X1 ) =(q1 , X2 X1 ) (, q2 , X1 )=(q3 , ) (b, q3 , X2 ) =(q3 , ) T. 9.2 Un automate pile reconnaissant des langages variables La dmonstration de lquivalence entre PDAs reconnaissant par pile vide et PDA reconnaissant par tat nal sesquisse comme suit. Si M reconnat L en acceptant par tat nal, alors il sut dajouter M : (i) un nouvel tat initial q 0 et un nouveau symbole initial de pile Z 0 ; ainsi quune transition de q 0 vers q0 empilant Z0 ; (ii) un tat de vidange de pile qv , vers lequel il existe une transition depuis tout tat nal de M. qv est le seul tat dans lequel Z 0 est dpil. (iii) pour le reste, M simule le comportement de M ; On obtient ainsi un automate qui clairement reconnat le mme langage que L en acceptant par pile vide. Inversement, si M reconnat L par pile vide, alors on construit un PDA quivalent M en faisant en sorte que : (i) dempiler initialement un nouveau symbole, Z 0 , absent de lalphabet de pile de M ; (ii) tout tat de M admette des transitions spontanes vers un nouvel tat F, qui est le seul tat nal de M . Ces transitions ne sont utilisables que lorsque Z 0 gure en haut de la pile. (iii) pour le reste, M simule le comportement de M ; La condition (iii) permet de garantir que, lorsquun calcul russit (par vidage de la pile) dans M, la pile de M est rduite au seul symbole Z 0 . Il est alors possible de transiter vers ltat nal de M et donc de russir le calcul galement dans M .

9.2
9.2.1

Les langages des automates pile


PDA et langages hors contexte

Le rsultat principal de cette section snonce par le thorme 9.1. Thorme 9.1. Les langages reconnus par les automates pile sont exactement les langages hors-contexte. La dmonstration de ce rsultat se fait en deux temps. Montrons tout dabord que si L est engendr 119

par une CFG G = (, V, S, P), alors il existe un PDA M qui reconnat L. Sans perte de gnralit, on peut supposer que G est sous forme normale de Greibach (voir section 8.2.2), garantissant que toute production de G est de la forme A a, avec a et ( V ) . Construisons alors le PDA mono-tat M = (, V, S, {q0 }, q0 , F, ), dont les transitions sont dnies de la manire suivante (rappelons que R dnote le miroir de ) : (q0 , R ) (q0 , a, A) si et seulement si (A a) P Essentiellement, cette construction trs simple fait porter tout le poids de la modlisation sur la pile, qui est utilise pour simuler les drivations dans G. Le langage reconnu (avec acceptation par pile vide) par la machine M est exactement L. En eet, on montre par rcurrence sur la longueur de u, lquivalence suivante : S G u si et seulement si (q0 , S, u) (q0 , R , )

Cette quivalence est vrie pour | u | = 1 par dnition de M. Supposons quelle est vraie pour tous les mots jusqu la longueur n et considrons le mot u de longueur n + 1. Posons alors u = va et dcomposons une drivation gauche de w = ux en : S G vA G va. Lhypothse de rcurrence nous garantit quil existe, pour lentre v, un calcul dans M aboutissant dans ltat q0 , et tel que la pile soit gale R A. La production A a de P implique lexistence dans M dune transition (q0 , a, A) vers q0 et empilant R . Le calcul dans M peut donc se poursuivre, aboutissant une conguration (q0 , R R , ). On dduit immdiatement que les mots de L(G), ie. qui sont tels que S u sont prcisment les mots reconnus par pile vide dans L(M) et rciproquement. Montrons maintenant la proprit rciproque, savoir que si un langage est reconnu par un PDA M, alors il existe une grammaire G qui lengendre. La preuve repose sur la construction suivante. Soit M = (, , Z0 , Q, q0 , F, ) un PDA reconnaissant L, on construit sur la grammaire G dnie par : les non-terminaux de G sont tous les triplets [q, X, r] de Q Q, auxquels on adjoint un axiome S. Il y a donc bien un nombre ni de non-terminaux. P, lensemble des productions de G contient S [q0 , Z0 , q] pour tous les tats q Q. pour chaque transition (q, a, X) contenant (p, Y1 . . . Yl ) de M, on ajoute P toutes les productions de la forme [q, X, p] a[q1 , Y1 , q2 ][q1 , Y2 , q2 ] . . . [ql , Yl , p] pour toutes les valeurs possibles de p et de q2 . . . ql . Lorsque Y1 . . . Yl = , on ajoute dans P la seule production [q, A, p] a. Lintuition de cette construction est la suivante : elle vise ce que les drivations gauches dans G dun analyseur descendant lisant le mot u simulent (dans la pile de lanalyseur) le comportement du PDA lisant cette mme entre. Formellement, nous allons alors montrer que pour tout symbole de pile X : (q, X, u)
M L

(p, , ) si et seulement si [q, A, p] G u

Commenons par montrer limplication directe, qui repose sur une induction sur la longueur des calculs. Si (q, X, u) (p, , ), cest donc que (p, ) appartient (q, X, u), et que donc il existe une production [q, X, p] u dans P. Considrons donc un calcul de k + 1 tapes dans M, dbutant par (q, X, au) (p, Y1 . . . Yl , u), et qui au nal conduit (r, , ). Deux remarques permettent de conclure : u se factorise en u = u1 . . . ul , avec : qi , qi+1 , (qi , Yi , ui ) M (qi+1 , , ) ; puisque chacun de ces calculs comprend au plus k tapes, lhypothse de rcurrence nous assure que : qi , qi+1 , [qi , Yi , qi+1 ] G ui ; 120

la premire tape de calcul implique lexistence dune transition (q, a, X) contenant (p, Y1 . . . Yl ) et donc de productions [q, X, p] a[q1 , B1 , q2 ][q1 , B1 , q2 ] . . . [ql , Bl , p] dans P Il est alors assur que [q, X, p] G au. On dduit que tout mot du langage reconnu par M donnant lieu un calcul [q0 , Z0 , u] [q, , ] appartient galement au langage de G. La rciproque se montre de manire identique par une induction sur la longueur des drivations. Cette partie de la dmonstration est laisse en exercice.

9.3

Les langages dterministes

Un rsultat bien connu concernant les automates nis est que tout automate non-dterministe admet un automate dterministe quivalent, dont la construction peut toutefois entraner une explosion combinatoire du nombre dtats (voir la section 3.1.4). Nous allons le voir dans cette section, cette proprit ne stend pas aux PDA. La contrainte de dterminisme permet alors de dnir ce qui est une sous-classe propre des langages hors-contexte, savoir les langages dterministes.

9.3.1

Automate pile dterministe

Dnition 9.3 (Automate pile dterministe (DPDA)). Un automate pile M est dterministe sil vrie les trois conditions suivantes : q Q, X {}, a : (q, a, X) contient au plus un lment q Q, X {} : (q, , X) contient au plus un lment q Q, X {}, a : soit (q, a, X) est vide, soit (q, , X) est vide Ces conditions visent garantir que les calculs dans le DPDA seectuent de manire dterministe : pour chaque conguration et contenu du ruban dentre, il nexiste quune seule possibilit de dvelopper le calcul, empruntant soit une transition tiquete par un symbole, soit une transition . Une consquence directe est que la reconnaissance dun mot seectue en un temps linaire en fonction de la taille de lentre. Ces prliminaires permettent de dnir le langage associ un automate pile. Dnition 9.4 (Langage dun DPDA). Si M un automate pile dterministe, le langage reconnu par M est : {u | (q0 , Z0 , u) M (q, , ) avec q F} Le point important de cette dnition est que, pour les automates pile dterministes, le seul mode de reconnaissance est la reconnaissance par tat nal. Dans ce cas, il ny pas dquivalence avec la reconnaissance par pile vide, comme lexemple suivant nous le montre. Soit en eet L le langage suivant : L = a {an bn }. Il existe un DPDA qui reconnat L par tat nal et nous allons voir quil ne peut en exister qui le reconnaisse par pile vide. Partons dune premire observation : si u et v sont deux mots de L(M), avec v un prxe propre de u (par exemple u = aaabbb et v = aa), alors le calcul reconnaissant u dbute comme le calcul reconnaissant v ( cause du dterminisme) et ces deux calculs aboutissent une conguration dans laquelle la pile est vide (cest la condition darrt). De manire gnrale, cest le cas dans notre langage de tous les mots de la forme v = ap , qui sont tous reconnus avec une pile vide. Si lon choisit que p > n, avec n le nombre dtats du D, alors le calcul reconnaissant ap passe deux fois par le mme tat qi , aux

121

j-mes et k-imes tapes de calcul, dans une conguration o la pile est toujours vide. Le calcul reconnaissant ap bp est donc de la forme : (q0 , Z0 , )
M

. . . (qi , , ap bp )

(qi , , ap j bp ) . . . (qi , , apk bp ) . . .

. . . (a, , ), q F

Il existe alors un calcul court-circuitant la boucle qi . . . qi , qui reconnat par pile vide apk+ j bp , alors que ce nest pas un mot de L. Dans le cas dterministe, la condition de reconnaissance par pile vide ne permet pas de dnir les mmes langages que la condition de reconnaissance par tat nal ; et cest donc cette dernire dnition que nous nous tiendrons. Il est alors possible de dnir la classe des langages (hors-contexte) dterministes : Dnition 9.5. L est un langage dterministe sil existe un automate pile dterministe qui le reconnat.

9.3.2

Proprits des langages dterministes

Qui sont les dterministes ? Commenons par rassembler les lments pars dont nous disposons pour linstant : tous les rationnels sont certainement dterministes, un automate ni dterministe (sans pile) tant une forme simplie de DPDA ; la section prcdente nous a fait rencontrer au moins un langage CF non rationnel et pourtant dterministe, L = a {an bn } ; La question suivante consiste alors se demander cette classe ne se confond pas nalement avec celle des langages CF. Lexistence de langages CF intrinsquement ambigus nous assure quil nen est rien et que cette classe ne contient certainement pas tous les langages CF. Il est toutefois important de raliser que la notion de dterminisme ne recouvre en rien celle dambigut et quil existe donc des langages qui sont non dterministes sans pour autant tre ambigus. Cest le cas, en particulier, du langage {an bn , n > 0} {an b2n , n > 0}, pour lequel il est impossible de dcider de manire dterministe si les b doivent se lire par paire ou isolment. Il faudrait, pour pouvoir faire le bon choix, avoir lu au moins autant de b que de a, soit se doter dune capacit de regard avant non borne. Pourtant, ce langage nest pas ambigu, car il est engendr par la grammaire (non-ambigu) dont les productions sont {S aTb, T , S aUbb, U }. La proprit de dterministe porte donc sur "lanalysabilit" dun langage, alors la proprit dambigut caractrise lassociation (bi-univoque ou non) dun mot et dune structure (un arbre de drivation). Clture La classe des langages dterministes est donc une sous-classe propre des langages CF. Il est de surcrot possible de montrer que : 1. le complmentaire dun langage dterministe est galement dterministe 2. lintersection entre un langage dterministe et un langage rationnel est dterministe 3. si L est dterministe, alors Min(L), dni par Min(L) = {u L tq. Pre f (u) L = {u}}, est galement dterministe ; 4. si L est dterministe, alors Max(L), dni par Max(L) = {u L tq. u Pre f (x) x galement dterministe. L}, est

En revanche, la classe des langages dterministes nest pas stable pour les oprations dintersection, dunion, de concatnation et dtoile. 122

9.3.3

Dterministes et LR

Commenons par revenir sur la notion de langage LR(k), en introduisant une dnition qui sexprime directement par une condition sur les drivations dune grammaire engendrant G, indpendamment donc de toute stratgie danalyse particulire. Dans cette section, comme dans toute la discussion sur les analyseurs LR, # dnote un symbole terminal supplmentaire distinct de tous les symboles de et qui sert marquer la n de lentre. Dnition 9.6 (Langages LR(k)). Un langage L est LR(k) sil existe une grammaire G et un entier k tels que la condition suivante est vraie pour tout proto-mot uv, avec , deux proto-mots et u et v deux mots de tels que | u | > k3 : L L S#k Auv uv et L L S#k Bw ut

( = , A = B, w = ut)

On retrouve, dans cette dnition, lide principale de lanalyse (dterministe, ascendante) LR prsente la section 7.2 : dans une drivation droite, la connaissance de la pile () et des k symboles terminaux (non-encore analyss) qui la suivent (u) sut dterminer sans ambigut possible lopration appliquer dans une drivation droite qui russira (ici A ). Par exemple, la grammaire de la ?? nest pas LR(1) (elle nest mme LR(k) pour aucune valeur de k) puisque dans cette grammaire on observe simultanment : L L S# aaSbbb# aaaSbbbb# et L L S# aaaSbbbb# aaaSbbbb# qui viole la condition de la dnition 9.6 pour A = B = S, = aa, = aSb, = aaa et u = b. En dautres termes, avec cette grammaire, aprs avoir empil n a et un S, on se sait pas si le b qui suit doit tre appari avec un des a (rduction S aSb) ou bien rduit tout seul (rduction S Sb). Il est alors possible de dmontrer les deux rsultats fondamentaux suivants, qui expriment lquivalence entre langages dterministes et langages LR. si L est reconnu par une grammaire LR(k) alors L est dterministe si L est dterministe, alors il existe une grammaire LR(1) qui engendre L

Le symbole #, non-inclus dans , marque la n de linput.

123

Chapitre 10

Complments sur les langages hors-contextes


Ce chapitre introduit un certain nombre de nouveaux rsultats concernant les langages CF, qui compltent les rsultats et caractrisations noncs au chapitre 5. Dans un premier temps, nous revenons sur la question de la dmarcation entre langages rationnels et langages hors-contextes, en tudiant la question des rcursions centrales et de lenchssement. Nous y verrons en particulier que lexistence de drivations contenant des rcursions centrales ne sut pas caractriser les langages CF. Nous donnons ensuite un autre clairage sur les classes de langage, en tudiant les lois de croissance des nombres doccurrences de symboles terminaux dans les mots dun langage CF ; nous verrons que ce point de vue ne permet pas non plus de dmarquer rationnels et horscontexte. Nous examinons enn de plus prs une troisime proprit des langages CF, savoir leur capacit modliser des appariements entre paires de symboles, et montrons, en tudiant le thorme de Chomsky et Schtzenberger, que cest cette proprit qui fondamentalement confre aux langages CF un surcrot dexpressivit par rapport aux langages rationnels.

10.1

Complments sur les langages CF

Nous revenons dans cette section sur la caractrisation de la frontire entre langage rationnel et langage CF, en prsentant principalement deux rsultats. Le premier est que lintersection dun langage CF et dun langage rationnel reste CF. Le second prsente une proprit ncessaire pour quun langage soit strictement hors-contexte, portant sur le concept denchssement dun nonterminal.

10.1.1

Langages hors contextes et rationnels

Tout dabord une nouvelle preuve dun rsultat dj connu et qui se dmontre gnralement en faisant appel la notion dautomate pile (voir le chapitre 9). La preuve que nous dveloppons ici repose intgralement sur le formalisme de grammaire. Thorme 10.1. Lintersection dun langage rationnel L1 et dun langage hors-contexte L2 est un langage hors-contexte. Si de plus L2 nest pas ambigu, alors L1 L2 nest pas ambigu. Preuve. Soit L1 un langage rationnel et A1 = (, Q1 , q0 , F , ) lautomate canonique (dterministe 1 1 1 minimal) de L1 ; soit L2 un langage hors-contexte et G2 = (, V2 , S2 , P2 ) une grammaire CF sous 124

forme normale de Chomsky (voir la section 8.2.1) pour L2 . Sans perte de gnralit, nous supposons que ni L1 ni L2 ne contiennent . Nous supposons galement que A1 contient un unique tat nal qF ; si cela nest pas le cas, on traitera sparment chacun des langages obtenus en xant tour 1 tour comme unique tat nal chaque lment F1 ; lunion de ces langages tant gal L1 . Nous construisons pour lintersection L1 L2 la grammaire G suivante : les non-terminaux de G sont tous les triplets de la forme (q, r, X), o q et r sont des tats de Q1 , et X un symbole (terminal ou non-terminal) de G2 . le symbole initial de G est (q0 , qF , S ) 1 1 2 les productions de G sont de trois sortes : (i) (p, q, A) (p, r, B)(r, q, C) pour tout r dans Q1 , et toute production A B C de G2 ; (ii) (p, q, A) (p, q, a) pour toute production A a de G2 ; (iii) (p, q, a) a si et seulement si 1 (p, a) = q Lide de cette construction est la suivante : les productions de type (i) et (ii) simulent exactement le fonctionnement de G2 , la dirence prs quelles engendrent des squences de triplets (p, q, a), qui sont des non-terminaux pour G. La seule possibilit pour liminer ces non-terminaux consiste appliquer des productions de type (iii), qui simulent elles le comportement de lautomate A1 . Une squence de non-terminaux ne peut alors tre produite que si elle est de prime abord engendre par la grammaire, associe une suite quelconque dtats ; et sil existe une suite dtats simulant le comportement de lautomate. La spcication du symbole initial de la grammaire garantit de surcrot que cette suite dtats commence dans q0 et sachve dans qF . 1 1 Pour montrer formellement ce rsultat, soit u = u1 . . . un un lment de lintersection L1 L2 . Il existe une drivation gauche de u dans G2 , ce qui implique que :
F 0 F (q0 1 , q1 , S) G (q1 , q1 , u1 ) . . . (qi , qi+1 , ui+1 ) . . . (qn1 , q1 , un )

Ce rsultat vaut pour toute squence dtats (q0 . . . qi . . . qF ). u tant galement dans L1 , il existe un 1 1 0 F calcul de (q1 , u) aboutissant q1 , ce qui entrane directement que u est dans L(G). La rciproque se dmontre de manire similaire. La seconde partie du thorme dcoule directement de (i) lunicit de la drivation permettant daboutir dans G la suite de pr-terminaux (p0 , q0 , a0 . . . (pn , qn , an ) et de (ii) lunicit de la suite dtats calculant un mot u dans A1 . (i) permet de dduire que chaque squence de symboles prterminaux admet dans G une drivation gauche unique ; (ii) permet darmer que, pour tout mot u, il existe une unique suite de pr-terminaux qui permet de le driver, correspondant la squence dtats calculant u dans A1 .

10.1.2

Enchssement

Comme nous lenseigne le lemme de pompage pour les langages CF (voir la section 5.3.1), les mots des langages hors-contexte se caractrisent par la possibilit ditration simultane de facteurs situs de part et dautre dun facteur central. Pour tout langage CF inni, il existe un entier k tel que, pour mot z de L plus long que k se dcompose en uvwxy avec vx et, pour tout i, uvi wxi y est galement dans L. Les grammaires linaires gauche ou droite, introduites la section 4.2.4, sont telles que la drivation ne se dveloppe que dun seul ct : chaque proto-phrase ne contient quun seul non-terminal, qui est soit le plus gauche (grammaires linaires gauche), soit le plus droite (linarit droite). En particulier, une grammaire linaire gauche ou droite ne peut contenir de 125

sous-drivation de la forme A A avec simultanment et non vides. Dans la mesure o ces grammaires reconnaissent exactement les langages rationnels (voir la section 4.2.4), il est tentant de chercher du ct des rcursions centrales la proprit caractristique des grammaires qui engendrent des langages strictement CF. Cest ce que nous chercherons faire dans cette section, en introduisant la notion denchssement. Dnition 10.1 (Enchssement). Une grammaire G est dite self-embedding sil existe un terminal utile A tel que : A A, o et sont des squences non-vides de terminaux1 . Sil est clair quaucune grammaire linaire gauche ou droite nest self-embedding, cette proprit ne sut pourtant pas garantir quune grammaire hors-contexte nengendre pas un langage rationnel. Ainsi, par exemple, la Table 10.1, bien que contenant une drivation S aSb, engendret-elle {an bm , n > 0, m > 0}, qui est un langage parfaitement rationnel. SaS SSb Sab T. 10.1 Une grammaire self-embedding pour an bm Le fait, pour une grammaire, dtre self-embedding ne garantit pas quelle quelle nengendre un langage strictement CF. Nous allons toutefois montrer que cette proprit est ncessaire, cest-dire prcisment que si une grammaire G ne possde pas cette proprit, alors elle engendre un langage qui est rationnel. Thorme 10.2. Soit G une grammaire non self-embedding, alors il existe une grammaire G linaire droite qui est (fortement) quivalente G, impliquant que L(G) est un langage rationnel. La premire partie de la dmonstration consiste noter que si G nest pas self-embedding, alors la mise en forme normale de Greibach de G conduit une grammaire qui nest pas non plus selfembedding. Lalgorithme de mise sous forme normale de Greibach (voir la section 8.2.2) repose en eet sur lapplication itre de deux transformations (limination des rcursions gauches, application de la "distributivit" gauche) qui ni lune ni lautre nintroduisent des non-terminaux self-embedding. Sans perte de gnralit, nous supposons donc que G est sous-forme normale de Greibach, cest-dire que toute production est soit de la forme A a, avec a , soit S . Nous supposerons additionnellement que ne contient que des lments non-terminaux : si cela ntait pas le cas, il surait de rajouter un nouveau terminal Xa pour chaque terminal a, ainsi que des productions Xa a. Considrons alors les l premires tapes dune drivation gauche dans G : chaque tape rcrit le non-terminal le plus gauche en insrant un nouveau terminal, suivi du nouveau non-terminal le plus gauche, suivi dun reste, qui sajoute au suxe de la proto-phrase courante (voir la Table 10.2). Notons n le nombre de non-terminaux de G, et m la longueur maximale dune partie droite nonterminale dune production de G : A a, | | m. La preuve que nous allons maintenant
Si G ne contient que des terminaux utiles, alors cette dnition peut tre aaiblie en posant que et sont simplement des proto-mots non-vides.
1

126

S = A0 a1 A1 1 a1 a2 A2 2 a1 a2 a3 A3 3 ... a1 . . . al Al l T. 10.2 Une drivation gauche dvelopper repose sur le fait que si G nest pas self-embedding, alors le suxe Al l des proto-mots a une longueur borne par mn. Remarquons dabord que, pour tout l, | Al l | 1 + l.(m 1) : chaque tape de la drivation rcrit Ai en ai+1 Ai+1 i+1 , soit une croissance nette du reste Ai i dun facteur | i+1 | , dont la longueur est borne par (m 1). Supposons alors | Al l | > mn : ceci nest possible que si l > n et si au moins n tapes de la drivation ont conduit une croissance stricte du reste Al l par application dune production A a telle que | | 2. Comme il nexiste que n non-terminaux, ceci signie quau moins une telle production a t utilise deux fois, donnant lieu une sous-drivation : A aA a . . . A avec non vide (car | | > 0). Or, puisque G nest pas self-embedding, il ne peut exister de tel non-terminal. Cette contradiction prouve que lon a ncessairement | Al l | mn. Un corollaire immdiat : les ensembles de terminaux et de non-terminaux tant nis, les squences susceptibles dapparatre droite du non-terminal le plus gauche dans une drivation gauche sont en nombre ni. Partant de ce rsultat, nous allons construire une grammaire linaire droite G quivalente G, dont les non-terminaux [A] sont dnis par : [A] est un non-terminal de G si et seulement si S G uA avec u dans , auxquels on ajoute laxiome [S]. Le rsultat prcdent nous assure que ces non-terminaux sont en nombre ni. Les productions de G sont dnies par : , [A] a[] dans G si et seulement si A a dans G. , [A] a[] dans G si et seulement si A a dans G. G est par construction linaire droite et quivalente G. Toute drivation dans G de la forme : S G a1 A1 1 G a1 a2 A2 2 G . . . a1 a2 Al l correspond, de manire bi-univoque, une drivation dans G : [S] G a1 [A1 1 ] G a1 a2 [A2 2 ] G . . . a1 a2 [Al l ] dans G . Ce rsultat nous conduit donc une nouvelle caractrisation non pas des langages hors-contexte mais plutt des langages rationnels : un langage est rationnel sil existe une grammaire CF non-self embedding qui lengendre.

10.2

Correspondance de Parikh

Dans cette section, nous tudions les langages CF du point de vue de la longueur des mots quils engendrent et des distributions doccurrences de symboles dans les mots du langage. Un premier rsultat, qui drive directement du lemme de pompage (cf. la section 5.3.1), est que lorsque lon range les mots dun langage CF par longueur croissante, la dirence de longueur 127

entre deux mots successifs est borne par une constante, suggrant que lallongement des mots suit une loi de progression majore par une fonction linaire. Cette constatation permet dexclure n de la famille des langages CF des langages tels que {a2 , n > 0}. Il est alors tentant de chercher dans les contraintes sur les longueurs et les nombres doccurrences de symboles des caractrisations nouvelles de lexpressivit des langages CFs, toujours par opposition aux langages rationnels. Nous verrons pourtant que de ce point de vue l, ces deux familles de langages sont identiques. Plus prcisment, si lon appelle lettre-quivalents deux langages qui contiennent les mmes mots des permutations des symboles prs, alors nous montrerons que pour chaque langage hors-contexte, il existe un langage rationnel qui lui est lettre-quivalent.

10.2.1

Correspondance de Parikh

Commenons par une dnition : Dnition 10.2 (Correspondance de Parikh). Soit = {a1 , . . . , an } un alphabet ni et L un langage de , on appelle correspondance de Parikh lapplication de L dans Nn qui un mot w associe le n-uplet dentiers (w) = (| w | a1 , | w | a2 . . . | w | an ) dnombrant le nombre doccurrences de chaque symbole de dans le mot w. Soit, par exemple, pour = {a, b} : () = (0, 0) ; (aabb) = (2, 2). Pour continuer, nous aurons galement besoin de la dnition suivante, qui permet de caractriser des ensembles de n-uplets. Dnition 10.3 (Semi-linarit). Un ensemble S de n-uplets dentiers de Nn est dit linaire sil existe un ensemble ni (t0 , . . . , tk ) de n-uplets tel que S est lensemble de tous les n-uplets de la forme : t0 + k>0 xi .ti , avec les xi parcourant N. Un ensemble S de n-uplets est semi-linaire sil scrit comme lunion nie densembles linaires. Par exemple, lensemble des couples dentiers dont la dirence, en valeur absolue, est gale 1 est un ensemble semi-linaire. Cest lunion de deux ensembles linaires, lun engendr par t0 = (0, 1) et t1 = (1, 1) ; lautre par t0 = (1, 0) et t1 = (1, 1). Ces deux dnitions prliminaires permettent de poser le rsultat majeur de cette section. Thorme 10.3. Si L est un langage hors-contexte, alors {(w), w L} est un ensemble semi-linaire. Preuve. Sans perte de gnralit, nous supposons que L ne contient pas (dont la prsence ou labsence ne changera rien la proprit de semi-linarit) et que G = (, V, S, P) est une grammaire CF pour L sous forme normale de Chomsky. Pour chaque partie U de V , on note LU lensemble des mots de L dont la drivation gauche contient au moins une occurrence de chaque variable de U. L est clairement lunion des LU et, puisque les LU sont en nombre ni, il nous sut de montrer que chaque LU est lui-mme semi-linaire. Pour chaque partie U de V , nous identions alors deux ensembles nis darbres de drivation et de mots apparaissant leur frontire. Rappelons (cf. la section 5.2.2) que larbre de drivation dun mot w de L est un arbre tiquet par des symboles de la grammaire, dont la racine est tiquete par laxiome, dont tout sous-arbre de profondeur 1 correspond une production, et dont les feuilles sont tiquetes par les symboles de w. On dnit alors : TI est lensemble des arbres de drivation tels que : (i) a pour racine S ; (ii) chaque variable de U tiquette au moins un nud interne de ; (iii) chaque variable X de U apparat au plus | U | fois sur un chemin dans . Cette dernire condition assure que TR est un ensemble ni, ainsi que lensemble des mots apparaissant la frontire dun arbre de TR . 128

TI constitue donc un ensemble darbres de drivation de G contenant les drivations minimales (en nombre dtapes de drivation) de LU . pour chaque variable X de U, avec U S, on considre lensemble TA (X) des arbres possdant les proprits suivantes : (i) la racine de est tiquete par X ; (ii) X ntiquette aucun nud interne de ; (iii) X tiquette une feuille unique de ; (iv) chaque variable X de U apparat au plus | U | fois sur un chemin dans . Cette dernire condition garantissant, comme prcdemment, la nitude de lensemble TA (X). Intuitivement, TA (X) est lensemble des arbres de drivations minimales de la forme X uXv, qui correspondent aux drivations impliquant rcursivement le non-terminal X. TA est lunion des TA (X) et est donc galement un ensemble ni. Lobservation principale qui permet dclairer la suite de la dmonstration est la suivante : les mots de LU sobtiennent en "insrant" (ventuellement de manire rptitive) dans un arbre de TI des arbres de TA (voir la Figure 10.1). De cette observation, dcoule constructivement le rsultat principal qui nous intresse, savoir la semi-linarit des n-uplets images par la correspondance de Parikh des langages LU .
X X 00000 11111

11111 00000 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 Arbre de TI

Arbre de T (X) A

X 11111 00000 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111

F. 10.1 Un arbre de TA (X) sinsrant dans un arbre de TI Pour continuer, appelons SI et SA les ensembles de n-uplets correspondants aux nombres doccurrences de symboles terminaux la frontire des arbres de TI et TA 2 . Ces deux ensembles de n-uplets, comme les ensembles darbres correspondants, sont des ensembles nis. Notons alors SI = {t1 . . . tl } et SA = {s1 . . . sk } ces deux ensembles et K lensemble semi-linaire de n-uplets dni par :
i =l k

K=
i =1

{ti +
j =1

x j .s j , j, x j N}

Montrons alors que K = (LU ), en commenant par montrer inductivement que K (LU ). Considrons en eet t un n-uplet de SI : par construction t est limage par dun mot de LU . Soit
2

On fait abstraction de la variable qui apparat la frontire dun arbre de TA .

129

maintenant un n-uplet se dcomposant en t = t1 + s, avec t1 dans (LU ) et s dans SA . Il existe donc dune part un mot w1 dans LU tel que (w1 ) = t1 ; dautre part une variable X telle que s est limage par de la frontire dun arbre de TA (X). Or, par dnition de LU , larbre de drivation de w1 contient un nud interne tiquet par X. En "excisant" le sous-arbre de racine X et en insrant sa place le sous-arbre , conformment au schma de la Figure 10.1, on obtient un nouveau mot v de LU qui est bien tel que (v) = t. Ceci permet de conclure que K (LU ). La rciproque se fonde sur des arguments similaires et nous nous contentons de lesquisser ici. Soit w un mot de LU : soit son arbre de drivation est dans SI , ce qui permet de conclure directement de (w) est dans K ; soit son arbre de drivation nest pas dans SI , entranant quau moins une variable X apparat strictement plus que | U | fois dans la drivation. Lide est alors doprer lopration inverse de linsertion, en extrayant le dernier sous-arbre de racine X qui soit dans TA (X). Cette opration conduit un arbre de drivation strictement plus petit que larbre original, correspondant au mot v et (w) (v) = si pour un certain i. En procdant inductivement, on se ramne de proche en proche un mot dont larbre de drivation est dans TI , ce qui permet nalement de conclure.

10.2.2

Rationnels et les hors-contextes sont lettre-quivalents

Le rsultat que nous avons annonc en dbut de cette section peut maintenant tre tabli assez simplement. Rappelons en, pour commencer, lnonc. Thorme 10.4. Pour tout langage hors-contexte L, il existe un langage rationnel L qui est lettre-quivalent L. Preuve. Si L est un langage hors-contexte sur un alphabet de n symboles, il existe un nombre ni densembles linaires de n-uplets S1 . . . Sp tel que (L) est lunion des Si . Pour chaque ensemble Si , il existe un ensemble de n-uplets {ti . . . ti } tel que Si = {ti + j>0 x j .tij }. Pour trouver un langage 0 0 k lettre-quivalent L, il sut dassocier chaque ti = (x1 , . . . , xn ) le mot wi contenant x1 fois le k k x1 x2 xn i symbole a1 , x2 fois a2 : wk = a1 a2 . . . an . On obtient alors un langage rationnel lettre-quivalent L en prenant lunion des langages rationnels Li , o chaque Li est dni par :
i i Li = wi 0 (w1 ) . . . (wki )
i

Un corollaire immdiat est que tout langage hors-contexte sur un alphabet dun seul symbole est rationnel : pour que la modlisation par un langage ou une grammaire hors-contexte fournisse un surcrot dexpressivit par rapport la modlisation rationnelle, il faut au moins deux symboles dont la modlisation hors-contexte permettra, comme on va le voir, de contrler les appariements.

10.3
10.3.1

Langages parenthss, langages hors-contexte


Langages de Dyck

Nous donnons maintenant une nouvelle caractrisation des langages CF qui permet de toucher du doigt la fois le gain de complexit que ces langages apportent par rapport aux langages rationnels et leur limitation intrinsque. Pour dbuter, nous introduisons un nouveau type de grammaire et de langage, les grammaires et langages de Dyck. 130

Dnition 10.4 (Grammaires et langages de Dyck). Soit = {a1 , a 1 , . . . an , a n } un alphabet compos de 2n symboles apparis (a1 avec a 1 . . . ), on appelle langage de Dyck dordre n, not Dn le langage engendr par la grammaire hors-contexte suivante : ({S}, , S, {S , S SS, S a1 Sa 1 , . . . , S an Sa n }. Les couples de symboles terminaux (ai , a i ) sont dits conjugus. Une autre interprtation des langages de Dyck consiste dnir un processus de rduction des mots de qui supprime toute paire de symboles conjugus voisins. Si w = uai a i v, alors w peut se rduire uv. Il est facile de montrer que la relation de rduction dnit une relation dquivalence sur les mots de . Le langage de Dyck sur est alors simplement lensemble des mots de qui peuvent se rduire (qui sont congrus par la relation de rduction) au mot vide. Les grammaires de Dyck sont des grammaires hors-contexte particulires dans lesquelles les terminaux sont toujours insrs par paires dlments conjugus. Considrons, par exemple, lalphabet compos des 3 paires de symboles = {(, ), [, ], <>}. On observe alors par exemple la drivation gauche suivante dans D3 : S (S) (SS) (< S > [S]) (<> [S]) (<> []) Les langages de Dyck possdent quelques proprits simples, dont la dmonstration est laisse en exercice : Proposition 10.1. Si Dn est le langage de Dyck sur lalphabet n symboles, alors les proprits suivantes sont vraies : (i) si u et v sont dans Dn , alors uv est dans Dn (ii) si uv est dans Dn et si u est dans Dn , alors v est dans Dn (iii) si u est dans Dn , alors ai ua i est galement dans Dn , pour toute valeur de i. (iv) tout mot u non vide de Dn se factorise sous la forme u = ai va i w, avec v et w des mots de Dn . (v) si ai a i v est un lment de Dn , alors v est galement dans Dn

10.3.2

Deux nouvelles caractrisations des langages CF

Dans cette section, nous prsentons deux thormes qui suggrent que les langages de Dyck reprsentent, dune certaine manire, lessence des langages hors-contexte. Nous commenons par thorme suivant, d Chomsky et Schtzenberger, qui fournit une caractrisation des langages hors-contexte partir de la notion de langage de Dyck : Thorme 10.5 (Chomsky-Schtzenberger). Tout langage hors-contexte est limage par un morphisme de lintersection dun langage rationnel et dun langage de Dyck. Ce premier rsultat permet de toucher prcisment le surcrot dexpressivit quont les grammaires hors-contexte par rapport aux grammaires rationnelles, savoir leur capacit contrler des paires de symboles apparis ; ce quune grammaire rgulire est incapable de faire. Ce rsultat exprime galement de manire trs parlante la limitation de la capacit dexpression des grammaires CF : (i) les symboles apparis vont par deux ; (ii) il ny a quun nombre ni de paires. Preuve : soit L un langage CF, dont nous supposerons sans perte de gnralit quil ne contient pas ; soit G = (, V, S, P) une grammaire sous forme normale de Chomsky pour L. Notons {a1 . . . an } les lments de et Ai Bi Ci , i = 1 . . . m les productions binaires de G. Considrons alors le langage de Dyck Dn+m dni sur lensemble de terminaux suivant : = {a 1 . . . a n } {an+1 , a n+1 . . . an+m , a n+m }. Chaque symbole ai de a son conjugu a i dans ; lensemble des

131

terminaux de Dn+m tant complt par une paire de nouveaux symboles terminaux conjugus pour chaque production de G. Dnissons maintenant un morphisme h de Formellement, h est dni inductivement sur dans qui eace tous les symboles de /. par :

h() = a , h(a) = a a /, h(a) = u tel que | u | > 1, u = av et h(u) = h(a)h(v)

Pour complter cette construction, introduisons nalement la grammaire G = ( , V, S, P ), o P contient les productions suivantes : (i) A a P, A aa P (ii) A a P, i = 1 . . . m, A aa a n+i Ci P (iii) i = 1 . . . m, Ai an+i Bi P Cette grammaire tant linaire droite, elle engendre un langage rationnel (cf. la section 4.2.4). Montrons alors que L = h(L(G ) Dn+m ) en prouvant la double inclusion. Linclusion L (h(L(G ) Dn+m ) se dduit du rsultat suivant : Proposition 10.2. A V, si A G u, alors v tel que (i) v Dn+m , (ii) A G v et (iii) u = h(v)

Si A G u en une tape de drivation, on doit avoir u = a, A a ; or aa est dans Dn+m L(G ), puisque la grammaire de Dyck contient S aSa , S , et G contient par construction la production A aa . Comme de plus on a h(aa ) = a, on conclut que tout mot de longueur 1 de G vrie la proprit prcdente. Supposons que ce rsultat soit vrai jusqu la longueur k et considrons u drivant de Ai dans G par une srie de k + 1 tapes. La premire de ces tapes est alors ncessairement de la forme Ai

Bi Ci , et il existe un entier j tel que Bi

u1 . . . u j et

Ci u j+1 . . . uk . Lhypothse de rcurrence nous assure alors de lexistence de deux mots v et w tels que : v Dn+m , Bi G v, u1 . . . u j = h(v) w Dn+m , Ci G w, u j+1 . . . uk = h(w) La dernire tape de la drivation (gauche) de Bi dans G est de la forme A aa ; or, la production A aa a n+i Ci est par construction galement dans G pour toutes les valeurs de i, ce qui implique B i G va
n+i Ci .

Puisque Ai

an+i Bi est galement une production de G , on dduit alors que Ai G an+i Bi G

an+i va n+i Ci G an+i va n+i w, dont limage par h est prcisment u. On note enn que, comme v et w sont dans Dn+m , par application de la proprit 10.1(iii) des langages de Dyck, an+i va n+i w est galement dans Dn+m , ce qui permet daboutir au rsultat souhait. La conclusion simpose alors : si u L(G), alors S G u et donc il existe v dans h(L(G ) Dm+n ) tel que u = h(v). La rciproque se fonde sur le rsultat suivant, que nous allons galement dmontrer par induction. Proposition 10.3. A V, si A G v, avec v Dm+n , alors A G h(v).

Lorsque la drivation a lieu en une tape, ce rsultat est immdiat : on doit ncessairement utiliser dans G une production de la forme A aa , qui a une contrepartie A a dans G. Supposons donc 132

que la proprit soit vraie pour toutes les drivations de longueur au moins k et considrons une drivation de longueur k + 1 : A G v. La premire tape de cette drivation ne peut tre de la forme A aa (car il y a plus dune tape de drivation), ni de la forme A aa a n+ j C j (car on aurait alors une proto-phrase dans laquelle a n+ j apparatrait devant an+ j , ce qui est impossible). La seule possibilit restante est donc que la drivation de v dbute par : A an+ j B j pour j entre 1 et m. v se factorise donc sous la forme v = an+ j v , et v contient ncessairement a n+ j , soit encore v = an+ j v1 a n+ j v2 . v tant dans Dn+m , il est de surcrot assur que v1 et v2 sont galement dans Dn+m . La dnition de G fait que lintroduction de a n+ j nest possible que paralllement celle de C j et que la drivation de v est de la forme A an+ j v1 a n+ j C j an+ j v1 a n+ j v2 (rappelons en eet que G est linaire droite : le seul non-terminal dun proto-mot est toujours le plus droite). Remarquons maintenant que, pour chaque production de la forme A aa a j C j , la production A aa est galement dans G. Cela signie quau lieu dappliquer la production introduisant C j , on aurait tout aussi bien pu achever la drivation de v1 depuis B j . On a donc nalement montr : B j G C j G v1 , avec v1 dans Dn+m v2 , avec v2 dans Dn+m
n + j v2 )

Par application de lhypothse inductive, il vient alors que B j G h(v1 ), C j G h(v2 ), et donc que A B j C j G h(v1 )h(v2 ) = h(an+ j v1 a = h(v), soit prcisment ce quil fallait dmontrer. Nous introduisons maintenant un second rsultat fondamental, qui donne une autre caractrisation des langages hors-contexte partir des langages de Dyck. Lintuition principale de ce rsultat est que dans la drivation dun mot dans une grammaire hors contexte, toute variable introduite (en partie droite) doit tre "limine" par une variable (apparie) qui gure en partie gauche dune rgle. Thorme 10.6 (Shamir). Soit L un langage hors-contexte sur , alors il existe un alphabet de symboles apparis , un symbole X de et un morphisme h de dans lensemble des langages sur tel que u L si et seulement si X(u) D , avec D le langage de Dyck sur . Preuve : Soit L un langage CF, et G = (, V, S, P) une grammaire sous forme normale de Greibach engendrant L. Sans perte de gnralit, on suppose que chaque production de G est de la forme A a, o ne contient que des symboles non-terminaux. chaque variable X de V , on associe un conjugu X , et lon note lensemble des variables et de leurs conjugus. Rappelons que R dnote le miroir du mot . Nous introduisons alors le morphisme h, dit morphisme de Shamir, dni inductivement sur par : h() = a , h(a) = {X R | X a P} u tel que | u | > 1, u = av et h(u) = h(a)h(v) La dmonstration du thorme prcdent repose sur la proposition suivante : Proposition 10.4. A G u, avec dans V si et seulement si X(u) contient un mot rductible (au sens de llimination des conjugus) en R . Preuve : Comme prcdemment, nous allons montrer la double implication par induction sur la longueur des drivations. Pour une drivation de longueur 1, A a dans G implique que X R est dans (a), et donc que X(a) contient R , qui est eectivement rductible lui-mme. Supposons la proprit vraie pour des drivations de longueur au plus k, et considrons la dri133

vation suivante : X G u1 . . . uk A u1 . . . uk uk+1

Lhypothse de rcurrence garantit quil existe un lment z de qui est dans X(u1 . . . ul ) et rductible R A. Puisque A R est dans (uk+1 ), zA R est dans X(u1 . . . uk )(uk+1 ) = X(u1 . . . uk+1 ), et rductible en R R , donc en ()R , ce quil fallait dmontrer. La rciproque se montre de manire similaire et est laisse en exercice. On dduit nalement que S G u si et seulement si il existe un mot de S(u) qui soit rductible , donc qui appartienne au langage de Dyck sur .

134

Chapitre 11

Problmes dcidables et indcidables


Nous revenons, dans ce chapitre, sur les questions de dcidabilit pour les langages hors-contextes, question qui ont dj t voques la section 5.3.3. Nous commenons pas introduire deux problmes indcidables, le problme des mots et le problme de la correspondance de Post. Dans un second temps, nous utilisons ce dernier problme pour driver une batterie de rsultats concernant les grammaires et les langages hors-contexte.

11.1

Lexpressivit calculatoire des systmes de rcriture

Dans cette section, nous montrons que les mcanismes de rcriture dnis par des grammaires formelles ont une expressivit comparable aux machines de Turing, travers une tude du problme des mots. Nous introduisons ensuite un second problme indcidable, celui de la correspondance de Post.

11.1.1

Le problme des mots

Le problme des mots pour les grammaires formelles est dni de la manire suivante. Dnition 11.1 (Problme des mots). Le problme des mots consiste dcider, pour une grammaire G donne, et u, v dans , si u G v. En fait, si une telle drivation existe, alors il est possible de la trouver, en parcourant de manire systmatique par numration le graphe des drivations nie de u par G. Le point dicile est de dtecter quune telle drivation nexiste en fait pas et quil est vain de la chercher. On retrouve l une situation similaire celle rencontre lors de lexamen du problme de larrt pour les machines de Turing : la dicult est didentier les congurations dans lesquelles la machine de sarrte pas. La preuve de lindcidabilit du problme des mots repose sur la rduction suivante du problme un problme de mots, correspondant une r-expression sous la forme de rcritures du comportement dune machine de Turing. Soit MT une machine de Turing sur lalphabet {#}, ce dernier symbole dnotant le caractre blanc et Q lensemble des tats de la machine. Deux tats de Q sont distingus : qI lunique tat initial et qF un unique tat nal. Les actions de MT sont dcrites par des dplacements L (une case vers la gauche) et R (une case vers la droite) et I (rester sur la

135

case courante) et des actions de lecture/criture y : z, exprimes par la fonction de transition de (Q ) dans (Q {L, R, I}). On note (, q, x, ) une conguration instantane de MT, dcrivant une situation o la tte de lecture est positionne sur un x, encadre sa gauche par la squence et sa droite par la squence ; le contrle est dans ltat q. Cette situation est reprsente linairement par la squence $qx$ sur lalphabet Q {$}, avec $ un nouveau symbole servant de frontire. Ces actions sont converties en rgles de rcriture dune grammaire G selon : qxy xpz pour toute action (q, x) = (p, R, y : z) : cette action transforme le ruban xy en xz, met la machine dans ltat p et dplace la tte de lecture vers la droite, sur le z qui vient dtre rcrit. La nouvelle conguration est donc $xpz$. yq pz pour toute action (q, x) = (p, L, y : z) qx$ qx#$ pour tout q et tout x dans : cette production rajoute simplement un symbole # (blanc) droite de la case courante. qF x qF pour tout x : eace tout symbole du ct droit du ruban xqF qF pour tout x : eace tout symbole du ct gauche du ruban Cette construction assure que toute squence de mouvements de M se traduit de manire quivalente par des rcritures dans G. En particulier, si M sarrte avec un ruban entirement blanc sur une entre u, alors il existe une drivation dans G rcrivant $uqI #$ en $qF $. Savoir rsoudre le problme des mots dans G donnerait alors la solution du problme de larrt dune machine de Turing, qui est indcidable. Le problme des mots est indcidable.

11.1.2

Le problme de Post

Le problme de la correspondance de Post est un problme de combinatoire sur les mots dont on admettra ici lindcidabilit. Ce problme est rput comme tant la mre de tous les problmes de dcidabilit pour les langages formels et est utilis dans de nombreuses dmonstrations. Formellement, un systme de Post est dni de la faon suivante : Dnition 11.2. tant donn un alphabet , un systme de Post est tout simplement un ensemble de n couples de mots (ui , vi ), pour i variant de 1 n. Une solution au problme de la correspondance est une squence dindices i1 . . . ik (le mme indice pouvant apparatre plusieurs fois) telle que : ui1 . . . uik = vi1 . . . vik Lanalogie la plus simple pour saisir le problme est celle des dominos : chaque couple (ui , vi ) reprsente une tuile de domino de la forme : ui vi tant donn un ensemble de dominos, la question est alors de savoir sil est possible de les concatner de telle manire que le mot du haut soit gal au mot du bas ? Attention : la question nest pas simplement de savoir sil existe un certain arrangement des ui et un arrangement des vi qui conduisent deux mots identiques1 ; mais bien de trouver deux arrangements qui utilisent les parties hautes et basses des tuiles disponibles.
1

Sauriez-vous prouver que ce problme-l est facile, cest--dire ici, dcidable ?

136

Considrons par exemple le systme dni par : {(a, ab), (ba, aba), (b, aba), (bba, b)}. Ce systme admet une solution, reprsente dans la Table 11.1. a bba ba ab b aba T. 11.1 Une solution au problme de la correspondance de Post Comment trouver une telle solution ? Un raisonnement simple nous permet de driver des conditions ncessaires. Ainsi, la premire tuile doit ncessairement tre telle que soit ui est un prxe de vi , soit vi est un prxe de ui . Une condition similaire, portant sur les suxes, se dduit pour la dernire tuile. Cette condition ntant respecte que pour deux des quatre tuiles (a, ab) et (bba, b), toute solution doit dbuter par lune de ces deux tuiles, et sachever avec (ba, aba), qui est la seule tuile respectant la condition sur les suxes. Ce problme, en apparence simple, est en ralit insoluble par un algorithme gnral : Thorme 11.1. Le problme de la correspondance de Post est indcidable. Ce rsultat classique se dmontre partir de la non-dcidabilit du problme dit Problme du mot dans un systme de Thue.

11.2

Quelques problmes pour les CFG

Nous prsentons dans cette section les rsultats classiques dindcidabilit pour les langages horscontexte, en suivant pour lessentiel la prsentation donne dans (Denning et al., 1978).

11.2.1

L intersection

La cl des dmonstrations qui suivent repose sur une transformation dun systme de Post en un couple de grammaires. Comme pour les transformations utilises en thorie de la complexit2 , il sagit de transformer tout problme de Post en un problme portant sur les CFG, de telle manire que le problme original ait une solution si et seulement si le problme driv en a une. La transformation qui nous intresse est la suivante : soit S = {(ui , vi ), i = 1 . . . n} un systme de Post dni sur un alphabet , considrons alors les grammaires Gt = ( {1 . . . n}, {St }, St , Pt ) (resp. Gb = ( {1 . . . n}, {Sb }, Sb , Pb )), o les productions de Gt et Gb sont dnies comme suit : St si et seulement si : soit = iSt ui , soit = iui Sb si et seulement si : soit = iSb vi , soit = ivi Gt produit alors tous les mots susceptibles dapparatre sur la ligne du haut lorsque lon concatne des tuiles dans un systme de Post ; Gb se chargeant de la ligne du bas. Mais ce nest pas tout : lors dune drivation, on empile gauche de S les indices des tuiles qui sont utilises, pour produire des mots forms dun ct par des indices, de lautre par des symboles de . titre dillustration, reprenons le systme dni la section prcdente, et construisons la grammaire Gt correspondante, dont les productions sont listes dans la Table 11.2.
la dirence prs que pour des dmonstrations de dcidabilit, il nest pas besoin de prendre en compte la complexit algorithmique de la transformation.
2

137

St 1St a | 1a St 2St ba | 2ba St 3St b | 3b St 4St bba | 4bba T. 11.2 La grammaire "top" dun systme de Post Une drivation gauche dans cette cette grammaire est par exemple S 1St a 14St bbaa 142babbaa, engendrant non seulement le mot babbaa, mais galement la liste (inverse) des tuiles utilises : la tuile numro 1, puis la 4, puis la 2. Un second point important pour la suite est que L(Gt ) et L(Gb ) sont deux langages dterministes : pour sen convaincre, il sut de raliser quun automate pile les reconnaissant aurait un fonctionnement trs simple, consistant empiler un symbole Zi chaque lecture dun indice i, puis, rencontrant un premier symbole de dpiler Zi conditionnellement la lecture de ui . Lintrt de cette construction repose dans lquivalence suivante : le problme de Post a une solution si et seulement si L(Gt ) et L(Gb ) ont une intersection non vide. La preuve est la suivante : si le systme de Post une solution i1 . . . ik , conduisant au mot w, alors lapplication dans Gt (resp. Gb ) des k 1 rgles St i j St ui j (resp. Sb i j Sb vi j ) pour j variant de k 2, suivie de St i1 ui1 (resp. Sb i1 vi1 ) drive le mot ik ik1 . . . i1 w dans L(Gt ) comme dans L(Gb ). Inversement, si lintersection est non-vide et contient le mot ik . . . i1 w, alors il est immdiat de vrier que i1 . . . ik est une solution du systme de Post. Sen dduit le thorme suivant : Thorme 11.2. Il nexiste pas dalgorithme dcidant si lintersection des langages de deux grammaires hors-contexte est vide. Si un tel algorithme existait, il est en eet clair quil pourrait directement tre mis prot pour rsoudre le problme de la correspondance de Post, qui est un problme indcidable. Un tel algorithme ne peut donc exister, le problme de lintersection de deux CFG est donc indcidable. Proposition 11.1. Il nexiste pas dalgorithme dcidant si lintersection de deux grammaires hors-contexte contient un nombre inni dlments. Il sut de remarquer quil existe une solution au problme de Post exactement dans les cas o lintersection prcdente est innie. Si, en eet, il existe une solution w, il en existe ncessairement une innit, puisque toute itration w+ de la solution dnit une nouvelle solution. La rciproque tant triviale, on obtient le rsultat nonc ci-dessus.

11.2.2

Une rafale de problmes indcidables

Complment et Universel Les dmonstrations qui suivent reposent principalement sur le dterminisme des langages L(Gt ) et L(Gb ) et sur la stabilit des langages dterministes par complmentation (cf. la section 9.3). Ceci permet en particulier darmer que L(Gt ) et L(Gb ) sont deux langages hors-contexte dterministes, dont il est possible de construire la grammaire partir de celles de Gt et Gb . Leur union, L(Gt ) L(Gb ), est galement un langage hors-contexte (pas ncessairement dterministe). On dduit : Thorme 11.3. Soit G une grammaire hors-contexte, le problme L(G) = est indcidable. 138

Cest une consquence directe de la loi de De Morgan : A B = A B. Si lon savait dcider le problme prcdent, il surait de considrer la question L(G) = pour G une grammaire CF pour L(Gt ) L(Gb ) pour rsoudre le problme de lintersection, puis le problme de Post. Comme corollaire, on note au passage que le problme : L(G) = est galement indcidable. Rationnel Montrons maintenant que le problme de la rationalit de L(G) galement indcidable. Considrons, de nouveau, le langage intersection L(Gt ) L(Gb ) : nous savons dj que ce langage est vide si et seulement sil existe pas de solution au problme de la correspondance de Post associ. Remarquons alors que, dans ce cas, ce langage est trivialement rationnel. Lorsquau contraire le problme de Post a une solution, alors nous avons vu quil en avait une innit, consistant des itrations wi dune solution de base w. Ces familles de solution donnent lieu des mots de la forme xi wi dans L(Gt ) L(Gb ), entranant que cet ensemble ne peut tre rationnel (par une application directe du lemme ditration pour les langages rationnels). Il sensuit que : Lemme 11.1. L(Gt ) L(Gb ) est rationnel si et seulement si le problme de Post associ na pas de solution. Il sensuit immdiatement que si on savait dcider la rationalit de L(G) pour G hors-contexte, on saurait en particulier le faire pour la grammaire engendrant L(Gt ) L(Gb ), puis, du fait de la stabilit par complment des langages rationnels, pour L(Gt ) L(Gb ). Ceci impliquerait alors la dcidabilit du problme de la correspondance de Post, do : Thorme 11.4. Soit G une grammaire hors-contexte, le problme L(G) est-il rationnel ? est indcidable. Dterministe La question du dterminisme demande dintroduire un nouveau rsultat, non dmontr ici : Thorme 11.5. Soit G une grammaire dun langage CF dterministe, alors le problme L(G) est rationnel est dcidable. On dduit immdiatement que la question du dterminisme du langage engendr par G est, elle, indcidable : sinon, il surait de dcider dans un premier temps du dterminisme de L(G) puis de : conclure la non rationalit si L(G) nest pas dterministe utiliser le rsultat prcdent si L(G) est dterministe En consquence : Thorme 11.6. Soit G une grammaire dun langage CF, alors le problme L(G) est dterministe ? est indcidable. Ambigut Lambigut dune grammaire est galement une question indcidable. Ce rsultat drive de la construction canonique dune grammaire G pour L(Gt ) L(Gb ) consistant ajouter aux grammaires Gt et Gb un nouvel axiome S, ainsi que deux nouvelles productions S St , S Sb . Gt et Gb tant dterministes, elles ne peuvent donner lieu aucune ambigut. G est donc ambigu si et seulement si un mme mot se drive la fois dans Gb et dans Gt , donc si et seulement si le problme de Post a une solution. Thorme 11.7. Soit G une grammaire CF, alors le problme G est ambigu est indcidable. Des rsultats complmentaires sont donns, par exemple, dans (Hopcroft and Ullman, 1979, p. 217 et suivantes). 139

Chapitre 12

Parsage tabulaire
Nous nous tudions dans ce chapitre des stratgies danalyse ddies lanalyse de langages ambigus, tels que ceux qui sont couramment utiliss pour dcrire des noncs en langage naturel. Rappelons quun langage CF ambigu est un langage tel que toute grammaire CF qui le reprsente est ambigu, cest--dire assigne plus plus dun arbre de drivation au moins un mot de L. Dans ce contexte, les stratgies dterministes, garantissant une complexit linaire, que nous avons prsentes dans les chapitres prcdents (notamment aux chapitres 7 et 9) sont ncessairement inadaptes. Le problme est double : (i) comment parvenir conserver une complexit raisonnable pour tester lappartenance dune chane un langage (ii) comment reprsenter ecacement lensemble (potentiellement exponentiellement grand) des direntes analyses pour une phrase donne. Nous expliquons tout dabord comment reprsenter dans une structure ecace, la table des sous-chanes bien formes, un ensemble exponentiel darbres danalyse. Nous prsentons ensuite des algorithmes ayant une complexit polynomiale (prcisment en O(n3 ), o n est la longueur de la chane analyser) pour rsoudre ce problme, tels que les algorithmes CYK (Younger, 1967) et Earley (Earley, 1970), qui sont prsents aux sections 12.1 et 12.2, ainsi que diverses variantes et extensions.

12.1
12.1.1

Analyser des langages ambigus avec CYK


Les grammaires pour le langage naturel

Nous avons vu (notamment au chapitre 6) que le parsage naf de grammaires CF impliquait de calculer et de recalculer en permanence les mmes constituants. Il apparat donc naturel, pour acclrer la procdure, dutiliser une structure temporaire pour garder les rsultats dj accumuls. Il existe, du point de vue du traitement automatique des langues , deux raisons importantes supplmentaires qui justient le besoin de manipuler une telle structure. La premire, et probablement la plus importante, est que le langage naturel est abominablement ambigu, et quen consquence, les grammaires naturelles seront naturellement ambigus, cest--dire susceptibles dassigner plusieurs structures syntaxiques direntes un mme nonc. En sus de lambigut lexicale, massive, lexemple le plus typique et potentiellement gnrateur dune explosion combinatoire des analyses est celui du rattachement des groupes prpositionnels. Considrons de nouveau la grammaire des dimanches, reproduite la Table 12.1, et intressonsnous par exemple la phrase : Louis parle la lle de la lle de sa tante. Selon la manire dont on analyse le rattachement des groupes prpositionnels (correspondant au non-terminal GNP), on 140

p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14

GN GV S GN DET N GN GN GNP GN NP GV V GV V GN GV V GNP GV V GN GNP GV V GNP GNP GNP PP GN ` PP de | a DET la | le DET sa | son DET un | une

p15 p16 p17 p18 p19 p20 p21 p22 p23 p24 p25 p26 p27 p28

V V V V V V NP NP N N N N ADJ ADJ

mange | sert donne boude | s ennuie parle coupe | avale discute | gronde Louis | Paul Marie | Sophie f ille | cousine | tante paternel | f ils | viande | soupe | salade dessert | f romage | pain petit | gentil petite | gentille

T. 12.1 La grammaire GD des repas dominicaux

dispose pour cette phrase dau moins trois analyses : un seul complment rattach au verbe parle : la lle de la cousine de sa tante deux complments rattachs au verbe parle : la lle ; de la cousine de sa tante deux complments rattachs au verbe parle : la lle de la cousine ; de sa tante Notez quil y en aurait bien dautres si lon augmentait la grammaire, correspondant la possibilit dutiliser des groupes prpositionnels comme complments circonstanciels (temps, lieu, moyen...), ainsi : Ma sur parle la table d ct de la lle de la cousine de sa tante. Linguistiquement, la raison de la prolifration de ce type dambigut en franais provient de la structure des groupes nominaux et noms composs qui sont majoritairement de la forme N PP (DET) N, ventuellement entrelards ici o l de quelques adjectifs. Ceci est particulirement manifeste dans les domaines techniques, o lon parle de termes : une machine de Turing, une turbine vapeur, un rseau de neurones, un projet de dveloppement dun algorithme de rsolution du problme de lapproximation dquations aux drives partielles.... Nous navons mentionn ici que des cas dambiguts globales, cest--dire qui persistent au niveau de la phrase toute entire. Un analyseur perd galement beaucoup de temps explorer inutilement des ambiguts locales. Considrez par exemple la construction dun nud S dans une analyse ascendante de llve de Jacques a russi le contrle. Dans cet exemple, un analyseur naf risque de construire toute la structure de racine S dominant le prxe : Jacques a russi le contrle, qui, bien que correspondant une phrase complte parfaitement correcte, laisse non analys le prxe llve de, et nest donc daucune utilit. Il est alors ncessaire, pour des applications en traitement des langues, de reprsenter de manire compacte un ensemble darbres de drivations : on appelle un tel ensemble darbres une fort de drivations. Second desiderata important : les systmes de parsage envisags jusqualors fournissent une rponse binaire (oui/non) la question de lappartenance dune chane un langage. Dans le cas o la rponse est ngative, cela donne bien peu dinformation aux traitements ultrieurs, quand bien mme un grand nombre de constituants (incomplets) ont t forms pendant le parsage. Dans la mesure o les systmes de TLN sont souvent confronts des noncs non-grammaticaux au

141

sens strict (style de rdaction (eg. les titres) ; systmes de dialogues : hsitations, reprises... ; sorties de systmes de reconnaissance des formes (de la parole ou de lcriture manuscrite) , cette manire de procder est insatisfaisante : faute dune analyse complte, on aimerait pouvoir produire au moins une analyse partielle de lnonc, qui pourra servir aux niveaux de traitement ultrieurs (par exemple lanalyseur smantique). La solution tous ces problmes consiste utiliser une table des sous-chanes bien formes, qui va dune part mmoriser les structures partielles ds quelles ont t cres, an dviter leur recalcul, et qui va, dautre part, fournir des lments dinformations aux niveaux de traitement suprieurs, mme en cas dchec de lanalyseur.

12.1.2

Table des sous-chanes bien formes

La structure la plus gnralement utilise pour reprsenter des analyses partielles ou multiples est une table double entre : le premier indice, correspondant la position de dbut du constituant, varie entre 0 et n ; le second indice correspond la position du premier mot non couvert et varie entre 0 et n + 1. Chaque cellule T[i, j] de cette table contient la liste des constituants reconnus entre i et j, i inclus, j exclus. En supposant que la phrase analyser soit : ma sur mange, on aurait la table des sous-chanes bien forme suivante (voir la Table 12.2). 4 3 2 S GN DET ma 1 V, GV N sur 2 mange 3

T. 12.2 Table des sous-chanes bien formes La cellule [1, 3] contient un GN, indiquant que lon a reconnu un groupe nominal entre les positions 1 et 3 ; linverse, la cellule [2, 4] est vide : aucun constituant de longueur 2 ne commence cette position. Une manire alternative dimplanter cette table consiste la reprsenter sous la forme dun graphe orient sans cycle (ou DAG pour Directed Acyclic Graph ). Chaque nud de ce graphe reprsente un mot (ou un indice de mot), et chaque transition entre nuds est tiquete par le constituant trouv entre les deux nuds. Plusieurs transitions entre deux nuds reprsenteront alors des fragments ambigus, cest--dire qui peuvent tre analyss de plusieurs manires direntes. Ce type de reprsentation de lambigut est illustre par lexemple de lnonc : La lle parle sa mre de sa tante, dont la table des sous-chanes bien formes est partiellement1 reprsente la Figure 12.1. Nous avons volontairement introduit sur ce schma une information supplmentaire, qui nest pas reprsente dans la table, en tiquetant chaque arc avec la production qui linduit, alors la table nenregistre en ralit que lidentit du non-terminal correspondant. Comme gur sur ce graphe, il existe deux manires danalyser sa mre de sa tante : soit comme un GNP, soit comme une succession de deux GNPs. Ces deux interprtations sont eectivement reprsentes dans la table, qui, pourtant, ne contient quun seul arc tiquet GV entre les noeuds 3 et 10.
1

Il manque donc des arcs : sauriez-vous dire lesquels ?

142

GV > V GNP , GV > V GNP GNP

GNP > PREP GN

GNP > GN GNP

GNP > PREP GN GN > DET N

GNP > PREP GN GN > DET N

V > parle

PREP > a

DET > sa

N > mere

PREP > de

DET > sa

N > tante

10

F. 12.1 Reprsentation graphique dune ambigut syntaxique

Dans cette reprsentation, le succs du parsage correspond lcriture dans la case en haut gauche (T[1, n]) du tableau dun constituant de type S (version tabulaire), ou encore dun arc tiquet S couvrant toute la phrase (version graphique). Ces tables peuvent sutiliser indpendamment de la stratgie de recherche ou de parsage utilise, ascendante, descendante, mixte, dans la mesure o elles ne servent qu stocker de linformation. La seule contrainte dutilisation est relative lordre dans lequel le remplissage aura lieu. Ainsi, pour eectuer un parcours complet de lespace de recherche, il faudra, dans une analyse descendante, vrier que lon introduit une nouvelle entre dans la table quau moment o lon connat tous les constituants qui peuvent entrer dans cette case. Dans le cas contraire, on risque dutiliser par anticipation, lors de la consultation de la table, un rsultat partiel, et oublier des analyses. Le mme type de vrication est ncessaire lorsque lon adopte une stratgie de parsage ascendant.

12.1.3

Lalgorithme CYK

Lalgorithme CYK (Younger, 1967), du Cocke, Younger et Kasami est destin au parsage de grammaires sous forme normale de Chomsky (voir la section 8.2.1). Il fournit un premier exemple de dutilisation de ces structures de table. Cet algorithme2 implmente une stratgie danalyse strictement ascendante. La mise sous CNF garantit en particulier, quon ne rencontrera ni production vide, ni chane de rgles, deux congurations potentiellement problmatiques pour des stratgies purement ascendantes. Commenons par donner une premire version de cet analyseur, formalis par lalgorithme 10. La premire tape de cet algorithme consiste initialiser le tableau T[] en insrant toutes les productions de type A a potentiellement utilises dans lentre u. Cette tape correspond au remplissage de la diagonale du tableau ; elle est simplie par le fait que dans une grammaire sous forme normale de Chomsky, les seules rgles introduisant des terminaux sont de la forme A a. La boucle principale consiste construire, pour des tailles croissantes de l, les constituants de longueur l dbutant en position i : il sut, pour cela, de considrer toutes les factorisations en deux parties de ui . . . ui+l et de chercher celles qui sont couvertes par deux terminaux B et C, avec A BC une production de la grammaire. Notez que, mme sil existe deux rgles A BC et A DE permettant dinsrer A dans la cellule T[i, j], la cellule T[i, j] ne contiendra quune seule occurrence de A. Cest cette factorisation qui permet de reprsenter un nombre potentiellement exponentiel danalyses dans une table
2 Cest plutt dun mta-algorithme quil faudrait en fait parler, car la dnomination CYK regroupe en fait des stratgies danalyse varies : gauche droit, en ligne, non directionnel...

143

Algorithm 10 Analyseur CYK pour une grammaire CNF G = (, V, S, P) // la phrase analyser est u = u1 . . . un // la table danalyse T est initialement vide : T[i, j] = for j := 1 . . . n do foreach A ui P do T[i, i + 1] := T[i, i + 1] {A} od od // Boucle principale : Cherche les constituants de longueur croissante for l := 2 . . . n do for i := 1 . . . n l + 1 do for k := i + 1 . . . i + l 1 do if B T[i, k] C T[k, i + l] A BC P then T[i, k + l] := T[i, k + l] {A} od od od if S T[1, n] then return (true) else return (false)

polynomiale. Une fois la table construite, il sut de tester si la table contient S dans la cellule T[1, n] pour dcider si la squence dentre appartient ou non au langage engendr par la grammaire. La correction de lalgorithme CYK repose sur linvariant suivant, qui est maintenu de manire ascendante : Proposition 12.1. A T[i, j]) si et seulement si A G ui . . . u j1 . La preuve de cette proposition repose sur une rcurrence simple sur la longueur des constituants ( j i). Ltape dinitialisation garantit que linvariant est vrai pour les constituants de longueur 1. Supposons quil soit vrai pour tout longueur l. Linsertion dans la cellule T[i, j] est dclenche uniquement par les situations o lon a la fois : B T[i, k], ce qui implique que B ui . . . uk1 C T[k, j], ce qui implique que C uk . . . u j1 A BC P, ce qui entrane bien que A ui . . . u j1 Quelle est la complexit de lalgorithme CYK ? La boucle principale du programme comprend trois boucles for se rptant au pire n fois, do une complexit cubique en n. Chaque cellule de T contient au plus | V | valeurs ; dans le pire des cas, il y aura autant de productions CNF que de paires de non-terminaux, do une complexit | V | 2 pour la recherche de la partie droite. Au total, lalgorithme CYK a donc une complexit totale : | V | 2 n3 . Cest un premier rsultat important : dans le pire des cas, le test dappartenance de u une grammaire CF G a une complexit polynomiale en la longueur de u, borne par un polynme de degr 3. Notez que la complexit dpend, travers la constante, de la taille de grammaire (aprs Chomsky normalisation). Direntes variantes de CYK sont possibles, selon que lon adopte un ordre de parcours qui est 144

soit les plus courtes chanes dabord (ce qui correspond lalgorithme prsent ci-dessus), soit par sous-diagonales . Ces deux parcours sont reprsents respectivement en trait pleins et pointills dans la Figure 12.2. Cette table illustre le fait que, dans le premier parcours, la cellule T[1, 4] est traite aprs la cellule T[5, 7]), cest--dire aprs lexamen de toutes les sous-chanes de longueur de 2 ; alors que dans le second parcours, elle est examine ds que deux sous-constituants sont disponibles. Cette seconde stratgie correspond une analyse en ligne, pendant laquelle les constituants maximaux sont construits au fur et mesure que les mots sont prsents lanalyseur.
8 7 6 5

4 3 2 1 2 3 4 5 6 7

F. 12.2 Deux implantations direntes de CYK Pour complter, notez que CYK est adaptable aux cas non-CNF et quil est possible, en analysant la version Chomsky-normalise, de reconstruire (au prix dune structure auxiliaire grant la correspondance entre rgles CNF et les autres) les analyses fournies par la grammaire originale.

12.1.4

Du test dappartenance lanalyse

Comment reconstruire partir de la table T les dirents arbres de drivations ? Cette tape de reconstruction, implante navement, demande deux extensions lalgorithme prcdent 10. Il sagit tout dabord de sauvegarder la manire dont un non-terminal est insr dans une cellule, en associant chaque non-terminal A de T[i, j] un ensemble BP, contenant par exemple des quintuplets3 (r, i, j, i , j ), o r est lindice de la A-production applique, et (i, j) et (i , j ) les indices dans la table des descendants de A. Avec cette extension, la construction de larbre danalyse sopre en traversant depuis la racine le graphe de descendance induit par les BP. La procdure MakeTrees de lalgorithme 11 implmente un tel parcours.
3

Si lon y rchit un peu, des quadruplets susent. Pourquoi ?

145

Algorithm 11 Construction des arbres de drivation partir dune table CYK Tree = // larbre est une pile contenant les drivations gauches MakeTrees (S, 1, n) funct MakeTrees (A, p, l)) if (l = 1) then do // une feuille foreach (A a) BP(A, p, l) do push (Tree, A a) if s = n then PrintTree (Tree) od od else do // un noeud interne foreach (A BC, i, j, i , j ) BP(A, l, s) MakeTrees(B, i, j) MakeTrees(C, i , j ) od od

12.2
12.2.1

Algorithme dEarley et ses variantes


Table active des sous-chanes bien formes

Pour linstant, nous avons considr la table comme un simple auxiliaire pour mmoriser les constituants trouvs lors de la recherche et pour reprsenter des analyses partielles et/ou multiples. Nous allons maintenant montrer comment tendre cette reprsentation pour diriger lanalyse, en utilisant la table pour reprsenter des hypothses concernant les constituants en cours dagrgation (dans une stratgie ascendante) ou concernant les buts atteindre (dans le cas dune stratgie descendante). Cela nous permettra (i) de nous aranchir de la prcondition de mise sous forme normale de Chomsky et (ii) de construire des analyseurs plus ecaces. Un premier pas, par rapport CYK, consiste stocker dans la table danalyse un peu plus que les simples terminaux reconnus entre deux positions, en utilisant de nouveau (cf. la section 7.2) le concept de rgle pointe pour reprsenter les hypothses et buts courants. Rappelons : Dnition 12.1 (Rgle pointe). Une rgle pointe est une production augmente dun point. Le point indique ltat courant dapplication de la rgle (autrement dit quel point les hypothses qui permettent dappliquer la rgle ont t satisfaites). Par exemple, des rgles pointes suivantes sont tout fait licites compte-tenu de la Table 12.1 : S GN GV S GN GV S GN GV Ces arcs sinsrent naturellement dans la table des sous-chanes bien formes, comme reprsent la Figure 12.3. Sur cette gure, la rgle pointe S GN GV entre les nuds 1 et 3 indique que lopration russie de rduction du GN a conduit reconnatre le dbut dune phrase (S), laquelle il manque encore un groupe verbal pour tre complte. 146

GN > .DET N

GN > DET . N

GN > DET N.

DET > la.

N > fille.

V >dort.

S > .GN GV GN > .GN GNP

S > GN . GV GN > GN . GNP

F. 12.3 Un exemple de table active

Le graphe de la Figure 12.3 se transpose directement dans la reprsentation tabulaire suivante (voir la Table 12.3). 4 3 2 S GN GV S GN GV, GN GN GNP DET la, GN DET N 1 la

V N

dort

f ille 3 dort

2 lle

T. 12.3 Une table danalyse en construction On appellera item tout lment gurant dans une cellule de la table danalyse. Dans le cas prsent, un item est de la forme [A , i, j], portant linformation suivante : G ui . . . u j1 . Il existe en fait deux sortes ditems dans une table danalyse : Dnition 12.2 (Items actifs et inactifs). Un item actif est un item tel que le point nest pas situ droite de la partie droite. Un item inactif est un item qui nest pas actif. Une table active est une table qui contient des items actifs. Dans lexemple de la Table 12.3, [S GN GV, 1, 3] est un item actif, alors que [N f ille, 2, 3] est inactif. Les items inactifs correspondent prcisment ce qui est reprsent (et reprsentable) dans la table dun analyseur de type CYK. Voyons comment les items actifs interviennent pour dnir des stratgies de parsage plus ecaces, en commenant par une nouvelle stratgie purement ascendante.

12.2.2

La rgle fondamentale du parsage tabulaire

Lide gnrale du parsage base de table, consiste essayer dtendre les items actifs pour les rendre inactifs, puisquune analyse complte est par dnition reprsente par un item inactif [S , 1, n]. Comment cette opration essentielle se droule-t-elle ? Par application de la rgle suivante : Dnition 12.3 (Rgle fondamentale du parsage tabulaire). Si la table danalyse T contient litem actif [A 1 B2 , i, j] et litem inactif [B 3 , j, k], alors on peut rajouter dans la table litem (actif ou inactif) : [A 1 B 2 , i, k].

147

Cette rgle, par la suite dnote comp, peut tre vue comme une rgle de dduction permettant de construire de nouveaux items en combinant des items dj prsents dans la table. Un exemple dapplication de cette rgle fondamentale se lit dans lexemple la Table 12.3 : ainsi la prsence de litem [GN DET N, 1, 2] (un GN en cours de reconnaissance), et de litem [N f ille, 2, 3] (un N complet) permet dinsrer dans la table le nouvel item [GN DETN, 1, 3] (un GN complet, de longueur 2, dbutant en position 1). Pour achever de dnir compltement un algorithme de parsage utilisant ces items, trois points supplmentaires doivent tre spcis : linitialisation de la table. En eet, la rgle fondamentale ne pourra rien driver tant que la table est vide : il faut donc dcider dune certaine manire initialiser la table. la stratgie dutilisation des rgles (ou comment insrer de nouveaux arcs actifs dans le graphe) : il faut galement des arcs actifs pour appliquer la rgle fondamentale ; la stratgie de recherche, qui correspond la dnition dun ordre pour examiner ecacement les hypothses actives. Ces spcications complmentaires doivent tre penser dans loptique permettre doptimiser lanalyse, sachant que performances des algorithmes de parsage tabulaire dpendront principalement : du nombre ditems crs en cas dchec de lanalyse : on souhaite quil y en ait le moins possible. du nombre ditems inutiles en cas de succs de lanalyse : idalement tous les arcs du graphes doivent tre utiliss dans au moins une analyse ; idalement, il ne devrait plus y avoir darcs actifs quand lanalyse se termine. Nous prsentons, dans un premier temps, une instanciation particulire du parsage tabulaire dans le cadre dune stratgie gauche droite purement ascendante. Nous prsentons ensuite diverses variantes, plus ecaces, dalgorithmes utilisant la tabulation.

12.2.3

Parsage tabulaire ascendant

Limplmentation de cette stratgie se fait directement, en compltant la rgle fondamentale par les instructions suivantes : init la rgle fondamentale ncessite de disposer ditems actifs. La manire la plus simple pour en construire est dinsrer, pour chaque production A de P, et pour chaque position dans la phrase, une hypothse concernant le dbut de la reconnaissance de A. Comme ces nouveaux items ne couvrent aucun terminal de lentre courante, leur indice de dbut sera conventionnellement pris gal lindice de n. Cette tape donne donc lieu des items [A , i, i] selon : foreach (A ) P do foreach i (1 . . . n) do insert [A , i, i] in T od od scan il est galement ncessaire de dnir une stratgie pour concernant la reconnaissance des terminaux. La rgle suivante exprime le fait que si un item actif attend un terminal, alors cet lment trouv sur lentre courante (u) permettra le dveloppement de litem, soit formellement : if [A a, i, j] T u j = a then insert [A a , i, j + 1] in T La mise en uvre de cette stratgie sur lexemple de la phrase : un pre gronde sa lle est illustre la Table 12.4. Cette table a t dlibrment expurge des (trs nombreux) items crs 148

linitialisation, qui sont nanmoins utiliss pour driver de nouveaux items. Num. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Item [DET un, 1, 2] [GN DET N, 1, 2] `re, 2, 3] [N pe [GN DET N, 1, 3] [S GN GV, 1, 3] [GN GN GNP, 1, 3] [V gronde, 3, 4] [GV V , 3, 4] [GV V GN, 3, 4] [GV V GNP, 3, 4] [GV V GN GNP, 3, 4] [GV V GNP GNP, 3, 4] [S GNGV , 1, 4] [DET sa, 4, 5] [GN DET N, 4, 5] [N f ille, 5, 6] [GN DET N, 4, 6] [GV V GN, 3, 6] [GV V GN GNP, 3, 6] [S GNGV , 5, 1] [S GN GV, 4, 6] [GN GN GNP, 4, 6] rgle scan comp scan comp comp comp scan comp comp comp comp comp comp scan comp scan comp comp comp comp comp comp Antcdents [DET un, 1, 1] [GN DET N, 1, 1] et 1 `re, 2, 2] [N pe 2 et 3 [S GN GV, 1, 1] et 4 [GN GN GNP, 1, 1] et 4 [V gronde, 3, 3] [GV V, 3, 3] et 7 [GV V GN, 3, 3] et 7 [GV V GNP, 3, 3] et 7 [GV V GN GNP, 3, 3] et 7 [GV V GNP GNP, 3, 3] et 7 5 et 8 [DET sa, 4, 4] [GN DET N, 4, 4] et 14 [N f ille, 5, 5] 14 et 16 9 et 17 11 et 17 6 et 18 [S GN GV, 4, 4] et 17 [GN GN GNP, 4, 4] et 17

T. 12.4 Parsage tabulaire ascendant De manire implicite, le remplissage de la Table 12.4 obit une stratgie dapplication des rgles suivant : insrer tous les items rsultant de lapplication de init sil est possible dappliquer comp, choisir dappliquer comp sinon sil est possible dappliquer scan, appliquer scan Indpendamment dune choix dune stratgie de prioritisation des rgles, limplantation dun algorithme demande de maintenir dans des structures spares les items avant et aprs que lon a valuer leurs consquents . Dans le jargon du domaine, ces deux structures sont la table (ou chart) et lagenda. De manire trs schmatique, lalgorithme prcdent se rcrit en insrer tous les items rsultant de lapplication de init dans lagenda. prendre un item de lagenda, linsrer dans la table, et insrer tous ses consquents directs dans lagenda. Resterait encore pour achever la spcication complte dun algorithme dnir comment choisir entre plusieurs applications concurrentes de la mme rgle (ainsi la rafale de comp donnant lieu aux items 8 13). Ainsi qu mieux analyser linuence des malformations possibles de la grammaire (productions vides, productions non-gnratives, rcursions gauches...). Une analyse plus pousse de cet algorithme rvle un certain nombre dinecacits : 1. init met disposition de comp tous les lments potentiellement utiles pour faire de lanalyse ascendante. Cette tape est toutefois bien trop prolixe et conduit linsertion dans la table de nombreux items qui ne seront jamais considrs ; le cas le plus agrant tant linsertion ditems actifs introduisant des terminaux qui napparaissent mme pas dans la phrase.

149

2. comp est parfois utilise inutilement : ainsi la cration de litem (inutile) 13, qui ne pourra jamais tre dvelopp puisque S napparat dans aucune partie droite. De mme, 21 et 22 sont inutiles, 21 doublement dailleurs parce que (i) le GV manquant ne pourra pas tre trouv au del de la position 6 et (ii) quand bien mme il le serait, reconnatre un S en position 4 ne pourra que conduire lanalyse dans une impasse. Nous examinons, dans les variantes dcrites ci-dessous, divers remdes ces inecacits.

12.2.4

Coin gauche

Lapproche coin gauche consiste essentiellement revenir une stratgie initialisation de la table semblable celle mise en oeuvre pour CYK. Cela suppose que tous les terminaux soient introduits par des rgles de la forme A a et que ces rgles soient les seules introduire des terminaux.4 Considrons que cest bien le cas, comme dans la Table 12.1, ce qui nous autorise alors remplacer ltape init par une nouvelle dnition selon : for i (1 . . . n) do foreach A ui insert ([A ui , i, i + 1]) in T od od Le problme est maintenant de dclencher linsertion ditems actifs, qui permettront de nourrir la rgle fondamentale (comp). Lide de lanalyse du coin gauche consiste mettre une hypothse sur la reconnaissance dun constituant que si lon a dj compltement achev de reconnatre son coin gauche (cest--dire le premier lment, terminal ou non terminal, de la partie droite). Cette stratgie se formalise par la rgle leftc : if [Y , i, j] T then foreach X Y P do insert ([X Y ], i, j) in T od Cette nouvelle rgle eectue en un coup la reconnaissance du coin gauche partir dun item inactif, l o lalgorithme prcdent dcomposait cette reconnaissance en une tape init (crant un item actif initial) et une tape de comp (reconnaissant le coin gauche). En prsence de productions , il faudrait galement se donner la possibilit de reconnatre des productions vides par une rgle de type : foreach A P do foreach i 1 . . . n) do insert ([A ], i, i) in T od od
Ces deux conditions sont de pure convenance : on pourrait aussi bien dnir un analyseur du coin gauche pour une grammaire ayant une forme quelconque et traiter les terminaux au moyen de deux rgles : lune eectuant un scan spcique pour les terminaux correspondant des coins gauches, et lautre eectuant un scan pour les terminaux insrs dans les queues de parties droites. Sauriez-vous mettre en oeuvre une telle analyse ?
4

150

Il sut maintenant, pour complter cette description, de spcier un ordre dapplication de ces direntes rgles. Les ordonner selon : comp est prioritaire sur leftc, elle-mme prioritaire sur init, conduit la trace suivante (voir la Table 12.5). Notons quici encore le choix dappliquer leftc avant den avoir ni avec les appels init nest pas une ncessit et un autre ordre aurait en fait t possible. Num. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Item [DET un, 1, 2] [GN DET N, 1, 2] `re, 2, 3] [N p e [GN DET N, 1, 3] [S GN GV, 1, 3] [GN GN GNP, 1, 3] [V gronde, 3, 4] [GV V , 3, 4] [S GN GV , 1, 4] [GV V GN, 3, 4] [GV V GNP, 3, 4] [GV V GN GNP, 3, 4] [GV V GNP GNP, 3, 4] [DET sa, 4, 5] [GN DET N, 4, 5] [N f ille, 5, 6] [GN DET N, 4, 6] [GV V GN, 3, 6] [GV V GN GNP, 3, 6] [S GN GV , 1, 6] [S GN GV, 4, 6] [GN GN GNP, 4, 6] rgle init le f tc init comp le f tc le f tc init le f tc compl le f tc le f tc le f tc le f tc init le f tc init compl comp comp comp le f tc le f tc Antcdents 1 2 et 3 4 4 7 5 et 8 7 7 7 7 14 15 et 16 10 et 17 12 et 17 6 et 18 17 17

T. 12.5 Parsage tabulaire : stratgie du coin gauche La dirence avec la trace prcdente (cf. la Table 12.4) ne saute pas aux yeux ; elle est pourtant sensible puisque les 22 items de la Table 12.5 sont les seuls items construits, alors quil fallait, pour avoir la liste complte des items de la table prcdente, y ajouter les n | P | items initiaux. Remarquons galement la prsence dun certain nombre ditems inutiles dans la Table 12.5 : ainsi les items 6, 8, 9, 19, 21 et 22, soit presquun item sur trois.

12.2.5

Une stratgie mixte : lalgorithme dEarley

Rptons-nous : lecacit dun systme de parsage dpend fortement du nombre ditems qui ont t inutilement ajouts dans la table (et corrlativement dvelopps). Nous lavons mentionn plus haut, dans le cas dun algorithme purement ascendant, lajout ditems inutiles est en fait chose courante. Considrez, en eet, lanalyse dune phrase comme : le ls de ma tante pleure. La reconnaissance du groupe nominal (GN) ma tante, entrane linsertion ascendante des hypothses correspondant la rgle S GN GV . Ces hypothses vont, de plus, tre prolonges, puisquon va bien trouver par la suite le GN (ma tante ) comme le GV (pleure ). Pourtant, il est impossible de trouver ici une phrase, puisquon laisserait inanalyss les trois premiers mots de la phrase (le ls de ).

151

Lide de lalgorithme dEarley (Earley, 1970) est de guider la stratgie purement ascendante dcrite la section 12.2.3 par des informations de contrle descendantes, qui vont permettre de ne dvelopper que les items qui peuvent intervenir dans une analyse complte. cet eet, la table est complte par des items correspondant des prdictions (descendantes) ; un hypothse ne sera alors dveloppe que si elle est correspond une telle prdiction. Cette ide est mise en uvre en remplaant ltape dinitialisation aveugle de lalgorithme purement ascendant par une initialisation plus raisonnable, consistant faire lhypothse minimale que lon dbute la reconnaissance dune phrase (S) la position 1. Ceci est formalis par une nouvelle version de init : foreach S do insert ([S , 1, 1]) in T od La mise en uvre de cette approche demande une nouvelle rgle exprimant les prdictions descendantes : il sagit dexprimer le fait quon ne fait lhypothse de dmarrage dun nouveau constituant que si ce constituant est attendu, ie. que si sa reconnaissance pourra tre utilise pour dvelopper un item dj existant. Cette nouvelle rgle (pred ) scrit donc5 : if [X B, i, j] T then insert ([B , j, j]) in T Lide gnrale de lalgorithme est alors la suivante : initialiser les items actifs correspondants S avec init appliquer les trois rgles restantes, avec lordre de priorit suivant : comp est prioritaire sur pred, lui-mme prioritaire sur scan. La Table 12.6 donne la trace de lutilisation de cette stratgie sur la phrase Le ls de ma tante pleure. Conformment aux ides originales de Earley, nous nous sommes permis une petite licence consistant eectuer un regard avant de 1 au moment de chercher les terminaux. Ceci conomise tout un tas de prdictions inutiles ditems tels que [DET ma]... Un rsultat identique serait obtenu en compltant linitialisation par un remplissage la CYK des items introduisant des terminaux. Ce scan un peu amlior est not scan+. Lincorporation du contrle descendant des hypothses permet donc eectivement dviter de construire un certain nombre ditems, comme en particulier ceux qui correspondraient une hypothse de dmarrage de phrase au milieu (cest--dire aprs la reconnaissance du GN ma tante) de lnonc. Sous cette forme, il apparat toutefois que de nombreux items inutiles sont cres, soit parce que le mcanisme de prdiction est trop libral (ainsi les items 10 14, 28 33 (seul 29 est utile), ou ceux crs aprs litem 40 ; soit parce que la compltion agit sur des items sans avenir (ainsi les items 36 39). Extensions Il est donc souhaitable et possible de raner encore cet algorithme : en incorporant des possibilits de regard avant (look-ahead), qui vont permettre, nouveau, dviter de dvelopper certains items. Ainsi par exemple, litem 25 est insr par prdiction dun GNP. Or, il surait de regarder linput pour raliser que cest impossible, puisquun GNP ne peut dmarrer quavec une des prpositions, et que linput contient un verbe. Comme pour les analyseurs LL, ce type de ltrage demanderait de calculer la table des FIRST. Il est galement
Une manire dinterprter cette rgle est de la voir comme simulant, de concert avec comp, la construction dynamique dune table danalyse LR (voir la section 7.2).
5

152

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

[S GN GV, 1, 1]) [GN DET N, 1, 1]) [GN GN GNP, 1, 1]) [DET le, 1, 2]) [GN DET N, 1, 2]) [N f ils, 2, 3]) [GN DETN, 1, 3]) [S GN GV, 1, 3]) [GN GN GNP, 1, 3]) [GV V, 3, 3] [GV V GN, 3, 3] [GV VGNP, 3, 3] [GV VGNGNP, 3, 3] [GV V GNP GNP, 3, 3] [GNP PP GN, 3, 3] [PP de, 3, 4]) [GNP PP GN, 3, 4] [GN DET N, 4, 4]) [GN GN GNP, 4, 4]) [DET ma, 4, 5]) [GN DET N, 4, 5]) [N tante, 5, 6]) [GN DET N, 4, 6]) [GNP PP GN, 3, 6] [GN GN GNP, 1, 6]) [S GN GV, 1, 6]) [GN GN GNP, 1, 6]) [GV V, 6, 6] [GV V GN, 6, 6] [GV VGNP, 6, 6] [GV VGNGNP, 6, 6] [GV V GNP GNP, 6, 6] [GNP PP GN, 6, 6] [V pleure, 6, 7]) [GV V , 6, 7] [GV V GN, 6, 7] [GV V GNP, 6, 7] [GV V GNGNP, 6, 7] [GV V GNP GNP, 6, 7] [S GN GV , 1, 7]) [GN DET 7, 7] [GNP PP GN, 7, 7] ...

init pred pred scan+ comp scan+ comp comp comp pred pred pred pred pred pred scan+ comp pred pred scan+ comp scan+ comp comp comp comp comp pred pred pred pred pred pred scan+ comp comp comp comp comp comp pred pred pred

1 1 2 1,4 5 2, 6 1, 7 3,7 8 8 8 8 8 9 15 15 et 16 17 17 18 18 et 20 21 21 et 22 17 et 23 24 et 9 1, 25 3,7 26 26 26 26 26 27 33 34 34 34 34 34 26 et 35 36 37 41

T. 12.6 Dveloppement de la table danalyse avec lanalyseur dEarley

153

possible de ltrer des compltions abusives par utilisation dun regard avant : de cette manire les items 36 39 pourraient-ils tre galement vits. Le bnce de ces stratgies est toutefois contest, dans la mesure o elles induisent un cot algorithmique non ngligeable. en retardant les prdictions jusqu la reconnaissance dun coin gauche. Ceci peut se voir comme une extension relativement naturelle de lalgorithme de la section 12.2.4, consistant : ajouter un item supplmentaire descendant linitialisation, de la forme [S , 1, 1] ajouter une condition supplmentaire la rgle du coin gauche, demandant quun item [A B , i, j] ne soit insr que (i) si [B , i, j] existe (coin gauche normal) et si (ii) A est prdit de manire descendante, correspondant un item [X Y, l, i], et A peut dbuter une drivation de Y. Complexit Lalgorithme dEarley permet de construire des analyseurs pour des grammaires quelconques , avec une complexit galement O(n3 ) : lanalyseur doit considrer un par un tous les items de lagenda pour les insrer dans la table. Le nombre de productions pointes tant une constante de la grammaire, il y a au maximum de lordre de O(n2 ) items ; lexamen dun item [A B , i, j], notamment ltape de compltion, demande de chercher tous les items inactifs potentiellement utilisables [B , j, k], introduisant un troisime indice libre k entre 1 et n. On obtient ainsi la complexit annonce. Dans la pratique, les analyseurs obtenus sont souvent quasi-linaires6 . On peut nalement montrer que la complexit est dans le pire cas O(n2 ) pour des grammaires non-ambigus. Prxe viable Une proprit remarquable de lalgorithme dEarley est sa capacit localiser sans dlai les erreurs. Cette proprit, dite du prxe viable, garantit quune erreur est dtecte par lalgorithme lors du scan du premier symbole ui tel que u1 . . . ui nest pas un prxe dau moins un mot de L(G). Preuve. Cest vrai pour les items initiaux. Supposons que ce soit vrai aprs insertion du nime item et considrons linsertion dun item supplmentaire. Deux cas sont considrer : soit cet item provient dune application de pred ou de comp : dans ce cas, le nouvel item [B , i, j] ne couvre aucun symbole terminal supplmentaire ; la proprit du prxe viable reste donc satisfaite. soit cet item provient dune application de scan : ceci signie que le symbole lu sur lentre courante avait t prdit et est donc susceptible de donner lieu un dveloppement de lanalyse.

12.3
12.3.1

Complments
Vers le parsage dductif

Nous avons pour linstant dvelopp de manire relativement informelle les algorithmes de parsage tabulaire. Il nous reste aborder maintenant une dernire question importante, qui est celle de la correction de ces algorithmes. Comment sassurer, que formaliss sous la forme dune technique de remplissage dune table, ces algorithmes ne manquent pas des analyses ? Informellement, deux conditions doivent tre simultanment remplies pour assurer la validit de cette dmarche :
6

En particulier si la grammaire est dterministe !

154

chaque analyse possible doit tre reprsentable sous la forme dun item de la table. Cest videmment le cas avec les items que nous avons utilis la section prcdente, qui expriment une analyse complte de u1 . . . un par un item de la forme [S , 1, n]. le mcanisme de dduction des items doit tre tel que : seuls sont dduits des items conformes la stratgie de parsage ; tous les items conformes sont dduits une tape de donne de lalgorithme : proprit de compltude. La notion de conformit introduite ici est relative aux proprits quexpriment les items. Ainsi, il est possible de montrer que tout item de lalgorithme dEarley vrie la proprit suivante (on parle galement dinvariant) : [A , i, j] T S u1 . . . ui1 A ui . . . u j1

Lorsque ces proprits sont remplies, on dit que lalgorithme est correct. Des rsultats gnraux concernant la correction des algorithmes tabulaires sont donns dans (Sikkel and Nijholt, 1997), ou encore dans (Shieber et al., 1994), qui r-exprime les stratgies tabulaires dans le cadre de systmes de dductions logiques.

12.3.2

Dautres stratgies de parsage

Lalternative principale aux techniques tabulaires pour le parsage de grammaires ambigus est le parsage LR gnralis (GLR) (Tomita, 1986). Lide de base de cette approche conduire une analyse LR classique en grant les ambiguts en largeur dabord. Rencontrant une case qui contient une ambigut, on duplique simplement la pile danalyse pour dvelopper en parallle les multiples branches. Sen tenir l serait catastrophique, pouvant donner lieu un nombre exponentiel de branches maintenir en parallle. Cette ide est sauve par la factorisation des piles dans un graphe, permettant dviter de dupliquer les dveloppements des piles qui partagent un mme futur. Cette factorisation permet de rcuprer la polynomialit de lalgorithme, qui, comme celui dEarley a une complexit en O(n3 ) dans le pire cas, et souvent meilleure pour des grammaires pas trop ambigus . Les meilleurs rsultats thoriques pour le parsage des grammaires CF sont donns par lalgorithme propos par dans (Valiant, 1975), qui promet une complexit en O(22.81 ), en ramenant le problme du parsage celui du produit de matrices boolennes, pour lequel il existe des algorithmes extrmement ecaces. Ce rsultat nest toutefois intressant que dun point de vue thorique, car la constante exhibe dans la preuve de Valiant est trop grande pour que le gain soit rellement signicatif dans les applications les plus courantes. Pour conclure avec les questions de la complexit, il est intressant (et troublant) de noter que pour limmense majorit des grammaires, on sait construire (parfois dans la douleur) des analyseurs linaires. Par contre, on ne dispose pas aujourdhui de mthode gnrale permettant de construire un analyseur linaire pour nimporte quelle grammaire. En existe-t-il une ? La question est ouverte. Par contre, dans tous les cas, pour lister toutes les analyses, la complexit est exponentielle7 , tout simplement parce que le nombre danalyses est dans le pire des cas exponentiel.

Si lon ny prend garde les choses peuvent mme tre pire, avec des grammaires qui seraient inniment ambigus.

155

Chapitre 13

Grammaires darbre adjoints


Ce chapitre nous entrane la dcouverte dun nouveau formalisme de description de langages, les grammaires darbres adjoints (en anglais Tree adjoining grammars, ou TAGs). Ce formalisme est intressant plus dun titre : tout dabord, cest un reprsentant de la famille des grammaires darbres, qui constituent des modles formels oprant non plus sur des chanes, mais sur des objets structurs prenant la forme darbres. Ce modle est intressant un second titre, en ce quil permet non seulement de reprsenter tous les langages hors contexte, mais encore un certain nombre de langages strictement contextuels. En troisime lieu, nous verrons que ce formalisme ne permet pas de reprsenter tous les langages contextuels, mais seulement une sous-classe dentre eux, connue sous le nom de classe des langages faiblement contextuels (en anglais mildly context sensitive languages ). Cette limite dexpressivit des TAGs a une contrepartie bienvenue : il existe des algorithmes danalyse polynomiaux pour les TAGs, qui gnralisent les algorithmes tabulaires prsents au chapitre 12. Il existe en fait une cinquime raison de sintresser aux TAGs, qui est de nature plus linguistique : dans leur version lexicalise, elles fournissent un formalisme cohrent pour dcrire le comportement combinatoire des objets syntaxiques. Ce chapitre sorganise comme suit : dans un premier temps nous introduisons ce nouveau formalisme et discutons de quelques proprits formelles importantes. La seconde section prsente un algorithme polynomial pour analyser les TAGS, qui transpose aux TAGs lalgorithme CYK tudi la section 12.1.

13.1
13.1.1

Les grammaires darbre adjoints


Introduction

Comme leur nom lindique, les grammaires darbres, contrairement aux grammaires syntagmatiques traditionnelles, manipulent des chanes de symboles hirarchiquement structures, prenant la forme darbres tiquets. Dans le formalisme des grammaires darbres adjoints1 , les arbres sont susceptibles de se combiner librement par une unique opration binaire, lopration dadjonction, qui permet de driver des arbres partir darbres dj existants.
Lutilisation de modles oprant sur les arbres ne se limite pas ce formalisme : ainsi, par exemple, il est possible de dnir des automates darbres, qui dans leur version lmentaire ont une expressivit quivalente aux grammaires CF.
1

156

Ladjonction Commenons par une analogie : ladjonction de deux arbres est analogue (dans le domaine des arbres) ce que ferait une insertion dans le domaine des chanes : quand u sinsre dans v, v est littralement coupe en deux : la partie gauche de u, v1 , et la partie droite de u, v2 . Le rsultat de cette opration est v1 uv2 et est toujours bien dni. Transposer cette opration sur des arbres non tiquets revient dtacher verticalement un sous-arbre v2 de v, et le rabouter sur une feuille de u ; ce nouveau sous-arbre est ensuite rabout v1 , la partie haute de larbre. Lorsque lon transpose maintenant cette opration des arbres dont les nuds portent des tiquettes symboliques, il faut prendre une prcaution supplmentaire, pour sassurer que w peut se concatner v1 , et v2 u. Cette vrication demande de distinguer en fait deux types darbres : ceux qui reoivent les insertions, quon appelle les arbres initiaux ceux qui sont sinsrent (sadjoignent), quon appelle les arbres auxiliaires, qui ont une forme bien particulire : ils contiennent ncessairement une feuille distingue qui porte la mme tiquette que la racine. Cette feuille est appele le nud pied et est distingue notationnellement par un astrisque. Ladjonction ne peut oprer sur un nud pied. La dirence de comportement entre ces deux types darbres est illustre la Figure 13.1, qui reprsente une adjonction de larbre auxiliaire sur larbre initial . La racine et le pied de sont tiquets par le mme symbole X, qui tiquette galement le nud de sur lequel opre ladjonction.
X X 11111 00000 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111

X*

X 11111 00000 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111

F. 13.1 Lopration dadjonction Une autre analogie parlante consiste voir ladjonction comme sparant en deux le nud sur lequel elle opre ; sur la partie haute se greera la racine de larbre adjoint ; la partie basse venant se greer sur le pied de larbre adjoint. Dernire remarque importante : ladjonction est une opration non contextuelle, signiant quelle est susceptible de concerner un nud indpendamment de ses voisins.

157

Dnitions Formellement, une grammaire darbres adjoints est dnie par un quintuplet G = (, V, S, I, A), o et V sont deux ensembles nis et disjoints de symboles, correspondant aux lments respectivement terminaux et non-terminaux de G, S est un symbole distingu de V (laxiome) et o I et A sont des ensembles nis darbres respectivement initiaux et auxiliaires, tiquets par des symboles de V et respectant les contraintes suivantes : les terminaux ne peuvent tiqueter que des feuilles les nuds internes sont tiquets par des non-terminaux il y a exactement un nud pied par arbre auxiliaire Lensemble E = I A regroupe tous les arbres lmentaires, que lon oppose ainsi aux arbres drivs, cest--dire aux arbres construits par une ou plusieurs oprations dadjonction. Une drivation TAG encode une srie de combinaisons entre arbres : on note 1 2 si larbre driv 2 est le rsultat dune adjonction sur un nud de 1 ; et la clture rexive et transitive de . Le langage darbre T(G) engendr par une TAG est dni comme tant lensemble de tous les arbres quil est possible de driver des arbres initiaux en utilisant un nombre arbitraire de fois lopration dadjonction, soit formellement : T(G) = {, 0 I tq. 0 } Par dnition, T(G) contient tous les arbres initiaux. On appelle frontire dun arbre la squence de symboles recueillis sur les feuilles lors dun parcours prxe de larbre. Si est un arbre, on notera sa frontire. Un arbre est dit complt si sa frontire ne contient que des symboles terminaux. On dnit alors : Dnition 13.1. Le langage L(G) engendr par une grammaire darbres adjoints G est dni par : L(G) = {w , T(G), w = et a pour racine S} On appelle langage darbre adjoint (en anglais Tree Adjoining Language) un langage engendr par une TAG. titre dillustration, considrons la grammaire suivante, dnie par ({a, b}, {S}, S, {}, {}), o et , ainsi que larbre driv , rsultant de ladjonction de sur le nud racine de , sont reprsents dans la Table 13.1. S a
r r

S b a
rr

S b a
r r

S b

( )

()

( )

T. 13.1 Une grammaire TAG pour {an bn , n > 0}

Variantes Nous lavons mentionn, ladjonction ne peut oprer sur un nud pied. Une autre contrainte, souvent propose dans la littrature, consiste interdire les adjonctions rptes sur un mme nud. Ce type de contrainte peut tre gnralis en distinguant systmatiquement dans les arbres initiaux les nuds sur lesquels ladjonction est possible, interdite, ou encore 158

obligatoire. Cette distinction est traditionnellement marque par les indices respectivement NA et OB sur ces deux derniers types de nud. Si lon interdit les adjonctions multiples sur un mme nud, la grammaire prcdente (13.1) nest plus valide. {an bn , n > 0} est engendr par les deux grammaires de la Table 13.2, utilisent respectivement 1 et 2 comme unique arbre auxiliaire. Lajout de contraintes locales sur les nuds internes augmente strictement, nous le verrons, lexpressivit de ce formalisme. S b SNA
rr

SNA b a
r r

S b

S () (1 )

S (2 )

T. 13.2 Des grammaires TAG avec contraintes locales pour {an bn } Une autre variante des TAGs considre une seconde opration binaire, lopration de substitution. Dans cette variante, les feuilles dun arbre lmentaire peuvent galement tre tiquets par des variables. Lopration de substitution consiste alors greer un arbre de racine (non-terminale) X, sur une feuille dun arbre tiquete par le mme symbole X. Notationnellement, les feuilles sur lesquelles une opration de substitution peut porter (on parle galement de sites de substitution) sont identies par une che verticale descendante, comme sur la Figure 13.2. Les nuds recevant une susbstitution ne peuvent recevoir dadjonction. Lajout de cette nouvelle opration
X 11111 00000 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 X

X 11111 00000 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111 00000 11111

F. 13.2 Lopration de substitution ne modie pas lexpressivit des TAGs : au prix de transformations des arbres lmentaires, tout langage engendr par une TAG avec substitution peut galement tre engendr par une TAG sans substitution. 159

Drivations Une drivation note une squence doprations binaires. Comme pour les CFG, les drivations se reprsentent par des arbres, qui permettent de sabstraire de lordre dans lequel les oprations sont eectues. Que reprsenter dans ces arbres ? les arbres impliqus, qui sont reprsents par leur noms, larbre recevant lopration dominant lautre oprande ; la position o lopration a lieu, identie par le numro (par exemple par le numro de Gorn2 ) du nud sur lequel porte lopration ; enn le type dopration (adjonction ou substitution), traditionnellement distingu par des branches gures respectivement en trait continu et discontinu. Illustons cette notion laide dun exemple tir du domaine de la syntaxe naturelle, en considrant les arbres de la Table 13.3, qui permet dengendrer, par exemple, la ville dort, la ville dort profondment, la petite ville ne dort pas. GN N DET
rr

DET la ville

S GV GN
r r

dort

(1 ) N petite
r r

(2 ) N N V
r rr

(3 ) GV ne
r rr

ment pro f onde (2 )

pas

(1 )

(3 )

T. 13.3 Une grammairette pour les langues naturelles Larbre de drivation de la phrase la petite ville ne dort pas est reprsent (avec toutefois un seul type de traits) la Figure 13.3. La Figure 13.3 permet dillustrer deux proprits importantes des TAGS : la dirence des CFGs, il existe une dirence entre larbre de drivation, qui encode lhistoire des oprations ayant donn lieu un arbre et larbre driv, qui est le rsultat de cette suite dopration. comme pour les CFG, larbre de drivation reprsente un ensemble de squences doprations, lordre dans lequel les oprations ayant lieu tant, pour partie, arbitraire. Ainsi, dans lexemple prcdent, ladjonction de 3 peut se raliser avant ou aprs lopration de substitution.

13.1.2

Quelques proprits des TAGs

Nous introduisons ici les principales proprits des TAGs, en nous inspirant principalement des travaux conduits par A. Joshi et ses collgues et dont les principaux rsultats sont prsents dans
2 Lindice de Gorn dun nud encode numriquement le chemin (unique) entre la racine de larbre et le nud selon le schma rcursif suivant : la racine possde lindice 1 le j-me ls du nud dindice i porte le numro i. j.

160

3 2 (1.1.1) 1 (1)
r rr

3 (1.1.2)

F. 13.3 Un arbre de drivation Larbre reprsentant la petite ville ne dort pas est obtenu par la suite doprations suivantes : substitution de larbre 2 sur le site DET, dindice de Gorn 1.1, de labre 1 . Larbre rsultant a la ville comme frontire. substitution de larbre rsultant sur le site GN de larbre 3 , construisant un arbre de frontire : la ville dort. adjonction englobante de larbre 3 sur le nud interne dindice 1.1.2 (le verbe) de 3 . (Joshi et al., 1975; Joshi, 1985; Vijay-Shanker and Joshi, 1985; Joshi and Schabes, 1997). Les Langages darbres adjoints (TAL) Nous prsentons ici une discussion de la capacit gnrative des TAG, tout dabord dans leur version originale, puis dans le cas o lon autorise des contraintes locales sur les adjonctions. CFL TAL Proposition 13.1. Pour tout langage hors-contexte L, il existe une TAG G telle que L(G ) = L. Preuve. La preuve repose sur une sparation entre les parties rcursives et non-rcursives de la grammaire CF G reprsentant L. Appelons L0 lensemble des phrases de L dont la drivation dans G ne contient aucune rcursion de la forme S A A w. L0 est ncessairement ni, ainsi que lensemble I des arbres de drivations des mots quil contient. I constitue lensemble des arbres initiaux de G . Considrons maintenant lensemble des terminaux rcursifs de G, cest--dire qui sont tels que A A. Il est possible, pour chaque non-terminal rcursif A, disoler (i) un ensemble de drivations A A minimal (ie. ne contenant pas dautre occurence de A) (ii) des ensembles nis de mots drivables non-rcursivement de et de . On en dduit, pour chaque non-terminal rcursif un ensemble ni darbres auxiliaires, puis nalement une grammaire TAG qui engendre le mme langage que G. Il est intressant de noter que cette construction induit une TAG qui engendre les mmes arbres de drivation que la grammaire CF initiale et qui lui est donc fortement quivalentes. Une autre manire, plus directe, de prouver ce rsultat consiste remarquer que, dans la variante autorisant la substitution, les rgles CF se transforment trivialement en arbres lmentaires : chaque non-terminal gurant en partie droite devenant un site de substitution dans larbre lmentaire correspondant. Le point remarquable de cette transformation est quelle ne cre aucun arbre auxiliaire. Le fonctionnement des rcritures eectues par une grammaire hors-contexte est donc intgralement pris en charge par lopration de substitution. TAL CL plus. Les TAL contiennent donc tous les langages hors-contexte et mme un (petit) peu

161

Considrons, en eet, la grammaire TAG dont lunique arbre initial () et les deux arbres initiaux (1 et 2 ) sont prsents dans la Table 13.4 : S e a S
rr

T T c a
rr

S c

b ()

rr

rr

(1 )

(2 )

T. 13.4 Une grammaire TAG engendrant un langage contextuel Quel est le langage engendr par la grammaire de la Table 13.4 ? En tudiant les drivations possibles avec cette grammaire, il apparat quelle engendre {wecn , n 0}, o w satisfait de plus : | w | a =| w | b = n si u est un prxe de w, alors | u | a | u | b Ces deux proprits se dmontrent simplement par infrence sur la longueur des drivations. Ce langage nest pas un langage CF, son intersection avec le langage rationnel {a b ec } donnant lieu au langage strictement contextuel {an bn ecn , n 0}. Les TAL constituent donc un sur-ensemble strict des langages CF. Un point imporant mrite dtre soulign : le surcrot dexpressivit provient uniquement des arbres ayant une profondeur au moins 2, qui sont en fait ceux par lesquels la contextualisation des rcritures est opre. Si lon se restreint uniquement aux arbres de profondeur 1, dnissant la sousclasse des TAGs simples, alors on retrouve une expressivit exactement gale celle des langages hors-contexte (Joshi et al., 1975). Lintuition est ici que lon ne peut introduire de dpendance dans les rcritures avec seulement des arbres de profondeur 1. Une autre condition ncessaire au saut dexpressivit est lexistence (ou la possibilit de driver) darbres auxiliaires englobants, cest-dire qui sont tels que leur adjonction conduit une insertion simultane de symboles de part et dautre du nud sur lequel porte ladjonction. Si lon restreint, en eet, les adjonctions oprer de manire latrale, signiant que le nud pied est soit le premier, soit le dernier symbole de la frontire, on retrouve de nouveau une expressivit gale celle des grammaires hors-contexte (Schabes and Waters, 1995). Le gain dexpressivit est toutefois modeste : dans leur forme primaire, les TAGs ne peuvent en eet reprsenter le langage contextuel {an bn ecn , n 0}. La raison en est claire : un arbre auxiliaire pour ce langage devra avoir un nombre gal de a, de b et de c. Soit un tel arbre, de racine X. Quelle forme peut prendre la frontire de ? X abc : dans ce cas ladjonction de sur sa propre tte conduit une frontire non-conforme : X abcabc aX bc : dans ce cas ladjonction de sur sa propre tte conduit une frontire non-conforme : aaX bcbc ... Lautorisation de contraintes locales sur ladjonction permet de gagner (encore un peu) en expressivit. Rappelons que ces contraintes expriment, pour chaque nud interne dun arbre lmentaire : si une adjonction est possible ou pas si elle est possible, quels arbres peuvent sadjoindre si ladjonction est facultative ou obligatoire. Dans ce dernier cas, un arbre complt devra ne contenir aucun nud encore en attente dune adjonction. 162

Considrons lexemple de la 13.5, qui inclut de telles contraintes. Cette grammaire engendre le langage L = {an bn cn dm } : toute adjonction de augmentant simultanment de nombre de a et de c de part et dautre de b, toute adjonction de augmentant simultanment le nombre de b et de d de part et dautre de c. SNA a
r rr r

SNA d a
r r

SNA S c b S
r r

r r

( )

()

()

T. 13.5 Une grammaire TAG pour {an bm cn dm } Lajout ces contraintes permet galement de dcrire dautres langages notoirement contextuels, tels que {an bn cn }, ou encore le langage copie {wew}. Lcriture des TAGs correspondantes est laisse en application. Enchassement et dpendances croises Les TAGs permettent donc de reprsenter certains langages contextuels. Ils ne peuvent pas, de loin, les engendrer tous. Considrons en eet sur les drivations de la Table 13.6, engendrant le langage contextuel {an bn ecn }.

S e a

SNA
rr

TNA T c a
rr

S c

b ()

rr

rr

()

()

T. 13.6 Une grammaire TAG pour {an bn ecn } Faisons alors lopration suivante, consistant identier par un mme indice les terminaux appartenant originellement un mme arbre. Lexamen des drivations montre que lobtient des squences de la forme : a 1 a 2 . . . a n b n . . . b 1 c1 . . . cn Les paires ai bi comme les paires bi ci se correspondent par enchassement ; ce nest pas le cas des paires ai ci qui exhibent des dpendances croises. Il est clair quon ne peut gnrer trois appariements enchasss, mais il nest en fait pas possible non plus dobtenir avec des TAGs trois dpendances croises, consistant obtenir une squence de la forme : a1 a2 . . . an b1 b2 . . . bn c1 . . . cn La limitation des TAGs apparat ici clairement : les TAGs, comme les CFG, peuvent reprsenter un nombre arbitraire dappariements entre un nombre ni de symboles apparis ; elles peuvent de 163

surcrot reprsenter des dpendances croises (cross serial dependencies ), ce que ne permettent pas les CFG. Il existe toutefois une restriction forte sur des dpendances croises : seules un nombre limit dentre elles peuvent tre reprsentes, correspondant au maximum seulement deux (ensembles de) dpendances croises fonctionnant de manire indpendante. Croissance borne Une des avantages du formalisme TAG est quil ne manipule que des arbres. Les arbres dun TAL se dduisent les uns des autres par adjonction dun arbre auxiliaire sur un arbre complt, donnant lieu une croissance strictement borne de la longueur des mots. Entre deux mots dun TAL, la dirence de longueur est, en eet, majore par la longueur de la plus longue frontire dun arbre adjoint. Cette observation permet de conclure que des langages comme {a2 , n > 0}, qui ne respectent pas cette proprit, ne peuvent tre reprsents par des TAG. Proprits des TALs Proposition 13.2 (Proprit de clture). Les TALs sont clos pour les oprations rationnelles (union, concatnation et toile de Kleene). Preuve. Considrons G1 = (, V1 , I1 , A1 , S1 ) et G2 = (, V2 , I2 , A2 , S2 ) deux grammaires TAG, avec de plus V1 V2 = . Les proprits de clture des TALs se dmontrent laide des constructions suivantes : G = (, V1 V2 {S}, I1 I2 A1 A2 , S) ralise lunion de L(G1 ) et de L(G2 ), au prix dune petite modication des arbres de racine S1 (de I1 ) et S2 (de S2 ), que lon tend vers le haut en les coiant dun nouveau nud tiquet par nouvelle racine S. la grammaire TAG ralisant la concatnation L(G1 )L(G2 ) contient tous les arbres de G1 et de G2 , auxquels il faut ajouter tous les arbres permettrant de gnrer la succession et qui sont obtenus en combinant chaque arbre de racine S1 avec chaque arbre de racine S2 en un nouvel arbre de racine S, dominant directement S1 et S2 la grammaire TAG ralisant L(G1 ) contient tous les arbres de G1 , plus tous les arbres auxiliaires forms en rajoutant une racine S et un frre S un arbre de racine S1 , plus nalement un arbre initial permettant dliminer S, consistant en une racine S dominant directement (voir la Figure 13.4). S S S
r r
n

S1 ...

...

r r

F. 13.4 Deux nouveaux arbres pour litration Les TALs sont galement clos pour lintersection avec les langages rationnels. Par contre, on dispose des rsultats ngatifs suivants : les TALs ne sont clos ni pour lintersection ni pour la complmentation. lintersection dun TAL avec un langage CF ne donne pas ncessairement lieu un TAL.

164

13.1.3
Les LIG

Deux formalismes quivalents aux TAGs

Les TAGs permettent de dnir une classe de langage nomme langages faiblement sensibles au contexte. Il est en fait possible de reconnaitre la mme classe de langages en tendant marginalement le formalisme CFG, donnant lieu au formalisme des grammaires index linaires (en anglais Linear Index Grammars, LIGs). Ce nouveau formalisme comprend une grammaire CF classique, augmente par la possibilit dassocier une pile chaque non-terminal de la grammaire. Les symboles manipuls sur cette pile sont pris dans un ensemble ni dindices. On note A[] un non-terminal auquel est associe la pile . Chaque production dune LIG prend alors la forme suivante : A[] X1 [] . . . Xi [] . . . Xn [] o et se dduisent lun de lautre par une opration de pile (push ou pop). La limitation essentielle des LIG, qui leur confre leur nom de linaire, est quun seul et unique non-terminal en partie droite est rendu dpendant de lhistoire de la drivation de la partie gauche par le mcanisme de transmission de la pile. Tous les autres non-terminaux se drivent indpendamment de la partie gauche qui leur a donn naissance. Le langage engendr par une LIG contient tous les squences de terminaux se drivant de laxiome S, la pile associe tant originellement vide. Ainsi par exemple la LIG de la Table 13.7 reconnat le langage {wcw, w }, qui est un langage contextuel. S[] aS[1] S[] bS[2] S[] T[] T[1]T[]a T[2]T[]b T[] c T. 13.7 Une LIG pour {wcw} Les LIGs constituent une restriction des Grammaires Index (IG) originellement introduites dans (Aho, 1968). Quelques rsultats importants : les LIG engendrent exactement les mmes langages que les TAGs (voir eg. (Vijay-Shanker and Weir, 1994)). les LIG engendrent un sous-ensemble strict des langages que lon peut engendrer avec des IG, qui elles-mme engendrent un sous-ensemble strict des langages contextuels. Automates pile Comme pour les CFG il est possible de dnir un formalisme base dautomates pour les langages faiblement sensibles au contexte. Ces automates pile gnralisent les PDA prsents au chapitre 9, en remplaant les piles par des piles de piles. Un mouvement dans lautomate est, comme pour les PDA, dtermin par le symbole sur la tte de lecture et le symbole en haut de pile ; il peut conduire la cration de nouvelles piles (voir par exemple (Joshi and Schabes, 1997)).

165

13.2

Analyser les TAGs la CYK

Dans cette section, nous dcrivons la transposition de lalgorithme CYK, prsent pour les grammaires CF la section 12.1 au cas des grammaires darbres adjoints avec contraintes locales, en suivant, pour lessentiel, la prsentation donne dans (Shieber et al., 1994). Pour un nud dadresse p dans larbre , not @p, on dsigne par Adj(@p) lensemble des arbres auxiliaires pouvant sadjoindre sur ce nud. Lorsque le nud naccepte aucune adjonction, cet ensemble est vide. Si lon considre les productions dune grammaire CF comme des arbres de profondeur 1, on peut dire que CYK implante une stratgie gauche-droite strictement ascendante visant dcouvrir en remontant un arbre de drivation form par concatnation des arbres-productions. La compltion dun constituant permettant de remonter dun niveau dans larbre, par identication de la racine X dun sous-arbre avec une feuille, galement tiquete X, dun sous-arbre de niveau suprieur. Dans sa version tabulaire, chaque item de la table correspond un (ensemble de) sous-arbre(s) couvrant un facteur du mot analyser. Ladaptation aux TAGs de CYK procde dune dmarche similaire, la dirence prs quil faut tre capable de grer des hypothses sur la sous-chane couverte par le pied dun arbre auxiliaire, qui dlimite un segment de longueur arbitraire entre les zones couvertes par les autre fragments de larbre. Il faut tre capable de grer des hypothses sur la ralisation ou non dune adjonction sur un nud potentiellement adjoignable. Les items Comme pour CYK, les items correspondent des sous-arbres de larbre de drivation. Cette mme information sera exprime dans litem par , le nom de larbre, et p, lindice de Gorn du nud interne de larbre pour linstant reconnu. Les hypothses sur la ralisation dune adjonction sur un nud sont reprsentes par un point, qui peut tre localis sous le nud (en position bottom), signiant que ladjonction est possible ; ou bien au dessus du nud, signiant que ladjonction nest plus autorise (soit quelle ait dj eu lieu, soit quon fasse lhypothse quelle naura pas lieu). En plus de ces trois informations, les items contiennent des indices positionnels, en nombre de 4, qui permettent de reprer les squences, ventuellement discontinues, de lentre qui sont couvertes par litem. Un item a donc la forme suivante : [, add, pos, i, j, k, l], dsignant un sous-arbre dont la racine est le nud dadresse add de , avant (pos = b) ou aprs (pos = t) adjonction et tel que : soit @add domine un nud pied et couvre deux fragments potentiellement non-adjacents de lentre : entre i et j 1 et entre k et l 1. soit @add ne domine pas de nud pied, impliquant que la frontire de larbre est un facteur du mot analyser et donc que les indices centraux, devenus inutiles, prennent des valeurs arbitraires, conventionnellement notes par : _ ; Avec ces notations, le succs du parsage dun mot de longueur n correspond linsertion dun item de la forme [, 0, t, 1, _, _, n], o la racine de est tiquete par S. Initialisation Linitialisation de lanalyse ascendante implique deux oprations : la reconnaissance des symboles terminaux et le dmarrage dhypothses de trous, domins par les pieds darbres auxiliaires. Ces deux oprations correspondent respectivement aux tapes dinitialisation suivantes : // reprage des symboles de lentre foreach I do 166

if label (@p) = ui then insert ([, p, t, i, _, _, i + 1] in T od // seulement pour les arbres auxiliaires foreach A, 1 < i < j < n do // p est le numro du pied de insert ([, p, t, i, i, j, j] in T od Dductions Nous utilisons ici lhypothse (aussi faite dans CYK) que tous les arbres sont au plus binaires. La compltion dun sous-arbre rsultant de la saturation de ses branches lles prend alors seulement deux formes possibles, selon que la racine du sous-arbre possde une ou deux lles : // compltion unaire : de la lle la mre if [, p.1, t, i, j, k, l] T then insert ([, p, b, i, j, k, l] in T // compltion binaire : des deux lles la mre if [, p.1, t, i, j, k, l] T [, p.2, t, l, j , k , m] T then insert ([, p, b, i, j j , k k , m] in T Ces deux rgles de compltion crent des items correspondant des nuds potentiellement adjoignables partir de nuds saturs par rapport ladjonction. La rgle de compltion binaire intgre une contrainte supplmentaire : elle ne peut combiner deux nuds dominant un pied, car il y a au plus un pied par arbre. Trois cas sont possibles : larbre na pas de pied : j = j = k = k = j j = k k = _ le pied est gauche j = k = _, j j = j, k k = k le pied est droite j = k = _, j j = j , k k = k Reste considrer maintenant lopration dadjonction sur un nud encore adjoignable. Deux hypothses sont considrer : soit il ny a pas dadjonction, impliquant linsertion dune nouvelle hypothse pour laquelle pos = t ; soit il y a une adjonction, impliquant un arbre auxiliaire compltement reconnu ; ceci nest naturellement possible que si ladjonction de est possible sur le nud @p. Ces deux congurations se formalisent par : // non adjonction sur @p if [, p, b, i, j, k, l] T then insert ([, p, t, i, j, k, l]) in T // adjonction sur @p if [, p, b, i, j, k, l] T [, 0, t, m, i, l, n] T Adj(@p) then insert ([, p, t, m, j, k, n]) in T La ralisation dune adjonction correspond lenchssement du sous-arbre @p sous le pied de , comblant ainsi le trou de entre les indices i et l. Le nouvel item hrite du trou ventuel domin par le pied, sil existe, de . 167

Complexit Quelle est la complexit de cet algorithme ? Il y a un nombre ni darbres dans G, impliquant un nombre ni, dpendant uniquement de la grammaire, pour les trois premires positions des items. Au total, pour une phrase de longueur n il y aura au plus O(n4 ) items ; pour chacun dentre la rgle dadjonction demande de considrer de lordre de n2 items pouvant potentiellement sadjoindre, soit une complexit totale en O(n6 ). Malheureusement, cette complexit maximale est galement la complexit moyenne, le traitement purement ascendant entranant linsertion puis le dveloppement inutile de multiples items correspondant des hypothses portant sur des arbres auxiliaires couvrant des squences comportant des trous de longueur variable. Comme pour le parsage des CFG, il est tout fait possible dajouter des mcanismes de contrle descendant, qui vont limiter la prolifration de ces hypothses, donnant lieu un parsage la Earley des TAGs (Joshi and Schabes, 1997).

168

Bibliographie
Aho, A. V. (1968). Indexed grammars : an extension of context-free grammars. Journal of the ACM, 15(4) :647671. Denning, P. J., Dennis, J. B., and Qualitz, J. E. (1978). Machine, Languages and Computation. PrenticeHall, Inc, Englewood Clis, NJ. Earley, J. C. (1970). An ecient context-free parsing algorithm. Communication of the ACM, 13(2) :94 102. Grune, D. and Jacob, C. J. (1990). Parsing Techniques : a practical Guide. Ellis Horwood. Hopcroft, J. E. and Ullman, J. D. (1979). Introduction to automata theory, languages and computation. Addison-Wesley. Joshi, A. K. (1985). Tree adjoining grammars : how much context-sensitivity is required to provide reasonable structural descriptions ? In Dowty, D., Karttunen, L., and Zwicky, A. M., editors, Natural Language Parsing : psychological, computational and theoritical perspectives, pages 206250. Cambridge University Press. Joshi, A. K., Levy, L. L., and Takahashi, M. (1975). Tree adjunct grammars. Computer and System Sciences, 10(1) :136163. Joshi, A. K. and Schabes, Y. (1997). Tree adjoining grammars. In Rozenberg, G. and Salomaa, A., editors, Handbook of formal languages, volume 3, pages 69123. Springer-Verlag, Berlin. Sakarovitch, J. (2003). Elments de thorie des automates. Vuibert, Paris. Salomaa, A. (1973). Formal Languages. Academic Press. Schabes, Y. and Waters, R. (1995). Tree insertion grammar : a cubic-time parsable formalism that lexicalizes context-free grammar without changing the trees produced. Computational Linguistics, 21(4) :479515. Shieber, S. M., Schabes, Y., and Pereira, F. C. N. (1994). Principles and implementation of deductive parsing. Sikkel, K. and Nijholt, A. (1997). Parsing of context-free languages. In Rozenberg, G. and Salomaa, A., editors, Handbook of formal languages, volume 2, pages 62100. Springer-Verlag, Berlin. Sudkamp, T. A. (1997). Languages and Machines. Addison-Wesley. Tomita, M. (1986). Ecient parsing for natural language. Kluwer Academic Press. Valiant, L. (1975). General context free recognition in less than cubic time. Journal of Computer System Science, 10 :310315. Vijay-Shanker, K. and Joshi, A. K. (1985). Some computational properties of tree adjoining grammars. In Proceedings of the 23rd Annual Meeting of the ACL, pages 8293, Chicago, IL. Vijay-Shanker, K. and Weir, D. (1994). Parsing some constraint grammar formalisms. Computational Linguistics, 19(4) :591636. Younger, D. H. (1967). Recognition and parsing of context-free languages in time n3 . Information and Control, 10(2) :189208. 169