You are on page 1of 40

LesMathmatiques.

net

LANGAGES - GRAMMAIRES - AUTOMATES


Marie-Paule Muller
Version du 14 juillet 2005

Ce cours prsente et met en oeuvre quelques mthodes mathmatiques pour linformatique thorique. Ces notions de base pourront servir d'entre en matire avant d'aborder un cours de compilation. Elles sont introduites ici sans aucun prrequis, afin dtre accessibles tout lecteur dbutant sur ce sujet.

Table des matires.


INTRODUCTION 1. Les tches danalyse dun compilateur. 2. La notion de grammaire et danalyse syntaxique. LANGAGES LANGAGES REGULIERS 1. Dfinitions. 2. Oprations sur les langages. 3. Langages rguliers (Kleene, 1956). GRAMMAIRES ALGEBRIQUES (dites aussi : hors contexte ) 1. Dfinition dune grammaire algbrique. 2. Drivations. Langage engendr. 3. Arbre de drivation. Drivations gauche. 4. Grammaires rgulires. 5. Ambigut. Graphe orient dune grammaire algbrique. LE LEMME DE LETOILE (en anglais : pumping lemma ) 1. Le lemme de lEtoile pour les grammaires rgulires. 2. Un exemple dapplication du lemme de lEtoile. ANALYSE SYNTAXIQUE (en anglais : parsing ) 1. Test sur le prfixe terminal dans les analyses syntaxiques descendantes. 2. Analyse syntaxique descendante en largeur d'abord. 3. Analyse syntaxique descendante en profondeur d'abord. 4. Note sur les analyses ascendantes. AUTOMATES 1. Dfinitions. 2. Langage reconnu par un automate. 3. Automates dterministes, automates dterministes complets. 4. Automates et grammaires rgulires. 5. Les automates. Preuve du thorme 2. TRANSFORMATION DES GRAMMAIRES ALGEBRIQUES 1. Suppression de la rcursivit de laxiome. 2. Suppression des rgles vides. 3. Suppression des enchanements de variables. 4. Suppression des variables et symboles inutiles. 5. Forme normale de Chomsky (1959). 6. Forme normale de Greibach (1965). NETOGRAPHIE 2 2 2 5 5 6 6 8 8 9 10 11 13 15 15 17 19 19 20 21 23 24 24 25 25 27 28 32 32 33 34 35 36 37 40

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 1

LesMathmatiques.net

INTRODUCTION
Un compilateur est un utilitaire de traduction permettant, partir d'un programme crit dans un langage de "haut niveau" ou, du moins, comprhensible par un programmeur humain (C/C++, Pascal, Algol, FORTRAN, assembleur, ...), de vrifier la syntaxe du programme de dpart, puis de produire un fichier en un langage de niveau plus bas, par exemple un fichier en code objet, excutable par le systme d'exploitation. Le premier langage de haut niveau qui a t crit est le FORTRAN ( Mathematical FORmula TRANslating System ) ; son compilateur a t conu et crit dans les annes 1954-57 par une quipe de pionniers super-programmeurs conduite par John W. Backus. Son criture, soit 25 000 lignes de code machine enregistres sur bande magntique, a ncessit un travail quivalent 18 hommes-annes, bien plus important que ce que le projet initial prvoyait ; mais la direction d'IBM, dont dpendait ce projet, a eu l'intelligence de laisser le groupe libre de poursuivre son effort comme il l'entendait. Coup d'essai, coup de matre : le langage FORTRAN I a eu un succs norme, et son compilateur a gard durant vingt ans le record d'optimisation du code objet produit. Plus tard, le compilateur du PASCAL a t crit en auto-amorage : conu la main pour 60% environ du langage, le reste a t produit par ce qui tait dj compil. De nombreux autres compilateurs ont suivi (par exemple YACC, "Yet Another Compiler of Compiler"). Durant les mmes annes 1955-65, des linguistes, philosophes et mathmaticiens ont dfrich la partie thorique en proposant une description et une classification des langages et des grammaires, pour les diverses langues naturellement utilises puis pour les langages de programmation. Parmi eux, citons le linguiste Noam Chomsky, le mathmaticien logicien Stephen Kleene, l'informaticienne Sheila Greibach, dont nous reverrons les noms dans ce cours.

1. Les tches danalyse dun compilateur.


Les premires tches d'un compilateur sont de faire : lanalyse lexicale : reconnatre les lments constitutifs de la chane entre, cest-dire du code source, et en dresser la liste. lanalyse syntaxique : vrifier la conformit avec les rgles de constitution du code. Par exemple, l'expression (A+B)) = C est syntaxiquement incorrecte (parenthses). lanalyse smantique : analyser le sens et fixer une interprtation. Par exemple dans si A alors si B alors C sinon D , choisir quel si se rapporte le sinon. Dans ce qui suit, nous nous occuperons essentiellement de l'analyse syntaxique.

2. La notion de grammaire et danalyse syntaxique.


Considrons, par exemple, la phrase suivante : LE VIEUX CHAT ATTRAPE LE PETIT RAT Le but est de construire une grammaire qui permette de produire cette phrase.
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 2

LesMathmatiques.net Il faut tout dabord prciser les ingrdients ncessaires : ce sera lalphabet des symboles ou lexique. Dans notre cas, nous pouvons prendre comme alphabet lensemble = {LE, VIEUX, PETIT, CHAT, RAT, ATTRAPE} ( il contient ici six symboles). Noter que le terme alphabet na pas ici le sens habituel A, B, C,. : en fait, lalphabet contient les briques de base avec lesquelles on peut former tout ce quon veut pouvoir former ! Dans un langage de programmation par exemple, les mots rservs, balises, etc comme program, real, <head>, </head>, sont dans lalphabet de symboles. Voyons maintenant comment ces symboles sont assembls. Dans la structure de la phrase, on peut distinguer : un groupe sujet un verbe un groupe complment dobjet (CO) Les groupes sujet et CO sont eux-mmes des groupes nominaux : un groupe nominal est form d'un article suivi d'un nom, lui-mme prcd ou suivi d'adjectifs. Voici un exemple de (petite) grammaire pouvant produire notre phrase ; elle a onze rgles de grammaire (on dit aussi de production, ou de rcriture) : 1 . <phrase> 2. 3. 4. 5. 6. 7. 9. <groupe CO> <groupe nominal> <groupe nominal> <article> <nom> <adjectif> LE CHAT RAT VIEUX PETIT ATTRAPE <groupe sujet> <verbe> <groupe CO> <groupe nominal> <groupe nominal> <article> <nom> <article> <adjectif> <nom>

<groupe sujet>

8 . <nom> 10. <adjectif> 11. <verbe>

- Le point de dpart sappelle l'axiome. Dans notre exemple, cest <phrase>. - Les variables sont les ingrdients qui peuvent encore tre remplacs par dautres (<phrase>, <article>, <groupe CO>, etc). - Les rgles 1 5 sont des rgles syntaxiques (la premire rgle concerne toujours laxiome). Les rgles 6 11 sont des rgles compltement terminales (ou : lexicales). - Le langage engendr par la grammaire est l'ensemble de toutes les phrases que l'on peut produire partir de laxiome en utilisant des rgles de grammaire, une phrase tant une chane de symboles.
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 3

LesMathmatiques.net Voici maintenant quelques exemples de phrases grammaticalement correctes , c'est-dire des chanes de symboles que l'on peut produire partir de l'axiome, en utilisant les rgles prcdentes : LE RAT ATTRAPE LE PETIT CHAT LE CHAT ATTRAPE LE VIEUX CHAT On peut associer chaque phrase ainsi produite un arbre de drivation o figurent les variables auxquelles on a appliqu des rgles de grammaire. Nous avons ajout aux nuds de cet arbre de drivation, pour faciliter la comprhension, les numros des rgles qui ont t appliques aux variables. Un arbre de drivation pour la phrase LE RAT ATTRAPE LE PETIT CHAT est reprsent dans la figure suivante.

<phrase> 1

<groupe sujet> 2

<verbe> 11

<groupe CO> 3

<groupe nominal> 4

<groupe nominal> 5

<article> 6

<nom> 8

<article> 6

<adjectif> 10

<nom> 7

LE

RAT

ATTRAPE

LE

PETIT

CHAT

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 4

LesMathmatiques.net

LANGAGES LANGAGES REGULIERS 1. Dfinitions.


Lalphabet des symboles est un ensemble fini. On le notera en gnral , dans la suite du cours. Exemple 1. = { LE, CHAT, ..., VIEUX, ...} cf. lintroduction. Exemple 2. ={0, l, 2, ...., 9, +, *, -, / , (, ) }. Cet alphabet permet d'crire les expressions arithmtiques sur les nombres entiers, avec les quatre oprations et les parenthses. Anticipons un peu : le premier problme sera de pouvoir distinguer si une expression est correctement crite ; par exemple, 2*(31-6)+8 est correcte, mais 2(31-6)+8 ou encore (21+)*4 ne le sont pas. Le deuxime problme sera, pour une expression correctement crite, de la calculer selon les rgles de lart, c'est--dire de respecter les priorits (donner la priorit la multiplication sur l'addition, calculer d'abord ce qui est entre parenthses, ...). Une chane est une suite finie de symboles. La longueur d'une chane est le nombre de ses symboles. Exemples. LE LE CHAT est une chane de longueur 3 sur lalphabet de lexemple 1. Les expressions arithmtiques (correctes ou non !) sont des chanes sur l'alphabet de lexemple 2. La chane vide, note , ne contient aucun symbole ; sa longueur est nulle. On verra qu'elle est particulirement utile ! n est lensemble de toutes les chanes de longueur n. 0 = { } , par convention. Attention, cet ensemble 0 nest pas vide : il contient la chane vide. * est la runion des n pour n 0. C'est donc l'ensemble de toutes les chanes, chane vide comprise. + est la runion des n pour n > 0 . On peut concatner des chanes de symboles, cest--dire les coller les unes derrire les autres, de la mme faon que plusieurs textes peuvent tre assembls les uns derrire les autres pour former un nouveau texte. Si u et v sont deux chanes de symboles, leur concatnation sera note u.v ou plus simplement uv . Un langage sur est un sous-ensemble de *. Exemples. Sur lalphabet = {a, b, c, d}, les ensembles suivants sont des langages : L1 = {ac, abbc} lensemble L2 de toutes les chanes qui commencent par a. Lensemble L3 de toutes les chanes de longueur paire. Notation. Afin de faciliter la lecture, nous adopterons en gnral une notation a, b, c, pour des symboles de et u, v, w, x, pour des chanes de symboles.
page 5

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

LesMathmatiques.net

2. Oprations sur les langages.


Un alphabet de symboles tant fix, voyons les oprations que nous appliquerons aux langages sur . Oprations ensemblistes usuelles (runion, intersection, complmentaire). Comme les langages sur ne sont rien dautre que des sous-ensembles de *, les oprations habituelles que lon connat sur les sous-ensembles sappliquent ces langages. Concatnation de langages. Comme nous savons concatner des chanes de symboles, nous pourrons galement concatner deux langages, c'est--dire collecter dans un nouvel ensemble, not L1.L2 , toutes les chanes que l'on peut obtenir en concatnant une chane de L1 avec une chane de L2 . Par rcursivit, nous pourrons concatner aussi un nombre fini de langages. En particulier, si L est un langage, on notera L0 = { } L1 = L L2 = L . L puis on dfinit de manire rcursive Ln = L n-1. L (concatnation de n exemplaires de L ) Etoile de Kleene d'un langage. Pour un langage L donn, ltoile de Kleene L* est le langage obtenu en runissant tous les langages Ln (n 0 ) : L* = L0 U L1 U L2 U . On note L+ = L.L* = L1 U L2 U L3 .

Convention de priorit pour ces oprations. On convient que l'toile de Kleene est prioritaire sur la concatnation, qui est elle-mme prioritaire sur les oprations ensemblistes ; pour modifier un ordre de priorit, on se sert de parenthses. Formellement, ces rgles sont donc analogues celles que l'on a en arithmtique. Exemple. Sur lalphabet ={0, l, 2, ....,9}, le langage {l, 2, ...., 9}.* U {0} est le langage de tous les nombres entiers naturels, crits en base 10 et sans 0 inutiles gauche.

3. Langages rguliers (Kleene, 1956).


Dfinition. Un langage L sur est rgulier si on peut l'obtenir par rcursivit : partir des seuls langages " de base " : - langage vide : - langage {} (le langage ne contenant que la chane vide) - langages de la forme {a} , avec a et l'aide des seules oprations - runion - concatnation - toile de Kleene
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 6

LesMathmatiques.net Par rcursivit veut dire quon applique un nombre fini de fois de telles oprations, partir des langages " de base ". Exemple. Sur = {a, b, c}, le langage L des chanes commenant par a est rgulier, puisqu'on peut en donner une expression rgulire en lcrivant sous la forme L = {a}.({a}U{b}U{c})* Notation. Par abus de notation, on peut omettre les accolades pour allger lcriture. Le point de concatnation n'est pas toujours crit non plus, si cette omission peut se faire sans ambigut : L = a (a U b U c)* Remarque. Attention ! dans la dfinition, lintersection ne figure pas comme une opration autorise. En fait, on peut dmontrer (mais cest difficile) que lintersection de deux langages rguliers est encore un langage rgulier : Proposition 1. 1) Tout langage fini est rgulier. 2) Si L est un langage rgulier, alors L* est rgulier. 3) Si L1 et L2 sont des langages rguliers, alors les langages L1UL2 et L1.L2 sont aussi rguliers. Proposition 2. Si L1 et L2 sont des langages rguliers, alors L1 L2 est rgulier. La proposition 1 dcoule directement de la dfinition. Quant la proposition 2, elle ne pourra tre prouve que bien plus tard, dans la suite du cours.

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 7

LesMathmatiques.net

GRAMMAIRES ALGEBRIQUES (dites aussi : hors contexte )


Le problme : un langage L tant fix, comment savoir si une chane w donne appartient L ? Une solution possible : dcrire une grammaire adquate engendrant L , grammaire qui pourrait permettre de produire toutes les chanes de L de tester une chane, en renvoyant un message derreur si elle nest pas dans L.

1. Dfinition dune grammaire algbrique.


Dfinition. Une grammaire algbrique se dfinit par la donne de : : un ensemble fini de symboles terminaux V : un ensemble fini de variables S V : une variable particulire, appele axiome ( Start symbol ) P : un ensemble fini de rgles de production (ou : de rcriture). Ces rgles doivent tre de la forme A u , o A V et u ( U V)* En pratique, les variables seront rpertories sous la forme dune liste (elles seront donc ordonnes), mais la premire de ces variables est toujours laxiome. Les rgles de production seront elles aussi ordonnes, en respectant lordre des variables auxquelles elles sappliquent. La premire rgle concerne donc toujours l'axiome. Lordre ainsi choisi aura une incidence sur le droulement des algorithmes qui sappliqueront aux grammaires. Rgle vide : rgle de la forme A (rappelons que est la chane vide). De telles rgles sont trs utiles car elles autorisent certaines possibilits sans y obliger. Par exemple, un groupe nominal peut contenir des adjectifs, mais ce nest pas une obligation ; un programme peut contenir des procdures, etc Rgle directement rcursive : rgle de la forme A vAw o v, w ( U V)* Autrement dit, la variable A figure encore dans la chane de rcriture de A . De telles rgles permettent de multiplier des occurrences de symboles, et de rallonger indfiniment des expressions. En effet, une telle rgle permet dobtenir, partir de A , les chanes vAw , vvAww , vvvAwww , Les parenthses dans les expressions arithmtiques (x) , ((x)) , (((x))), en sont un exemple. De manire plus gnrale, si on remplace une variable dune expression arithmtique par une (autre) expression arithmtique, on obtient une (nouvelle) expression arithmtique correctement crite. Notations. Dans la suite du cours, afin de rendre le texte plus lisible, les variables dune grammaire seront en gnral dsignes par des lettres majuscules S, A, B, C, Pour les symboles terminaux, nous aurons les minuscules a, b, c, sauf cas particuliers. Les notations x, y, u, v, dsigneront souvent des chanes de ( U V)*, formes de symboles terminaux et/ou de variables. Les grammaires seront toujours des grammaires algbriques.

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 8

LesMathmatiques.net Un exemple de grammaire. G: S S A A abSA Aa

Ici, lensemble des variables est V = {S, A}, et laxiome est S . Lensemble des symboles terminaux est sous-entendu : = {a, b} La notation plus synthtique que nous adopterons consiste se servir dune barre verticale comme sparateur entre des rgles pour une mme variable : G: S A abSA | Aa | 1 | 2 3 | 4

Ces rgles de grammaire seront supposes ordonnes (numrotes) :

2. Drivations. Langage engendr.


Dans ce qui suit, A est une variable et x, y, u , v ( U V)*. En appliquant une rgle A u la variable A qui figure dans une chane v = xAy, on produit la chane w = xuy . Cette opration est dite drivation, et est note xAy => xuy . On peut rpter ceci autant de fois que lon veut en appliquant de nouveau une rgle la chane ainsi produite. Dfinition. Une chane w drive d'une chane v si, partir de v , on peut arriver w par un nombre fini dapplications de rgles de grammaire : v =>.... => w , ce quon notera galement v => w On peut prciser le nombre dapplications de rgles au-dessus de la double flche, si cela savre utile (pour certaines preuves par rcurrence, par exemple) :
n

v ===> w

(ici, on a fait n applications de rgles de grammaire).

Dfinition. Le langage engendr par une grammaire G est lensemble de toutes les chanes terminales (autrement dit, dans *) qui drivent de laxiome S . Il est not L(G) . Exemple 1. Soit G: S A abSA | Aa |

Numrotons les rgles de grammaire dans leur ordre de lecture. Voici une suite de drivations, qui prouve dailleurs que la chane ababa est dans L(G) : S => abSA => abS => ababSA => ababSAa => ababAa
1 4 1 3 2

=> ababa *
4

Pour chaque drivation, on a mis en gras (loccurrence de) la variable qui a t rcrite et on a indiqu sous la flche le n de la rgle applique.

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 9

LesMathmatiques.net Exemple 2. Le langage engendr par la grammaire du PASCAL est lensemble de tous les programmes qui sont correctement crits en code source PASCAL. Remarque. Deux grammaires diffrentes peuvent engendrer le mme langage. Cette remarque est mme dcisive pour la suite ! En effet, on crit une premire grammaire comprhensible, intuitive , engendrant le langage voulu, cest--dire adapte aux objectifs poursuivis (par exemple du calcul scientifique avec une prcision paramtrable aussi grande que lon veut ; de la gestion bancaire ; etc.). Puis il faut la transformer ( laide dalgorithmes ad hoc) afin dobtenir une autre grammaire engendrant le mme langage, mais qui aura lavantage sur la premire de permettre une compilation efficace et rapide.

3. Arbre de drivation. Drivations gauche.


On peut tracer un arbre de drivation associ toute suite de drivations. Chaque nud reprsente un exemplaire dune variable rcrite, avec le numro de la rgle de grammaire applique. Exemple. Reprenons la grammaire ainsi que la suite de drivations S => abSA => abS => ababSA => ababSAa => ababAa
1 4 1 3 2

G:

S A

abSA | Aa | => ababa


4

Voici l'arbre de drivation qui lui est associ S

En lisant les symboles qui figurent aux extrmits des branches, de gauche droite, on obtient la chane ababa Remarque 1. Des suites de drivations diffrentes peuvent tre associes un mme arbre de drivation. En effet, il apparat clairement sur cet exemple que lordre de certaines des drivations peut tre chang sans que larbre en soit modifi.

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 10

LesMathmatiques.net Dfinition. Une drivation gauche est une drivation qui s'applique la premire variable rencontre dans la chane (c'est la variable qui est le plus " gauche" possible). Thorme 1. Soit w une chane de L(G) . A toute suite de drivations S => w correspond une unique suite de drivations gauche ayant le mme arbre de drivation. Preuve. On associe son arbre de drivation la suite de drivations donne. Il suffit de parcourir cet arbre de drivation en suivant les branches prioritairement le plus loin possible vers le bas, ensuite seulement de la gauche vers la droite ; pendant ce parcours, en reprant le premier passage chaque nud de l'arbre de drivation, on obtient une suite de drivations gauche. Cette faon de parcourir un arbre s'appelle "en profondeur d'abord" : on descend toujours autant que possible, en commenant gauche ; on ne remonte que le minimum ncessaire pour pouvoir redescendre sur une branche situe plus droite. Un parcours "en largeur d'abord" se fait, lui, en allant d'abord de gauche droite, ensuite de haut en bas. Exercice 1. Ecrire la suite de drivations gauche associe la suite de drivations donne dans l'exemple ci-dessus (vrifier le rsultat : il faut obtenir le mme arbre de drivation). Remarque 2. Des suites de drivations diffrentes peuvent produire la mme chane de L(G) , tout en tant associes des arbres de drivation diffrents. Exercice 2. Toujours avec la grammaire G de lexemple, trouver une autre suite de drivations gauche pour la chane ababa . Elle correspondra donc ncessairement un autre arbre de drivation ; tracer cet arbre de drivation et comparer au prcdent.

4. Grammaires rgulires.
Dfinition. Une grammaire algbrique est dite rgulire si toutes ses rgles sont de l'un des types suivants : aB A A a o A, B V et a A Il en dcoule que les chanes qui drivent de laxiome contiennent au plus une variable, et cette variable est ncessairement en fin de chane (en suffixe ). Plus prcisment, ces chanes sont de lune des formes suivantes : a1 a2 a3an A a1 a2 a3an
une seule variable, prcde par un "prfixe terminal" a1 a2 a3an

chane terminale (obtenue aprs application dune rgle de type 2 ou 3) ce cas n'est possible que sil y a, pour laxiome, la rgle vide S

Les arbres de drivation associs aux suites de drivation ont laspect dun peigne (symboles et variables sont indiqus titre d'exemple sur la figure suivante) :

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 11

LesMathmatiques.net
S a A b a B B

a , ou

Le thorme suivant met en relation les langages rguliers (que nous avons vus au chapitre prcdent) et les grammaires rgulires. Il sera difficile prouver : plus prcisment, la dmarche suivie sera surtout trs longue (mais trs belle aussi). Thorme 2. Tout langage rgulier peut tre engendr par une grammaire rgulire. Rciproquement, si G une grammaire rgulire, alors L(G) est un langage rgulier. abSA | Aa |

Exercice 3.

G:

S A

n'est pas une grammaire rgulire. Mais 1) Prouver que L(G) = {}U (ab)+.a* . Vrifier aussi que L(G) est diffrent de (ab)*.a* Le langage L(G) est donc un langage rgulier. D'aprs le thorme 2 prcdent, il doit exister une grammaire rgulire qui lengendre. 2) Trouver une grammaire rgulire G1 telle que L(G1) = L(G). Une remarque sur la forme des rgles d'une grammaire rgulire. a peuvent figurer dans une On a vu (cf. la dfinition) que des rgles du type A grammaire rgulire. De telles rgles peuvent tre limines, condition d'introduire une nouvelle variable dans la grammaire : il suffit en effet de remplacer la rgle A a par le groupe des deux rgles suivantes A A1 a.A1 (o A1 dsigne ici la nouvelle variable introduite)

Cette opration est un exemple simple de transformation d'une grammaire en une autre grammaire qui lui est quivalente : le langage engendr reste inchang. Nous avons ainsi tabli la proposition suivante.

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 12

LesMathmatiques.net

Proposition. Toute grammaire rgulire est quivalente une grammaire rgulire dont les rgles sont du type A aB ou A

Exemple.

La grammaire G :

S A

bA | b | aA | aS | a bA | bZ | aA | aS | aZ
( Z est ici la troisime variable de G )

est quivalente G :

S A Z

Exercice 4. Dcrire le langage engendr par ces grammaires, laide dune proprit caractrisant ses chanes.

5. Ambigut. Graphe orient dune grammaire algbrique.


Dans la suite du cours, sauf mention du contraire, nous ne considrerons plus que des drivations gauche : en lisant une chane de gauche droite, cest toujours la premire variable rencontre qui est rcrite. Nous avons vu en effet (cf. thorme 1) que toute chane w de L(G) peut tre obtenue partir de laxiome par une suite de drivations gauche. Dfinition. Une grammaire G est dite ambigu sil existe dans L(G) une chane w que lon peut obtenir par deux suites diffrentes de drivations gauche. Remarque. Lambigut est une proprit qui se rapporte une grammaire, et non un langage. Il n'est pas difficile de trouver un exemple de langage engendr par une grammaire non ambigu et par une (autre) grammaire qui, elle, est ambigu : il suffit de partir d'une (petite) grammaire G dont on est certain qu'elle est non ambigu, puis de la modifier en "doublant" une variable : aA G' : S aA | aB G : S A A B Exemple. Lexercice 2 (cf. 3.) permet en fait de prouver que la grammaire G considre est ambigu. Dfinition. Une grammaire G tant donne, on peut lui associer un graphe orient (il sagit dun graphe infini, en gnral) : les sommets de ce graphe sont toutes les chanes que lon obtient partir de laxiome par des drivations gauche les flches issues dun sommet donn sont les rgles de grammaire applicables la premire variable de la chane correspondant ce sommet.
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 13

LesMathmatiques.net Exemple. Soit G: S A aS | aA | Ab | a | b

Le graphe orient de cette grammaire commence ainsi (il est infini, en fait) : S

aS

aA

aaS

aaA

aAb

aa

ab

a3S

a3A

Sur cette partie du graphe orient, lambigut de G est dj mise en vidence puisque on y voit deux chemins diffrents qui mnent de S la chane aa , chane qui est terminale et appartient donc au langage engendr. De manire gnrale : Dans le graphe orient de la grammaire, un arbre de drivation (cf. 3.) est reprsent par un chemin partant de laxiome et aboutissant un lment de L(G) . En effet, un arbre de drivation correspond une (unique) suite de drivations gauche, cf. thorme 1. La grammaire est ambigu si et seulement si son graphe orient contient des chemins diffrents issus de laxiome et aboutissant une mme chane de L(G).

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 14

LesMathmatiques.net

LE LEMME DE LETOILE (en anglais : pumping lemma )

Le problme : un langage L tant donn, comment savoir sil peut tre engendr par une grammaire rgulire ? Une rponse : le lemme de lEtoile donne une condition que les chanes de L doivent ncessairement satisfaire sil y a une telle grammaire. Cette condition ncessaire sera ensuite exploite pour prouver que, pour certains langages, il nexiste pas de grammaire rgulire : il suffira de produire des chanes servant de contre-exemple , cest--dire des exemples de chanes du langage qui ne vrifient pas la condition nonce par le lemme de lEtoile.

1. Le lemme de lEtoile pour les grammaires rgulires.


Rappelons que pour une grammaire G rgulire, les rgles sont de l'une des formes suivantes : A A A aB a o a et B V o a

et si w est un lment du langage engendr L(G) , il y a un arbre de drivation de la forme particulire suivante :
S a A b a B B

a , ou

o w est la chane forme par les symboles figurant aux extrmits des branches (symboles et variables sont indiqus titre d'exemple). Faisons une remarque vidente, mais dcisive pour la suite : si la longueur de la chane w est strictement suprieure au nombre de variables de la grammaire G , alors il y a une variable (au moins) qui figure deux fois dans larbre de drivation. Exemple. La figure suivante reprsente un arbre de drivation pour la chane w = a1a2a3a4a5a6 de L(G) , et cette chane est suppose tre de longueur strictement suprieure au nombre de variables de G . La variable A figure deux fois dans larbre de drivation.
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 15

LesMathmatiques.net Lors de la premire occurrence de A, on a appliqu une certaine rgle de drivation, disons A a2B ; puis une succession de rgles diverses ; la deuxime occurrence de la variable A, on a appliqu une rgle A a5C ; puis encore diverses rgles.
S

a1 a2 a3

A B C

a4 a5

A C

a6 Dans cette situation, nous pouvons construire de nouvelles chanes qui devront certainement, elles aussi, appartenir au langage L(G), pour la bonne raison quelles sont produites en se servant uniquement de rgles qui ont t utilises pour produire w , donc des rgles qui sont dans la grammaire G . La procdure est la suivante : jusqu la deuxime occurrence de la variable rpte, on applique les mmes rgles que celles qui ont servi pour produire w ; ce moment-l, on rutilise la rgle qui avait dj t applique lors de la premire occurrence, et celles qui ont suivi. Sur notre exemple, au lieu dappliquer A a5C , on rutilise la rgle A a2B et celles qui suivent. Nous obtenons ainsi une nouvelle chane w = a1a2a3a4a2a3a4a5a6 qui appartient galement L(G).

S a1 a2 a3 a4 a2 La partie de larbre entoure en pointills a t duplique a3 a4 a5 C A B C A B C A

a6

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 16

LesMathmatiques.net Bien entendu, la duplication de ce tronon de larbre de drivation peut tre recommence autant de fois que lon veut : la chane a1 a2 a3 a4 a2 a3 a4 a2 a3 a4 a5 a6 et, plus gnralement, toutes les chanes qui sont de la forme a1(a2a3a4)i.a5a6 appartiennent ncessairement au langage L(G) . En outre, il est vident que si K dsigne le nombre de variables dans la grammaire, la rptition dune variable se produira dj parmi les K+1 premiers noeuds de larbre (la racine S est compte comme le premier noeud). Nous obtenons ainsi le rsultat suivant : Proposition. Soit G une grammaire rgulire. On note K le nombre de ses variables et L(G) le langage engendr. Alors, toute chane w de L(G) dont la longueur est strictement suprieure K peut scrire sous la forme w = u.x.v o : x est une chane non vide la longueur de la chane u.x est infrieure ou gale K la chane u.xi.v appartient L(G) pour tout entier i .

Rappelons le thorme 2 (que nous prouverons dans le chapitre sur les automates) : pour tout langage rgulier L , il existe une grammaire rgulire G telle que L = L(G) . De cette grammaire dont on ignore peu prs tout, nous savons au moins quelle a un nombre fini de variables. Nous ignorons quel est ce nombre, mais nous pouvons maintenant appliquer la proposition prcdente aux chanes du langage rgulier considr. Voici donc la version dfinitive du critre de rgularit qui dcoule des considrations et de la proposition prcdentes : Lemme de lEtoile pour les langages rguliers. Soit L un langage rgulier. Il existe une constante K telle que toute chane w de L dont la longueur est strictement suprieure K peut scrire sous la forme w = u.x.v o : x est une chane non vide, la longueur de u.x est infrieure ou gale K , la chane u.xi.v appartient au langage L pour tout entier i . Voyons maintenant un exemple dutilisation de ce critre, pour prouver que certains langages ne sont pas rguliers.

2. Un exemple dapplication du lemme de lEtoile.

Proposition. Soit lalphabet = {a, b} . Le langage L = {an.bn : n 0 } nest pas un langage rgulier. Preuve de la proposition. On raisonne par labsurde. Supposons que L est un langage rgulier. Daprs le Lemme de lEtoile, il doit exister une longueur K telle que toute
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 17

LesMathmatiques.net chane w de L dont la longueur est suprieure K contienne au moins une squence x (non vide) quon peut dupliquer dans la chane sans sortir du langage. Autrement dit, il est possible dcrire w sous la forme dune concatnation w = uxv ayant la proprit que la chane uxxv est encore dans L . De plus, la squence x se trouve parmi les K premiers symboles de w . Or, pour nimporte quel nombre K , nous pouvons trouver une chane w qui fait usage de contre-exemple : il nous suffit de considrer la chane w = aK.bK . Sa longueur est 2K, donc suprieure K , et comme la squence x doit se trouver parmi les K premiers symboles de w , elle est forme uniquement de a , cest--dire quelle est de la forme x = ap (avec p 1) : w = a ap ...a. bK u x v Mais alors la chane uxxv = aK+p.bK , et cette chane nest pas dans le langage. Le lemme de lEtoile est contredit. On en conclut que L nest pas un langage rgulier. Dfinition. Un palindrome sur un alphabet donn est une chane de symboles de qui peut tre lue indiffremment de gauche droite ou de droite gauche. Quelques exemples de palindromes, sur = {a, b} : aabaa, abba, abababa, aaaa. Exercice. Prouver que le langage des palindromes sur = {a, b} nest pas un langage rgulier.
Note. Il existe une version perfectionne de Lemme de lEtoile pour les langages engendrs par des grammaires algbriques.

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 18

LesMathmatiques.net

ANALYSE SYNTAXIQUE (en anglais : parsing )

On se donne une grammaire algbrique G . Le problme : dcrire un algorithme permettant de dterminer si une chane donne w * appartient, ou non, L(G). Deux stratgies sont possibles : avec une analyse syntaxique descendante, on part de laxiome, et on recherche la chane w avec une analyse syntaxique ascendante, on part au contraire de la chane w , et on cherche rejoindre laxiome. Nous verrons de manire dtaille lanalyse syntaxique descendante. Celle-ci peut se faire selon deux types de parcours : en largeur dabord en profondeur dabord

1. Test sur le prfixe terminal dans les analyses syntaxiques descendantes.


Dfinition. Le prfixe terminal dune chane u (UV)* est la sous-chane des symboles terminaux qui prcdent la premire variable figurant dans u . Remarque. Lorsquon procde une drivation, le prfixe terminal se trouve soit inchang soit prolong. Cette remarque simple est la base du test qui se fera lors de lanalyse syntaxique : si le prfixe terminal dune chane u (UV)* nest pas identique au dbut de la chane analyse w , il est impossible que w drive de u . Le test : tester une chane u consiste comparer son prfixe terminal avec le dbut de la chane analyse w . Noter quen informatique, la donne dune chane de symboles est toujours suivie dun signe de fin de chane : espace, guillemet, ou tout autre caractre spcifique servant signifier la fin. Dans le cas o u est compltement terminale (autrement dit dans *), on arrive au signe de fin de chane (puisquon na pas trouv de variable), et on teste donc lgalit des chanes : u = w oui ou non. Remarque. Par une drivation gauche, en appliquant une rgle de grammaire qui commence par un symbole terminal, on est certain que le prfixe terminal sera allong ; le test sera donc plus efficace. Mieux : la complexit de lanalyse syntaxique sera contrle si toutes les rgles commencent par un symbole terminal. Cest pourquoi une tape prliminaire consiste transformer dans ce but la grammaire donne. Nous verrons comment procder ce type de transformation dans un chapitre ultrieur.

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 19

LesMathmatiques.net

2. Analyse syntaxique descendante en largeur d'abord.


L'algorithme danalyse. Les rgles de G sont ordonnes (c'est--dire numrotes, mises dans une liste). Le test sur les chanes : comparer leur prfixe terminal au dbut de la chane w analyser. Une file sera cre, afin de mettre en attente les chanes : - qui drivent de l'axiome, - qui contiennent encore au moins une variable - et qui restent susceptibles d'aboutir w par drivation (cf. le test). Rappelons le principe dune file : " le premier entr est le premier sorti ".

Les entres : la grammaire (symboles, variables, rgles), et la chane analyser. Cration dune file Q : 1. Initialiser la file : Q=[S] 2. Soit q le 1er lment de la file Q 2.1. sortir q de la file 2.2. appliquer successivement chacune des rgles applicables la 1re variable de q et tester chaque chane ainsi obtenue : si la chane est non terminale et si le test est positif, lenfiler dans Q 2.3. retour 2 3. Arrt : quand le chane w est trouve ou quand la file Q est vide au retour 2.

Exemple.

G:

bS | Sa | a

Numrotation de ces rgles : 1

1 | 2 | 3

La chane analyser est w = baa . Un arbre d'analyse permet de reprsenter laide dun schma le droulement de lanalyse : partir de chacune des chanes prleves dans la file, des flches pointent vers les chanes que lon obtient par une drivation gauche. Si le test sur la chane obtenue est ngatif, lexploration suivant cette branche est arrte puisque la chane nest pas mise dans la file. Remarquer qu'une mme chane (ci-dessous, bSa par exemple) peut figurer plusieurs endroits de l'arbre d'analyse : ceci signifie qu'elle a t examine plusieurs reprises. Elle peut mme figurer, un moment donn, en plusieurs exemplaires dans la file d'attente Q . Une telle situation, due la forme de la grammaire, ralentit bien sr lanalyse.
S
1 2 3

bS
1 2 3

Sa
1
3

bbS
1

bSa
2 3

ba

bSa

Saa

aa

bbSa

bSaa

baa

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 20

LesMathmatiques.net Exercice. Pour cette analyse syntaxique, suivre sur larbre lordre dans lequel les chanes ont t examines par lalgorithme ; prciser le contenu de la file Q . Quelles sont les chanes qui restent encore dans la file, au moment o lanalyse s'arrte ?

3. Analyse syntaxique descendante en profondeur d'abord.


L'algorithme danalyse. Les rgles de G sont ordonnes (mises dans une liste). Le test sur les chanes : comparer leur prfixe terminal au dbut de la chane w analyser. Une pile sera cre, afin de mettre en attente les chanes : - qui drivent de l'axiome, - qui contiennent encore au moins une variable - et qui restent susceptibles d'aboutir w par drivation (cf. le test). Rappelons le principe dune pile : " le dernier entr est le premier sorti ". On empilera une chane q accompagne d'un n de rgle applicable sa premire variable. Lorsqu'on dpilera un lment [q, i] , on cherchera s'il y a une rgle suivante applicable q (donc n i+1), et dans ce cas on empilera [q, i+1] . S'il n'y a plus de rgle suivante applicable q , on dpilera un lment supplmentaire. L'analyse s'arrte si la pile est vide, ou si la chane w est trouve ; dans ce dernier cas, la pile contient alors un chemin de drivations gauche de S w .
Les entres : la grammaire (symboles, variables, rgles), et la chane analyser. Cration dune pile d'analyse P :
(Rappel : on empile une chane accompagne dun numro de rgle applicable sa premire variable).

1. Initialiser la pile P : P = [S, 1] . q produit la chane q . Cette rgle n1 : S 2. Tester la chane q . Si le test sur q est positif, alors 2.1 - chercher la premire rgle applicable la premire variable dans q , disons q = uAv (o u est le prfixe terminal) , et n i : A

- empiler [q, i] - affecter q = uyv - retour au test, en 2.


sinon (cas o le test est ngatif) 2.2 - dpiler l'lment en haut de la pile, disons [q', i'] - Si la rgle suivante (n i'+1) est encore applicable q', disons q'=u'A'v' et n i'+1 : A' z alors - empiler [q', i'+1] - affecter q la chane obtenue avec cette rgle : q = u'zv' - retour 2. sinon, retour 2.2. 3. Arrt : si w est trouve, ou si la pile est vide au retour 2.2.

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 21

LesMathmatiques.net L encore, on peut reprsenter le droulement de lalgorithme l'aide d'un arbre danalyse : cette fois, il sera trac prioritairement de haut en bas, ensuite seulement de la gauche vers la droite. Les oprations dempilement et de dpilement se voient aisment sur larbre : il suffit de tracer un chemin qui contourne larbre en suivant toutes ses branches : il part de S ( gauche de larbre, sur le dessin suivant) et sarrte la chane analyse w si elle est trouve. Si lanalyse ne trouve pas w , le chemin contourne entirement larbre et aboutit S . Exemple. G: S A aS | aA | bA | b | w = abb
numrotes : 1|2|3 4|5|6

La chane analyser est

S
1 2

aS
1 2 3

aA 4 abA 4 abbA 4 abbbA 5 abbb 6 abb

aaS

aaA

Au moment o cette analyse sarrte (elle sarrte parce qu'on a trouv w ), le contenu de la pile P est : [abbA, 6] [abA, 4] [aA, 4] [S, 2]
(le haut de la pile)

On retrouve donc dans la pile un chemin joignant S w , c'est--dire toute une suite de drivations gauche : S => aA => abA => abbA => w Ceci est un aspect intressant de lanalyse en profondeur. Remarque. L'analyse syntaxique peut tre longue, ou mme inoprante, selon la forme des rgles de grammaire. Les rgles qui commencent par une variable, et particulirement Au (o u est une chane quelconque), dites directement celles qui sont de la forme A rcursives gauche, peuvent empcher l'analyse syntaxique d'aboutir. Mais nous verrons ultrieurement des algorithmes qui permettent de transformer la grammaire en une grammaire quivalente pour laquelle toutes les rgles (non vides) commencent par un symbole terminal.
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 22

LesMathmatiques.net

4. Note sur les analyses ascendantes.


Le principe est de partir de la chane w analyser et de chercher remonter S . L encore, on peut faire lexploration en largeur dabord ou bien en profondeur dabord. Une rgle A u donne des drivations de la forme pAq => puq . Il faut donc pouvoir reconnatre la squence u dans une chane, afin de pouvoir la remplacer par la variable A . Pour cela, on pratique le test de la manire suivante. Une chane w * tant donne, on dcoupe w en deux chanes concatnes w = y.z . Ce dcoupage est initialis avec y = et z = w , puis il progressera vers la droite : on allongera y et raccourcira z d'un symbole la fois. A chaque fois, les rgles de grammaire sont successivement compares la fin de la chane y . Sil y a une rgle A u telle que u soit un suffixe de y , disons y = y1.u :

1) remplacer u par A . On obtient ainsi la chane y1.A.z , qui est affecte w . 2) retour au dcoupage de w . Mais comme cette chane w contient maintenant des variables, le dcoupage se fait dornavant avec la condition supplmentaire que z * ; autrement dit, le dcoupage est rinitialis juste aprs la dernire variable de w (ceci afin de gagner du temps de calcul). Noter qu'on obtient ainsi une suite de drivations droite, qu'il suffit dailleurs d'avoir gardes en mmoire dans une pile pour reconstituer une drivation ( droite) S => w . L'avantage de la mthode ascendante est la rapidit : la chane est raccourcie chaque substitution, condition toutefois quil ny ait pas de rgles du type enchanement de variables A B ; mais nous verrons comment liminer ce type de par une transformation de la grammaire.

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 23

LesMathmatiques.net

AUTOMATES
Soit L un langage sur un alphabet de symboles . Le problme : peut-on dcrire une petite "machine" qui acceptera ou rejettera une chane w de * selon qu'elle appartient, ou non, au langage L ? Un modle du genre est un automate distributeur de caf : si l'appoint en monnaie est correct, la machine rpond en versant un caf ; dans le cas contraire, elle reste en attente (ou donne un message d'erreur) Un automate (thorique) sera dcrit en prcisant : son alphabet de symboles (les pices de monnaie acceptes), ses tats initiaux, ses tats finaux (caf, avec ou sans sucre, chocolat, ), les tats intermdiaires dans lesquels il peut se trouver (pendant qu'on fait l'appoint, par exemple), ainsi que les transitions, c'est--dire comment on passe d'un tat un autre.

1. Dfinitions.
Dfinition. Un automate est dfini par un 5-uplet A = ( , E, Eo , F, ), o est lensemble fini des symboles E est un ensemble fini : lensemble des tats Eo E est le sous-ensemble des tats initiaux F S est le sous-ensemble des tats finaux est un ensemble fini de transitions : une transition est un triplet (i, a, j ) , o i et j sont des tats et a est un symbole. Reprsentation graphique d'un automate. Une transition (i, a, j ) se reprsente par une flche de i j , munie d'une tiquette a : a i j Un automate se reprsente donc l'aide d'un graphe orient, sur lequel il faut toutefois indiquer les tats particuliers que sont les entres et les sorties. Les tats initiaux sont indiqus par une double flche entrante ; pour les tats finaux, une double flche sortante. Exemple.
1 4

a b

b
3

Pour cet exemple, lensemble des symboles est = {a, b}. Lensemble des tats est E = {1, 2, 3, 4} ; parmi ceux-ci, il y a deux tats initiaux et un tat final : Eo = {1, 2} et F = {4}. Les transitions sont dcrites dans lensemble = {(1,a,2), (2,a,3), (3,b,2), (3,b,4), (4,a,4) }
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 24

LesMathmatiques.net Pour simplifier les dessins, on convient de reprsenter deux transitions entre les mmes tats (i,a,j) et (i,b,j) par une seule flche, munie des deux tiquettes. Il faut donc comprendre " a ou b ", en lisant ltiquette suivante : i a, b b j

2. Langage reconnu par un automate.


Dfinition. Une chane w * est reconnue par un automate A s'il y a un cheminement, cest--dire une suite de transitions, partant d'un tat initial, aboutissant un tat final, et dont la suite des tiquettes est w . Dfinition. Le langage reconnu par un automate A est l'ensemble de toutes les chanes reconnues. Il est not L(A ) . Exercice. 1) Parmi les chanes aabaa, aabab, baba, ab, abaaaa , dterminer lesquelles sont reconnues par l'automate A reprsent au 1. 2) Dterminer le langage L(A) reconnu. Remarque. Lautomate A reprsent au 1 est non-dterministe : quand on est dans ltat 3 et que le symbole b est lu, il est possible daller en 2 ou bien en 4 ; ce choix est fait au hasard. De plus, il y a le choix entre deux entres possibles (les tats 1 et 2 ).

3. Automates dterministes, automates dterministes complets.


Dfinition. Un automate dterministe (AD) est un automate : avec un unique tat initial partir de chaque tat, il y a au plus une transition dtiquette donne. Dfinition. Un automate dterministe complet (ADC) est un automate dterministe pour lequel il y a, partir de chaque tat, une et une seule transition pour chaque tiquette possible de . Lintrt dun ADC est quen lisant une chane (quelconque) w de * , il lui correspond un parcours bien dfini partir de ltat initial, et la progression dans lautomate ne se trouve jamais bloque : la chane peut toujours tre lue jusquau bout. La chane w est reconnue si et seulement si on aboutit lun des tats de sortie , cest-dire un tat final. Thorme 3. Tout automate peut tre transform en un automate dterministe reconnaissant le mme langage.

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 25

LesMathmatiques.net Preuve du thorme 3. Lide est simple : il faut regrouper les tats auxquels on peut arriver en lisant un mme symbole. a Exemple 1
a 2 a 3

Si on est ltat 1 et lit le symbole a , on va vers 1 ou 2 ou 3 On groupe donc tous les tats possibles darrive en un seul, ce qui cre un nouvel tat 1 ou 2 ou 3 : a

{1,2,3}

Bien entendu, cette construction doit se faire de proche en proche , partir des tats initiaux, qui sont les premiers tats quil faut regrouper pour obtenir une entre unique. Cest donc une construction rcursive, et algorithmique. Soit A = ( , E, Eo, F, ) lautomate initial donn. Le nouvel automate, dterministe, sera not A = ( , E, {so}, F, ') . Les tats de ce nouvel automate sont des groupes dtats de lancien automate, cest--dire des sousensembles de lensemble E . Ltat initial so est unique. Lalgorithme. - initialiser : so = Eo E = {so}
nouveau ne sy rajoute) : ( so est lensemble de tous les tats initiaux de A . Cest ltat initial de A ) (initialisation de la construction de lensemble des tats E )

- rpter, jusqu ce que lensemble E soit stationnaire (cest--dire que plus aucun lment pour chaque tat A E venant dtre construit, et pour chaque symbole a , - considrer (dans A) toutes les transitions dtiquette a issues dun tat A A , et regrouper leurs tats darrive - si ce groupe dtats nest pas encore un lment de E, on cre ce nouvel tat en le rajoutant lensemble E - rajouter la transition dtiquette a issue de A vers cet tat. - dfinir les tats finaux de A : ce sont tous les tats qui contiennent au moins un tat final de A . Exercice. Construire lAD partir de lautomate suivant
a 1 a b 3 page 26 b

a
b

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

LesMathmatiques.net Rponse :
{1} a [1,2,3} a b b {2,3}

Note. On pourra omettre lcriture des accolades, pour allger la notation.

Thorme 4. Tout automate dterministe peut tre transform en un automate dterministe complet reconnaissant le mme langage. Preuve du thorme 4. Lopration est lmentaire : si lAD nest pas dj complet, lui rajouter un nouvel tat ( tat poubelle ) rajouter les transitions dtiquettes manquantes en les dirigeant toutes vers cet tat poubelle P ; ne pas oublier les transitions de P lui-mme vers P . Exercice. complter lAD suivant
a S a 1 c c 3 b 2 b

Thorme 5. Soit L un langage reconnu par un automate. Alors le langage complmentaire * - L est aussi reconnu par un automate. Preuve du thorme 5. Partir dun automate A reconnaissant L ; le transformer en un AD, puis en un ADC . Rappelons quavec lADC, toutes les chanes peuvent tre lues jusquau bout : la lecture des chanes de L fait arriver un tat final, alors que celle des chanes nappartenant pas L fait aboutir un tat non final. Sur la reprsentation graphique, il suffit maintenant dter les sorties existantes, et de mettre des sorties aux tats qui nen avaient pas auparavant, pour obtenir un ADC reconnaissant le langage complmentaire du langage L .

4. Automates et grammaires rgulires.


Thorme 6. On peut associer toute grammaire rgulire G un automate reconnaissant le langage L(G) . Donc aussi un ADC reconnaissant L(G) . Rciproquement, on peut associer tout automate A ayant un unique tat initial une grammaire rgulire qui produit le langage reconnu par A . Remarque. A partir dun automate quelconque, on sait obtenir un AD reconnaissant le mme langage ; or celui-ci a bien un seul tat initial.
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 27

LesMathmatiques.net Preuve du thorme 6. 1) La grammaire rgulire G est, si ncessaire, modifie afin que toutes ses rgles soient de lun des types suivants (cf. Proposition, p.12 ) : A aB (o a et A, B V ) A 2) La correspondance se fait : - entre les variables de la grammaire G et les tats de lautomate A - entre les rgle de grammaire et les transitions de lautomate laxiome S de la grammaire : les variables : les rgles :
A A aB

l(unique) tat initial de lautomate les tats les transitions, ou les sorties :
A A

: :

Exemple.

G:

S A

aA bA |

a
b

Corollaire. Les langages reconnus par les automates sont les langages engendrs par les grammaires rgulires.

5. Les automates. Preuve du thorme 2.


Il sagit dune lgre gnralisation de la notion dautomate. Son intrt est technique : elle nous permet de faire les bricolages partir dautomates dont nous aurons besoin par la suite (jonction, runion,). Dfinition. Un automate se dfinit de manire analogue un automate, nanmoins : on autorise des transitions dtiquette vide (ltiquette est alors note ) on exige quil ny ait quun seul tat initial Remarque. Si des transitions dtiquette vide sont permises, la deuxime condition nest plus du tout contraignante ! sil y a plusieurs tats initiaux, il suffit de banaliser ces tats et de rajouter un nouvel tat, qui devient lunique tat initial, avec des transitions dtiquette vide adquates :
1 2 3 devient S 1 2 3

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 28

LesMathmatiques.net Lunicit de ltat initial est une condition indispensable si lon veut progresser vers la construction dune grammaire. Du point de vue des grammaires, dailleurs, une transition dtiquette vide corespond trs exactement une rgle d enchanement de variables (les tats A et B du automate correspondent des variables A et B de la grammaire) : B : A A B Les grammaires naturellement associes aux automates ne sont donc pas les grammaires rgulires : on autorise, de plus, des rgles du type enchanement de variables . Nanmoins : Thorme 7. Tout automate peut tre transform en un automate, avec un tat initial unique et non rcursif. Ltat initial est dit non rcursif si on ny passe quune seule fois ( lentre dans lautomate) ; autrement dit, il ny a pas de cheminement qui y revient en boucle ferme. Preuve du thorme 7. Un automate tant donn, 1) on commence par supprimer, si ncessaire, la rcursivit de ltat initial en rajoutant un nouvel tat initial et banalisant lancien, avec une transition dtiquette vide de lun lautre :

1 S 2 3

S 2

1 3

2) il faut maintenant supprimer les transitions dtiquette vide, ce qui ne peut se faire quen ajoutant de nouvelles transitions afin de compenser ces suppressions (le langage reconnu doit rester inchang). Pour cela, il faut : - reprer tous les chemins qui sont constitus dune succession de transitions dtiquette vide, suivie dune transition dtiquette non vide. - remplacer chacun de ces chemins par une nouvelle transition court-circuitant la suite des transitions dtiquette vide ; elle est bien sr tiquete avec le mme symbole que la dernire transition du chemin. Exemple :
A

b Nous avons ici deux chemins du type voulu qui sont issus de ltat A (lun aboutit D, lautre aboutit C aprs avoir suivi la transition dtiquette b ) ; nous avons aussi deux chemins analogues issus de ltat B .

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 29

LesMathmatiques.net Nous obtenons les transitions suivantes : a a


A B C

b b

- Attention ne pas oublier les sorties : si des transitions dtiquettes vides aboutissent un tat final, elles ne peuvent tre supprimes que si leur tat de dpart devient un tat final.
A

devient

Thorme 8. Sont reconnus par un automate les langages suivants : le langage {} les langages de la forme {a} , avec a la runion de deux langages reconnus par un automate la concatnation de deux langages reconnus par un automate ltoile de Kleene dun langage reconnu par un automate. Donc, tout langage rgulier est reconnu par un automate. Soit L un langage rgulier. Daprs le thorme 8, il est reconnu par un automate, qui peut tre transform en un automate (et mme un ADC) un seul tat initial, non rcursif, daprs le thorme 7 ; cet automate correspond une grammaire rgulire (dont laxiome sera dailleurs non rcursif), daprs le thorme 6. Nous avons ainsi obtenu une preuve du thorme 2 , que nous rappelons ici : Thorme 2 (p.12). Tout langage rgulier est engendr par une grammaire rgulire. Ce qui prcde nous permet aussi de prouver la Proposition 2 , dj nonce p.7 : Proposition 2 (p.7). Le complmentaire dun langage rgulier est aussi un langage rgulier. Lintersection de deux langages rguliers est aussi un langage rgulier. Preuve de la Proposition 2. Nous avons vu avec le thorme 5 (p.27) comment modifier un ADC afin de reconnatre le langage complmentaire. Pour ce qui est de lintersection de deux langages rguliers, il suffit de remarquer que lintersection de deux ensembles est le complmentaire de la runion des complmentaires !

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 30

LesMathmatiques.net Preuve du thorme 8. Il suffit dassocier un automate adquat chacun des types de langages numrs : langage {} : les langages de la forme {a} :
1

la runion de deux langages L1 et L2 reconnus par des automates A1 et A2 : banaliser ltat initial de chacun, rajouter un nouvel tat initial reli chacun par une transition dtiquette vide. On peut ainsi entrer dans A1 ou dans A2 : une chane sera reconnue si elle appartient L1 ou L2 :
S

A1 A2

la concatnation L1.L2 de deux langages L1 et L2 reconnus par des automates A1 et A2 : banaliser les tats finaux de A1 et ltat initial de A2 , et ajouter des transitions dtiquette vide des premiers vers le deuxime : A1 A2

ltoile de Kleene dun langage L reconnu par un automate A : en veillant ce que le automate A reconnaissant L ait son tat initial non rcursif (cf. thorme 7), rajouter des transitions dtiquette vide allant des tats finaux vers ltat initial. Si la chane vide nest pas dans L , il faut encore ajouter une sortie ltat initial (car est dans L* ). A

Exercice. Expliquer pourquoi, dans cette dernire construction (pour ltoile de Kleene), il faut viter de partir dun automate dont ltat initial est rcursif.

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 31

LesMathmatiques.net

TRANSFORMATION DES GRAMMAIRES ALGEBRIQUES


Note. Ce chapitre, plus technique que les prcdents, est un complment la prsentation des algorithmes danalyse syntaxiques. Il est indpendant du chapitre prcdent qui, traitant des automates est li essentiellement aux grammaires rgulires.

Le problme : on a vu que l'analyse syntaxique peut tre longue, et mme inoprante, selon la forme des rgles de grammaire. Les rgles qui commencent par une variable, et particulirement celles de la forme A Au (o u est une chane quelconque), dites directement rcursives gauche, peuvent empcher l'analyse syntaxique d'aboutir. Une solution : dcrire un algorithme permettant de modifier la grammaire G donne de manire obtenir une grammaire quivalente (c'est--dire qui engendre le mme langage) dont toutes les rgles non vides dbutent par un symbole terminal. De plus, pour acclrer encore l'analyse, on peut exiger que seul l'axiome peut avoir une rgle vide (dans le cas o la chane vide appartient au langage L(G) ). La transformation consiste en une suite doprations successives, qui seront dcrites laide dalgorithmes et donc programmables. Rsumons-en les tapes conscutives : 1. 2. 3. 4. 5. 6. 7. suppression de la rcursivit de laxiome suppression des rgles vides suppression des enchanements de variables suppression des variables et symboles inutiles mise sous forme normale de Chomsky limination de la rcursivit directe gauche mise sous forme normale de Greibach

1. Suppression de la rcursivit de laxiome.


Le but est dviter un retour laxiome au cours des drivations, autrement dit dviter les drivations de la forme S => uSv . Pour cela, laxiome ne doit pas figurer dans les rgles de grammaire ( droite de la flche, bien entendu). Si la variable axiome S est rcursive, cest--dire sil existe une rgle de la forme A uSv : rajouter une nouvelle variable, disons S , qui sera dornavant laxiome (la variable S est de ce fait banalise) rajouter (en tte de liste) la rgle de grammaire S S Exemple. G: S A aS | A b | S aS | A b |
(laxiome est S )

La nouvelle grammaire est G : S S A


(laxiome est S ) (S est une variable banale)

et on a videmment L(G) = L(G) .

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 32

LesMathmatiques.net

2. Suppression des rgles vides.


Lopration prcdente est suppose dj faite. Pour une meilleure lisibilit, nous supposons aussi que les variables ont t renommes de manire ce que la notation S dsigne de nouveau laxiome. Lexistence de variables desquelles drive la chane vide ralentit lanalyse syntaxique. Il sagit donc dviter les drivations de la forme A => , dans la mesure du possible : en effet, si la chane vide appartient au langage engendr, nous avons ncessairement une drivation S => , et celle-ci devra tre rester. Un algorithme construira rcursivement lensemble des variables concernes. De telles drivations ne peuvent exister que sil y a des rgles vides, autrement dit des . On peut supprimer ces rgles vides condition de compenser rgles de la forme A leffet de cette suppression par lajout de nouvelles rgles adquates. 2.1. Construction de lensemble NUL des variables dont drive la chane vide. Voici un algorithme construisant rcursivement lensemble NUL. 1. initialiser NUL = { A : variable telle que A soit une rgle de grammaire} 2. rpter pour chaque rgle A w telle que w (NUL)* et A non encore dans NUL, faire NUL = NUL U {A} tant que lensemble NUL nest pas stationnaire (cest--dire jusqu ce quun passage en revue
complet de toutes les rgles laisse lensemble NUL inchang).

Notons que L(G) si et seulement si S NUL la fin de la construction. T S T aT | A A b | Les tats successifs de lensemble sont : G: Exemple.
(laxiome est S )

2.2. Modification de la grammaire. 1. Pour chaque rgle A w de la grammaire : Reprer dans la chane w toutes les occurrences de variables collectes dans NUL. Slectionner un nombre arbitraire de ces occurrences et les supprimer : si la chane ainsi obtenue nest pas vide, ajouter la grammaire la nouvelle rgle ainsi obtenue. Faire ceci pour tous les choix possibles. Plus prcisment, si la chane w contient n occurrences de variables figurant dans NUL , nous avons n! choix diffrents (y compris aussi zro suppression) et donc, priori, n! rgles (y compris la rgle A w ) ; toutefois, lune delles peut tre vide (cest le cas si w (NUL)*) et de plus, ces rgles ne sont pas ncessairement distinctes ou nouvelles. On rajoute la grammaire toutes les rgles non vides ainsi obtenues, si elles ny figurent pas encore. 2. Supprimer toutes les rgles vides. . 3. Si S (laxiome) est dans NUL, rajouter la rgle S
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 33

NUL = { A } NUL = { A, T } NUL = { A, T, S }

initialisation car rgle T car rgle S

A T

LesMathmatiques.net Exemple. G: S T A T aT | AA b | bATA |

On obtient NUL = { A, T, S }. Comme laxiome S NUL, la chane vide appartient L(G) et nous devrons rajouter, la main , la rgle vide pour laxiome. La nouvelle grammaire est T | G : S T aT | a | AA | A A b | bATA | bTA | bAA | bAT | bA | bT Exercice. Comment les diffrents sous-ensembles doccurrences de variables NUL peuvent-ils tre passs en revue , autrement dit ordonns (de manire algorithmique) ?

3. Suppression des enchanements de variables.


Les oprations prcdentes sont supposes dj faites. B (o B est une Les rgles denchanement de variables sont de la forme A variable). Elles rallongent lanalyse syntaxique en laissant le prfixe terminal inchang ; on cherche donc les liminer. Ces rgles pourront tre supprimes condition que cette suppression soit compense par lajout de nouvelles rgles adquates. On commence par construire, pour chaque variable, lensemble des variables quon atteint par des rgles denchanement. 3.1. Construction de lensemble CHAIN(A) pour chaque variable A . Par dfinition, CHAIN(A) = { B : variable telle quil existe une drivation A => B } Voici un algorithme construisant rcursivement cet ensemble. 1. initialiser CHAIN(A) = { A } 2. rpter sil y a une rgle B C avec B CHAIN(A) telle que C soit une variable non encore dans CHAIN(A), faire CHAIN(A) = CHAIN(A) U { C } tant que lensemble CHAIN(A) nest pas stationnaire (cest--dire jusqu ce quun passage
en revue complet de toutes les rgles laisse lensemble inchang).

3.2. Modification de la grammaire. 1. Pour chaque variable A , pour chaque variable B CHAIN(A) w telle que w ne soit pas une variable, rajouter la pour chaque rgle B rgle A w 2. Supprimer toutes les rgles denchanement de variables. Exemple. G: S T A T | aT | AA | A b
page 34

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

LesMathmatiques.net Nous obtenons CHAIN(S) = {S, T, A} CHAIN(T) = {T, A} CHAIN(A) = {A} G : S T A | aT | AA | b aT | AA | b b

et la nouvelle grammaire est

4. Suppression des variables et symboles inutiles.


Les oprations prcdentes sont supposes dj faites. Un lment (variable ou symbole) X V U est dit utile sil existe une drivation S => uXv => w * En partant de laxiome, il faut donc arriver une chane terminale en transitant par une chane dans laquelle figure X . Le but de cette tape est de faire le mnage parmi les variables, aprs les suppressions de rgles faites prcdemment. On commence par collecter dans un ensemble TERM les variables dont drivent des chanes terminales, puis on construit le sous-ensemble ATTEINT des variables qu'on peut atteindre partir de laxiome. Les variables qui ne sont pas dans ATTEINT seront supprimes, avec leurs rgles de grammaire. Par cette opration, des symboles terminaux peuvent aussi avoir disparu, sils ne figurent pas dans les rgles restantes. 4.1. Construction de lensemble des variables dont drivent des chanes terminales Soit l'ensemble des variables dont drivent des chanes terminales TERM = { A : variable telle quil existe une drivation A => w *} Il est obtenu rcursivement par lalgorithme suivant. 1. initialiser TERM = { A : variable telle quil existe une rgle A u avec u * } 2. rpter sil y a une rgle A u avec u ( U TERM )* et A non encore dans TERM, faire TERM = TERM U { A } tant que lensemble TERM nest pas stationnaire. 4.2. Modification de la grammaire. Elle est simplissime : on ne garde que les variables collectes dans TERM, ainsi que les rgles qui les concernent. 4.3. Construction de lensemble des variables quon atteint partir de laxiome. Ltape TERM est suppose faite ; on peut donc obtenir une chane terminale partir de chaque variable restante de la grammaire. On dfinit lensemble ATTEINT = { A : variable telle quil existe une drivation S => uAv } Cet ensemble est construit rcursivement de la manire suivante.
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 35

LesMathmatiques.net 1. initialiser ATTEINT = { S } 2. rpter pour chaque une rgle A u avec A ATTEINT, pour chaque variable B figurant dans u faire ATTEINT = ATTEINT U { B } tant que lensemble ATTEINT nest pas stationnaire. 4.4. Modification de la grammaire. Comme auparavant, on ne garde que les variables collectes dans ATTEINT, et les rgles qui les concernent. De ce fait, des symboles terminaux peuvent ventuellement tre supprims : cest le cas pour ceux qui ne figuraient que dans des rgles concernant des variables supprimes.

5. Forme normale de Chomsky (1959).


Dfinition. Une grammaire G est sous forme normale de Chomsky si toutes ses rgles sont de l'un des types suivants : A A S BC a o B, C V{S} o a o S est laxiome (cette rgle est utilise lorsque

est dans le langage).

Thorme 9. Toute grammaire algbrique est quivalente une grammaire sous forme normale de Chomsky. Preuve du thorme 9. Faire, si ncessaire, les transformations prcdentes 1, 2, 3 et 4. Il reste modifier les rgles non conformes A w o w ( U V)+. Comme les rgles denchanements de variables ont dj t supprimes, la chane w est de longueur suprieure ou gale deux. Tout dabord, on introduit des nouvelles variables de manire pouvoir remplacer w par une chane de mme longueur mais sans symboles terminaux. Ensuite, les rgles de longueur strictement suprieure deux pourront tre remplaces par des rgles plus courtes grce des variables supplmentaires introduites dans ce but. Exemple. Soit la rgle A aBAdC o a, d et A, B, C V.

1) On introduit des variables nouvelles pour chacun des symboles terminaux figurant dans la chane. La rgle prcdente est ainsi remplace par le groupe de rgles A A D ABADC a d

2) Il reste modifier la rgle de longueur suprieure deux A ABADC. En introduisant encore de nouvelles variables, cette rgle peut tre remplace par le groupe de rgles suivantes, conformes au modle de Chomsky
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 36

LesMathmatiques.net A A1 A2 A3 AA1 BA2 AA3 DC

A B A D C

6. Forme normale de Greibach (1965).


Dfinition. Une grammaire G est sous forme normale de Greibach si toutes ses rgles sont de l'un des types suivants : A A S a a A1 A2 An o a o a et A1 , A2 , , An V{S}
est dans le langage).

o S est laxiome (cette rgle est utilise lorsque

Lintrt de cette forme de grammaire est vident : le prfixe terminal des chanes est rallong chaque utilisation dune rgle de grammaire. Thorme 10. Toute grammaire algbrique est quivalente une grammaire sous forme normale de Greibach. 6.1. Le plan de la preuve du thorme 10. On fait, si ncessaire, les transformations prcdentes 1, 2, 3, 4 et 5. A partir dune grammaire sous forme normale de Chomsky, il reste donc modifier les rgles de la forme A BC . Lide est, bien entendu, de rcrire la premire variable avec toutes les rgles qui la concernent, et ceci de manire rpte jusqu obtenir des rgles commenant par un symbole terminal. Malheureusement, on peut entrer ainsi dans une boucle sans fin ; par exemple avec le groupe de rgles A BC B AD on obtiendra A ADC puis A BCDC etc Dans cette situation, il apparat au cours des rcritures successives des rgles dites directement rcursives gauche cest-dire de la forme A Au. Dans une tape prliminaire un peu technique, nous allons voir comment il est possible de supprimer les rgles directement rcursives gauche laide dune nouvelle variable (qui sera, elle, directement rcursive droite, ce qui ne prsente aucun inconvnient). Aprs avoir fix un ordre pour les variables, cette technique nous permettra de progresser vers une forme presque Greibach dans laquelle les rgles de grammaire pour une variable A donne commencent soit par un symbole terminal, soit par une variable dont le numro dordre est strictement suprieur celui de A . Dans cette situation, les rcritures des rgles ne peuvent quaugmenter encore le numro de la variable en prfixe, et aboutir un symbole terminal en prfixe, aprs un nombre fini dtapes. 6.2. La technique dlimination de la rcursivit directe gauche. Dfinition. Une rgle directement rcursive gauche est une rgle de la forme A o u( U V)+.
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

Au

page 37

LesMathmatiques.net Nous avons vu que ce type de rgle est particulirement gnant pour lanalyse syntaxique, et nous allons dcrire une technique permettant de remplacer la rcursivit directe gauche par de la rcursivit directe droite, qui ne prsente aucun dsavantage particulier. Considrons lensemble des rgles pour une variable A donne. Sil y a une (ou plusieurs) rgles directement rcursives gauche, il y a aussi dautres rgles qui ne le sont pas, puisque A na pas t limine lors de la transformation 4 (suppression des variables inutiles). Une de ces autres rgles est ncessairement utilise la suite dune squence dapplications de rgles directement rcursives gauche. En introduisant une nouvelle variable, il est possible dobtenir (avec une rcursivit directe droite sur cette variable auxiliaire) toutes les chanes qui drivent de A par les rgles directement rcursives gauche. Un exemple : A Au | v | w o v et w ne commencent pas par A (ce sont les deux rgles non rcursives gauche). En appliquant la premire rgle n fois de suite (n 1), on produit la chane Aun . On poursuit soit avec la deuxime rgle, ce qui nous donne v.un , soit avec la troisime, et nous obtenons ainsi w.un. Il faut pouvoir obtenir ces chanes v.un et w.un dune autre manire partir de A . Pour cela, il nous suffit de remplacer toutes les rgles concernant A par le groupe de rgles suivant : A Z vZ | wZ | v | w uZ | u
( Z est une nouvelle variable introduite)

On vrifie que la variable auxiliaire sert produire toutes les chanes de la forme un , et celles-ci sont ensuite concatnes u ou v . Elle est directement rcursive droite. Ce petit exemple peut facilement se gnraliser au cas o il y a un nombre quelconque de rgles : A Au1 | Au2 | | Aup | v1 | v2 | | vq avec p rgles directement rcursives gauche, et q rgles qui ne le sont pas. On obtient les nouvelles rgles A Z v1Z | | vqZ | v1 | v2 | | vq u1Z | | upZ | u1 | | up

Exemple. Voici un autre exemple, concret, sous forme normale de Chomsky, avec deux rgles directement rcursives gauche : A AB | AC | a | BA Les chanes drives de A en appliquant uniquement les rgles directement rcursives gauche sont A.{B, C}+. Il faut ensuite appliquer avec la troisime ou la quatrime rgle, ce qui nous donne a.{B, C}+ et BA.{B, C}+. On peut donc remplacer les rgles pour A par le groupe de rgles A Z aZ | BAZ | a | BA BZ | CZ | B | C
( Z dsigne la nouvelle variable introduite)

On peut remarquer cette occasion que ces nouvelles rgles ne sont plus sous forme de Chomsky : nous obtenons des chanes de variables avec ventuellement un symbole terminal en prfixe ; de plus, des rgles denchanements de variables sont ainsi rapparues, mais uniquement pour la variable auxiliaire qui a t introduite.
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 38

LesMathmatiques.net 6.3. De la forme de Chomsky la forme presque Greibach . Commenons par choisir un ordre sur les variables, laxiome tant la premire variable. Dfinition. Une grammaire dont les variables sont ordonnes est de la forme presque Greibach si les rgles sont de lun des types suivants : S A A a.u Bu o a et u V* o uV+ et B est une variable telle que n(B) > n(A) .

Notre but est darriver cette forme, partir dune forme de Chomsky. On procde rcursivement, en suivant lordre des variables. On commence donc par laxiome : n(S)=1 . Comme laxiome est non rcursif (cf. transformation 1), ses rgles sont dj de la forme presque Greibach voulue. Supposons que les i-1 premires variables ont dj t traites et sont sous la forme presque Greibach . Considrons les rgles pour la ime variable. On rcrit celles qui commencent par une variable dont le n est strictement infrieur i avec les rgles dj obtenues : ceci augmente le n de la variable figurant en prfixe, ou donne un symbole terminal en prfixe. Cette opration de rcriture est rpte jusqu ce quaucune rgle ne commence plus par une variable dont le n est strictement infrieur i . Pour notre ime variable, nous avons maintenant des rgles qui sont directement rcursives gauche (ce sont celles qui ont la ime variable en prfixe), ou qui sont dj sous la forme presque Greibach voulue. On supprime la rcursivit directe gauche pour la ime variable (cf. 6.2) en introduisant une nouvelle variable ad hoc (place en fin de liste). Toutes les rgles pour la ime variable sont maintenant de la forme souhaite. Le processus sarrte car les nouvelles variables introduites nauront pas de rgle directement rcursive gauche, puisque ces variables ne figurent en prfixe daucune rgle pour les variables prcdentes. On najoute donc pas indfiniment de nouvelles variables 6.4. De la forme presque Greibach la forme de Greibach. Pour achever la preuve du thorme 10, il suffit de partir dune grammaire sous la forme presque Greibach. Seules les rgles qui commencent par une variable doivent encore tre modifies. Leur rcriture avec les rgles concernant cette variable en prfixe ne peut quaugmenter le n de la variable en prfixe, ou bien donner un symbole terminal en prfixe. Comme il ny a quun nombre fini de variables et de rgles, la transformation est acheve aprs un nombre fini de telles rcritures..

M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 39

LesMathmatiques.net

NETOGRAPHIE
Une prsentation historique du FORTRAN

http://community.computerhistory.org/scc/projects/FORTRAN/ http://www.ibiblio.org/pub/languages/fortran/ch1-1.html
Une biographie et une prsentation historique des travaux de John W. Backus

http://www.thocp.net/biographies/backus_john.htm http://www-groups.dcs.st-and.ac.uk/~history/Mathematicians/Backus.html
Une prsentation de la notation BNF (BNF, "Backus-Naur Form") pour les grammaires, introduite pour le langage ALGOL58 et mise au point en 1960 par John Backus et Peter Naur :

http://cui.unige.ch/db-research/Enseignement/analyseinfo/AboutBNF.html
Un site pour voir de quoi a l'air une "vraie" grammaire : on y trouve une grammaire du PASCAL

http://www.irietools.com/iriepascal/progref534.html#appendix_h_grammar
et, plus gnralement, des informations sur la structure du langage PASCAL :

http://www.irietools.com/iriepascal/progref.html
Pour un aperu historique plus gnral ( muse virtuel ) de l'informatique :

http://vmoc.museophile.org/ http://www.fh-jena.de/~kleine/history/
Une biographie du mathmaticien S.C. Kleene

http://www.onelang.com/encyclopedia/index.php/Stephen_Kleene
et celle de Noam Chomsky, un personnage prsent dans toute sa diversit et ses volutions au fil des ans

http://www.onelang.com/encyclopedia/index.php/Noam_Chomsky -----------------Les rfrences bibliographiques suivantes sont celles des publications originelles des rsultats fondamentaux qui ont t mentionns dans le cours.
Introduction par S. Kleene, en 1956, de la notion de langage rgulier :

Kleene, S. , Representation of Events in Nerve Nets and Finite Automata in Automata Studies (1956) eds. C. Shannon and J. McCarthy.
Les travaux fondamentaux de N. Chomsky sur la description et la classification des langages et grammaires :

1. Chomsky, N., Three models for the description of language, IRE Transactions on Information Theory, 2 (1956), pages 113-124 2. Chomsky, N., On certain formal properties of grammars, Information and Control, 1 (1959), pages 91-112
L'article de Sheila A. Greibach introduisant, en 1965, la forme normale de Greibach, a t l'une de ses premires publications :

Greibach, S., A New Normal-Form Theorem for Context-Free Phrase Structure Grammars, Journal of the ACM (JACM), Volume 12 Issue 1 (1965)
M.P. Muller - LANGAGES - GRAMMAIRES - AUTOMATES

page 40

You might also like