Professional Documents
Culture Documents
net
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.
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.
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>
- 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
page 4
LesMathmatiques.net
LesMathmatiques.net
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.
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.
page 7
LesMathmatiques.net
page 8
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
v ===> w
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.
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.
G:
S A
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.
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) :
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.
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.
page 13
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).
page 14
LesMathmatiques.net
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.
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).
a6
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.
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.
page 18
LesMathmatiques.net
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
page 19
LesMathmatiques.net
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
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
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 ?
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
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
S
1 2
aS
1 2 3
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
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.
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
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
LesMathmatiques.net Rponse :
{1} a [1,2,3} a b b {2,3}
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 .
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.
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 .
page 29
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 !
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.
page 31
LesMathmatiques.net
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
page 32
LesMathmatiques.net
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
A T
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.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
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.
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
A B A D C
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..
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