Une grammaire indexée se définit comme une grammaire algébrique, avec en plus des symboles spéciaux appelés indices, ou index, ou « flags » (indicateurs). Ces symboles supplémentaires servent à mémoriser l'application des règles dans le mot engendré, et d'obtenir par là-même un certain degré de parallélisme. Voici la définition formelle :
Une grammaire indexée est une structure G = ⟨N,T,F,P,S⟩, où
Chaque occurrence d'une variable de la grammaire, dans une production ou dans une dérivation, est munie d'une suite de symboles d'index, appelée une « pile d'index». L'occurrence d'une pile d'index attaché à une variable est notée
,
où les crochets ne font pas partie de l’alphabet. Les symboles terminaux ne sont pas dotés de piles.
On étend cette notation aux mots composés de symboles terminaux ou non-terminaux, en notant, pour une pile d'index et un mot , par le mot obtenu en attachant à chaque non terminal figurant dans . Par exemple, pour
, où et sont terminaux et sont non-terminaux, .
Par définition les productions d'une grammaires indexée doivent être de l'une des formes suivantes :
où sont des variables, est un symbole d'index, est un mot d'index et est un mot formé de symboles terminaux et non terminaux. Cela signifie donc que les piles d'index sont soit inchangées, soit augmentées ou diminuées d'un symbole d'index, mais à une extrémité seulement, ce qui leur confère une propriété d'empilement ou dépilement. On trouve aussi la notation « » à la place de , ce qui donne l'écriture :
, et
Une variante de la définition ajoute les symboles d'index en fin pile et non pas au début. Les dérivations sont similaires à celles d'une grammaire non contextuelle sauf pour le symbole d'index attaché aux variables. Lors de l'application d'une règle comme
A[σ] → B[σ]C[σ]
la pile d'index de A est copiée à la fois sur B et sur C. Les autres types de règles permettent d'empiler ou de dépiler des symboles d'index.
Formellement, on définit la relation de dérivation immédiate ou directe, notée
sur l'ensemble des mots de (N[F^*]\cup T )^*(N[F*]∪T)* comme suit :
Pour une règle de la forme , on a . En d'autres termes, la pile du membre gauche est recopiée dans chaque non terminal du membre droit.
Pour une règle de la forme , on a . En d'autres termes, la pile du membre gauche est recopiée dans chaque non terminal du membre droit, mais augmentée au début par le symbole .
Pour une règle de la forme , on a . En d'autres termes, la pile du membre gauche est recopiée dans chaque non terminal du membre droit, mais sans son premier symbole .
Comme d'usage, la relation de dérivation est la clôture réflexive et transitive de la relation de dérivation immédiate. Le langage engendré par la grammaire est
.
Cela signifie que l'on part de l'axiome avec une pile d'index vide, et qu'à la fin de la dérivation, la pile d'index est à nouveau vide.
La définition qui précède est donnée par John Hopcroft et Jeffrey Ullman dans leur livre de 1979[1].
Historiquement, les grammaires indexées ont été introduites par Alfred Aho en 1968[2] avec un formalisme différent.
Exemples
Les piles d'index servent à mémoriser quelles règles ont été appliquées et dans quel ordre.
Un premier exemple
Une grammaire indexée pour les langages :
Une dérivation de est :
Un deuxième exemple
L'exemple qui suit est donné dans le livre de Hopcroft et Ullman. Le langage engendré est sur l'alphabet . La grammaire est :
.
Un exemple de dérivation est :
Un troisième exemple
Un autre exemple est donné dans le chapitre « Aspects of Classical Language Theory » du Handbook of Formal Languages[3]. Il s'agit du langage . Le formalisme donné par ces auteurs est différent : à chaque symbole d'index (ou flag) est associé un ensemble de règles de production usuelles. Les piles d'index sont créées dans une première phase, et consommées dans une deuxième phase en les remplaçant par une quelconque des règles qui y sont attachées. La grammaire est la suivante :
.
Après l'introduction des indexes, on engendre les mots de la forme
.
L'élimination des indexes remplace les parties suivant la variable par et celle suivant C par .
Aucun des trois langages n'est algébrique, comme on peut le voir par le lemme d'itération pour les langages algébriques. Pour le deuxième langage, une grammaire plus simple est donnée plus bas.
Propriétés
Hopcroft et Ullman, dans les notes de leur livre (p. 394-395) considèrent que les langages indexés forment une classe « naturelle » de langages parce qu'ils admettent plusieurs définitions équivalents ; ce sont :
Gerald Gazdar(en)[10] définit une deuxième classe de grammaires appelées maintenant grammaires indexées linéaires[13]; elles sont définies par la propriété qu'au plus une variable dans le membre droit d'une règle peut recevoir la pile d'index, les autres ne reçoivent que la pile vide, alors que dans une grammaire indexée générale, toutes le variable obtiennent copie de la pile d'index. La définition formelle est semblable, sauf que les productions sont de l'une des formes :
Bien entendu, d'autres productions doivent être terminales, c'est-à-dire sans variables dans le membre droit de règle. Cette classe de grammaires définit une classe de langages strictement plus petite[10], elle-même contenu dans la classe des langages "mildly context-sensitive"(en).
Le langage par exemple ne peut être engendré par une grammaire linéaire, alors que les langages et sur l'alphabet sont des langages indexés linéaires.
Si l'on autorise à la fois l'usage de productions en mode indexé et en mode indexé linéaire, la classe de langages n'augmente pas et reste celle des langages indexés[14]
Exemple
Les grammaires indexées dont les membres droits de règle ne comportent pas de variable ou une seule variable (les grammaires linéaires usuelles) sont par définition linéaires. Un tel exemple est la grammaire suivante pour le langage :
Le mot s'obtient par la dérivation suivante :
Puissance d'expression
Les langages engendrés par des grammaires indexées linéaires forment une sous-famille des langages indexés. Une grammaire indexée linéaire peut être convertie en une grammaire indexée de manière pas très compliquée[15].
Vijay-Shanker et Weir[16] montrent que les grammaires indexées linéaires sont équivalentes d'autres formalismes[17] :
Une autre forme de grammaires distribuées, introduite par Peter Staudacher en 1993[11], est la classe des grammaires indexées distribuées qui se distingue des autres modèles par le mode de propagation des indexes.
Alors que, dans le modèle classique, la totalité de la pile d'index est transférée sur les non-terminaux lors de l'opération de réécriture, les grammaires distribuées divisent la pile d'index en segments qui sont distribués à des non-terminaux sélectionnés.
Le schéma général d'une règle de distribution est dans le cas du partage en deux groupes :
où , , et sont des mots arbitraires. Dans le cas de trois groupes, la règle s'écrit :
De même pour des ordres supérieurs. Lorsque la partition est en une seule classe, on retrouve les grammaires indexées linéaires ; les langages indexés distribués forment donc une classe contenant les langages indexés linéaires.
↑(en) John E. Hopcroft et Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Addison-Wesley, (ISBN0-201-02988-X), section 14.3, p. 389-390. Cette section ne figure plus dans la deuxième édition, datant de 2003.
↑Alexandru Mateescu et Arto Salomaa, « Aspects of Classical Language Theory », dans G. Rozenberg, A. Salomaa (éditeurs), Handbook of Formal Languages, vol. 1 : Word, Language, Grammar, Springer Verlag, (ISBN978-3-540-60420-4, DOI10.1007/978-3-642-59136-5), p. 175-252, ici p. 244.
↑(en) Alfred Aho, « Nested Stack Automata », Journal of the ACM, vol. 16, no 3, , p. 383–406 (DOI10.1145/321526.321529)
↑Michael J. Fischer, « Grammars with Macro-Like Productions », Proc. 9th Ann. IEEE Symp. on Switching and Automata Theory (SWAT), , p. 131–142
↑(en) Thomas S. E. Maibaum, « A Generalized Approach to Formal Languages », J. Computer and System Sciences, vol. 8, no 3, , p. 409–439 (DOI10.1016/s0022-0000(74)80031-0, lire en ligne)
↑(en) Takafumi Hayashi, « On Derivation Trees of Indexed Grammars - An Extension of the uvxyz Theorem », Publication of the Research Institute for Mathematical Sciences, vol. 9, no 1, , p. 61–92 (DOI10.2977/prims/1195192738, lire en ligne)
↑ a et bGerald Gazdar, « Applicability of Indexed Grammars to Natural Languages », dans U. Reyle et C. Rohrer, Natural Language Parsing and Linguistic Theories, D. Reidel Publishing Company, coll. « Studies in linguistics and philosophy » (no 35), (ISBN1-55608-055-7), p. 69–94
↑ a et bStaudacher, Peter, « New frontiers beyond context-freeness: DI-grammars and DI-automata. », Sixth Conference of the European Chapter of the Association for Computational Linguistics (EACL '93), , p. 358–367 (lire en ligne)
↑David J. Weir et Aravind K. Joshi, « Combinatory Categorial Grammars: Generative Power and Relationship to Linear Context-Free Rewriting Systems », dans Proc. 26th Meeting Assoc. Comput. Ling., (lire en ligne), p. 278–285
↑D'après Staudacher (1993, p.361 Section 2.2)[11], la dénomination "linear indexed grammars" n'est pas utilisée ans l'article de Gazdar de 1988, mais est apparu plus tard, dans une communication de Weir et Joshi (1988)[12].
↑(en) K. Vijay-Shanker et David J. Weir, « The Equivalence of Four Extensions of Context-Free Grammars », Mathematical Systems Theory, vol. 27, no 6, , p. 511–546 (DOI10.1007/bf01191624, lire en ligne)
↑Johan F. A. K. van Benthem (éditeurs) et Alice ter Meulen, Handbook of Logic and Language, Elsevier, , 2e éd., 1168 p. (ISBN978-0-444-53727-0, lire en ligne), p. 404.
Chaque classe de langages est strictement contenue dans la classe immédiatement au-dessus d'elle. Chaque automate et chaque grammaire d'une classe ont un équivalent dans la classe immédiatement au-dessus.