Grammaire indexée

Une grammaire indexée est une généralisation d'une grammaire non contextuelle où les symboles non terminaux sont munis de listes d'indicateurs ou symboles d'index (aussi appelés « flags » en anglais}. Le langage engendré par une grammaire indexée est appelé un langage indexé. Les grammaires indexées sont plus puissantes que les grammaires algébriques, et moins générales que les grammaires contextuelles. Elles sont en revanche équivalentes à d'autres familles de grammaires génératives, comme les grammaires d'arbre adjoints.

Définition

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ù

  • N est l'ensemble des symboles non-terminaux ou variables
  • T est un alphabet composé de symboles terminaux,
  • F est un ensemble de symboles d'index ou d'indices,
  • SN est l'axiome, et
  • P est un ensemble fini de règles de production.

Chaque occurrence d'une variable de la grammaire, dans une production ou dans une dérivation, est munie d'une suite σ F {\displaystyle \sigma \in F^{*}} de symboles d'index, appelée une « pile d'index». L'occurrence d'une pile d'index σ {\displaystyle \sigma } attaché à une variable A {\displaystyle A} est notée

A [ σ ] {\displaystyle A[\sigma ]} ,

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 σ {\displaystyle \sigma } et un mot α ( N T ) {\displaystyle \alpha \in (N\cup T)^{*}} , par α [ σ ] {\displaystyle \alpha [\sigma ]} le mot obtenu en attachant σ {\displaystyle \sigma } à chaque non terminal figurant dans α {\displaystyle \alpha } . Par exemple, pour α = a B C d E {\displaystyle \alpha =aBCdE} , où a {\displaystyle a} et d {\displaystyle d} sont terminaux et B , C , E {\displaystyle B,C,E} sont non-terminaux, α [ σ ] = a B [ σ ] C [ σ ] d E [ σ ] {\displaystyle \alpha [\sigma ]=aB[\sigma ]C[\sigma ]dE[\sigma ]} .

Par définition les productions d'une grammaires indexée doivent être de l'une des formes suivantes :

  1. A [ σ ] α [ σ ] {\displaystyle A[\sigma ]\to \alpha [\sigma ]}
  2. A [ σ ] B [ f σ ] {\displaystyle A[\sigma ]\to B[f\sigma ]}
  3. A [ f σ ] α [ σ ] {\displaystyle A[f\sigma ]\to \alpha [\sigma ]}

A , B N {\displaystyle A,B\in N} sont des variables, f F {\displaystyle f\in F} est un symbole d'index, c F {\displaystyle c\in F^{*}} est un mot d'index et α ( N T ) {\displaystyle \alpha \in (N\cup T)^{*}} 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 «  . . {\displaystyle .\!.}  » à la place de σ {\displaystyle \sigma } , ce qui donne l'écriture :

A [ . . ] α [ . . ] {\displaystyle A[..]\to \alpha [..]} , A [ . . ] B [ f . . ] {\displaystyle A[..]\to B[f..]} et A [ f . . ] α [ . . ] {\displaystyle A[f..]\to \alpha [..]}

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 {\displaystyle \Rightarrow } sur l'ensemble des mots de (N[F^*]\cup T )^*(N[F*]∪T)* comme suit :

  1. Pour une règle de la forme A [ σ ] α [ σ ] {\displaystyle A[\sigma ]\to \alpha [\sigma ]} , on a β A [ ϕ ] γ β α [ ϕ ] γ {\displaystyle \beta A[\phi ]\gamma \Rightarrow \beta \alpha [\phi ]\gamma } . En d'autres termes, la pile ϕ {\displaystyle \phi } du membre gauche est recopiée dans chaque non terminal du membre droit.
  2. Pour une règle de la forme A [ σ ] α [ f σ ] {\displaystyle A[\sigma ]\to \alpha [f\sigma ]} , on a β A [ ϕ ] γ β α [ f ϕ ] γ {\displaystyle \beta A[\phi ]\gamma \Rightarrow \beta \alpha [f\phi ]\gamma } . En d'autres termes, la pile ϕ {\displaystyle \phi } du membre gauche est recopiée dans chaque non terminal du membre droit, mais augmentée au début par le symbole f {\displaystyle f} .
  3. Pour une règle de la forme A [ f σ ] α [ f σ ] {\displaystyle A[f\sigma ]\to \alpha [f\sigma ]} , on a β A [ f ϕ ] γ β α [ ϕ ] γ {\displaystyle \beta A[f\phi ]\gamma \Rightarrow \beta \alpha [\phi ]\gamma } . En d'autres termes, la pile f ϕ {\displaystyle f\phi } du membre gauche est recopiée dans chaque non terminal du membre droit, mais sans son premier symbole f {\displaystyle f} .

Comme d'usage, la relation de dérivation {\displaystyle \Rightarrow ^{*}} est la clôture réflexive et transitive de la relation de dérivation immédiate. Le langage engendré par la grammaire est

L ( G ) = { w T S w } {\displaystyle L(G)=\{w\in T^{*}\mid S\Rightarrow ^{*}w\}} .

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 { w w w w { a , b } } {\displaystyle \{www\mid w\in \{a,b\}^{*}\}}  :

S [ σ ] S [ f σ ] , S [ σ ] S [ g σ ] , S [ σ ] T [ σ ] T [ σ ] T [ σ ] {\displaystyle S[\sigma ]\to S[f\sigma ],\quad S[\sigma ]\to S[g\sigma ],\quad S[\sigma ]\to T[\sigma ]T[\sigma ]T[\sigma ]}
T [ f σ ] a T [ σ ] , T [ g σ ] b T [ σ ] {\displaystyle T[f\sigma ]\to aT[\sigma ],\quad T[g\sigma ]\to bT[\sigma ]}
T [ ] ε {\displaystyle T[]\to \varepsilon }

Une dérivation de a b b a b b a b b {\displaystyle abbabbabb} est :

S [ ] S [ f ] S [ f g ] S [ f g g ] T [ f g g ] T [ f g g ] T [ f g g ] {\displaystyle S[]\Rightarrow S[f]\Rightarrow S[fg]\Rightarrow S[fgg]\Rightarrow T[fgg]T[fgg]T[fgg]}
a T [ g g ] b T [ f g g ] T [ f g g ] a b T [ g ] T [ f g g ] T [ f g g ] a b b T [ ] T [ f g g ] T [ f g g ] {\displaystyle \quad \Rightarrow aT[gg]bT[fgg]T[fgg]\Rightarrow abT[g]T[fgg]T[fgg]\Rightarrow abbT[]T[fgg]T[fgg]}
a b b T [ f g g ] T [ f g g ] a b b a b b T [ f g g ] a b b a b b a b b {\displaystyle \quad \Rightarrow abbT[fgg]T[fgg]\Rightarrow \dotsb \Rightarrow abbabbT[fgg]\Rightarrow abbabbabb}

Un deuxième exemple

L'exemple qui suit est donné dans le livre de Hopcroft et Ullman. Le langage engendré est { a n b n c n n 1 } {\displaystyle \{a^{n}b^{n}c^{n}\mid n\geq 1\}} sur l'alphabet { a , b , c } {\displaystyle \{a,b,c\}} . La grammaire est :

S [ σ ] T [ g σ ] {\displaystyle S[\sigma ]\to T[g\sigma ]}
T [ σ ] T [ f σ ] , T [ σ ] A [ σ ] B [ σ ] C [ σ ] {\displaystyle T[\sigma ]\to T[f\sigma ],\quad T[\sigma ]\to A[\sigma ]B[\sigma ]C[\sigma ]}
A [ f σ ] a A [ σ ] , A [ g σ ] a {\displaystyle A[f\sigma ]\to aA[\sigma ],\quad A[g\sigma ]\to a}
B [ f σ ] b B [ σ ] , B [ g σ ] b {\displaystyle B[f\sigma ]\to bB[\sigma ],\quad B[g\sigma ]\to b}
C [ f σ ] c C [ σ ] , C [ g σ ] c {\displaystyle C[f\sigma ]\to cC[\sigma ],\quad C[g\sigma ]\to c} .

Un exemple de dérivation est :

S [ ] T [ g ] T [ f g ] A [ f g ] B [ f g ] C [ f g ] {\displaystyle S[]\Rightarrow T[g]\Rightarrow T[fg]\Rightarrow A[fg]B[fg]C[fg]}
a A [ g ] B [ f g ] C [ f g ] a a B [ f g ] C [ f g ] a a b B [ g ] C [ f g ] a a b b C [ f g ] a a b b c C [ g ] a a b b c c {\displaystyle \quad \Rightarrow aA[g]B[fg]C[fg]\Rightarrow aaB[fg]C[fg]\Rightarrow aabB[g]C[fg]\Rightarrow aabbC[fg]\Rightarrow aabbcC[g]\Rightarrow aabbcc}

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 { a n b n 2 a n n 1 } {\displaystyle \{a^{n}b^{n^{2}}a^{n}\mid n\geq 1\}} . 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 :

S A f 1 {\displaystyle S\to Af_{1}}
A A f 2 , A B C B {\displaystyle A\to Af_{2},\quad A\to BCB}
f 1 = { B a ,   C b ,   D b } {\displaystyle f_{1}=\{B\to a,\ C\to b,\ D\to b\}}
f 2 = { B a B ,   C b C D D ,   D b D } {\displaystyle f_{2}=\{B\to aB,\ C\to bCDD,\ D\to bD\}} .

Après l'introduction des indexes, on engendre les mots de la forme

B f 2 n f 1 C f 2 n f 1 B f 2 n f 1 {\displaystyle Bf_{2}^{n}f_{1}Cf_{2}^{n}f_{1}Bf_{2}^{n}f_{1}} .

L'élimination des indexes remplace les parties suivant la variable B {\displaystyle B} par a n + 1 {\displaystyle a^{n+1}} et celle suivant C par b n + 1 2 {\displaystyle b^{{n+1}^{2}}} .

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 :

  • les automates à piles emboîtées (en) uni-directionnels de Alfred Aho[4] ;
  • les macro-grammaires de Michael J. Fischer[5] ;
  • les automates à piles de piles de Sheila A. Greibach[6] ;
  • les langages d'une caractérisation algébrique de Thomas Maibaum (en)[7]

Hayashi[8] a généralisé le lemme d'itération pour les langages algébriques aux grammaires indexées. Dans la direction opposée, Gilman[9] donne un lemme de réduction pour les langages indexés.

Grammaires indexées linéaires

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 :

  1. A [ σ ] α [ ] B [ σ ] β [ ] {\displaystyle A[\sigma ]\to \alpha []B[\sigma ]\beta []}
  2. A [ σ ] α [ ] B [ f σ ] β [ ] {\displaystyle A[\sigma ]\to \alpha []B[f\sigma ]\beta []}
  3. A [ f σ ] α [ ] B [ σ ] β [ ] {\displaystyle A[f\sigma ]\to \alpha []B[\sigma ]\beta []}

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 { w w w w { a , b } } {\displaystyle \{www\mid w\in \{a,b\}^{*}\}} par exemple ne peut être engendré par une grammaire linéaire, alors que les langages { w w w { a , b } } {\displaystyle \{ww\mid w\in \{a,b\}^{*}\}} et { a n b n c n n 1 } {\displaystyle \{a^{n}b^{n}c^{n}\mid n\geq 1\}} sur l'alphabet { a , b , c } {\displaystyle \{a,b,c\}} 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 { a n b n c n n 1 } {\displaystyle \{a^{n}b^{n}c^{n}\mid n\geq 1\}}  :

S [ σ ] T [ σ ] , S [ σ ] a T [ f σ ] c {\displaystyle S[\sigma ]\to T[\sigma ],\quad S[\sigma ]\to aT[f\sigma ]c}
T [ f σ ] T [ σ ] b {\displaystyle T[f\sigma ]\to T[\sigma ]b}
T [ ] ε {\displaystyle T[]\to \varepsilon }

Le mot a a b b c c {\displaystyle aabbcc} s'obtient par la dérivation suivante :

S [ ] a S [ f ] c a a S [ f f ] c c a a T [ f f ] c c a a T [ f ] b c c a a T [ ] b b c c a a b b c c {\displaystyle S[]\Rightarrow aS[f]c\Rightarrow aaS[ff]cc\Rightarrow aaT[ff]cc\Rightarrow aaT[f]bcc\Rightarrow aaT[]bbcc\Rightarrow aabbcc}

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] :

D'autres familles de langages plus larges sont engendrées par des formalismes proches ; ce sont des Linear Context-free Rewriting Systems (en), ou des grammaires minimalistes (en). L'analyse syntaxique peut être réalisée en temps polynomial[18].

Grammaires indexées distribuées

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 :

X [ f 1 f i f j f n ] α Y [ f 1 f i ] β Z [ f j f n ] γ {\displaystyle X[f_{1}\dotso f_{i}f_{j}\dotso f_{n}]\to \alpha Y[f_{1}\dotso f_{i}]\beta Z[f_{j}\dotso f_{n}]\gamma }

α {\displaystyle \alpha } , β {\displaystyle \beta } , et γ {\displaystyle \gamma } sont des mots arbitraires. Dans le cas de trois groupes, la règle s'écrit :

X [ f 1 f i f j f k f l f n ] α Y [ f 1 f i ] β Z [ f j f k ] γ W [ f l f n ] η {\displaystyle X[f_{1}\dotso f_{i}f_{j}\dotso f_{k}f_{l}\dotso f_{n}]\to \alpha Y[f_{1}\dotso f_{i}]\beta Z[f_{j}\dotso f_{k}]\gamma W[f_{l}\dotso f_{n}]\eta }

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.

Articles liés

Notes et références

(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Indexed grammar » (voir la liste des auteurs).
  1. (en) John E. Hopcroft et Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Addison-Wesley, (ISBN 0-201-02988-X), section 14.3, p. 389-390. Cette section ne figure plus dans la deuxième édition, datant de 2003.
  2. (en) Alfred Aho, « Indexed grammars—an extension of context-free grammars », Journal of the ACM, vol. 15, no 4,‎ , p. 647–671 (DOI 10.1145/321479.321488, lire en ligne)
  3. 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, (ISBN 978-3-540-60420-4, DOI 10.1007/978-3-642-59136-5), p. 175-252, ici p. 244.
  4. (en) Alfred Aho, « Nested Stack Automata », Journal of the ACM, vol. 16, no 3,‎ , p. 383–406 (DOI 10.1145/321526.321529)
  5. Michael J. Fischer, « Grammars with Macro-Like Productions », Proc. 9th Ann. IEEE Symp. on Switching and Automata Theory (SWAT),‎ , p. 131–142
  6. (en) Sheila A. Greibach, « Full AFL's and Nested Iterated Substitution », Information and Control, vol. 16, no 1,‎ , p. 7–35 (DOI 10.1016/s0019-9958(70)80039-0, lire en ligne)
  7. (en) Thomas S. E. Maibaum, « A Generalized Approach to Formal Languages », J. Computer and System Sciences, vol. 8, no 3,‎ , p. 409–439 (DOI 10.1016/s0022-0000(74)80031-0, lire en ligne)
  8. (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 (DOI 10.2977/prims/1195192738, lire en ligne)
  9. (en) Robert H. Gilman, « A Shrinking Lemma for Indexed Languages », Theoretical Computer Science, vol. 163, nos 1–2,‎ , p. 277–281 (DOI 10.1016/0304-3975(96)00244-7, arXiv 9509205, lire en ligne)
  10. a et b Gerald 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), (ISBN 1-55608-055-7), p. 69–94
  11. a et b Staudacher, 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)
  12. 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
  13. 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].
  14. Gazdar 1988, p. 89.
  15. Gazdar 1988, Appendix, p.89-91.
  16. (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 (DOI 10.1007/bf01191624, lire en ligne)
  17. (en) Mark Steedman, The Syntactic Process, MIT Press, , 330 p. (ISBN 978-0-262-19420-4).
  18. Johan F. A. K. van Benthem (éditeurs) et Alice ter Meulen, Handbook of Logic and Language, Elsevier, , 2e éd., 1168 p. (ISBN 978-0-444-53727-0, lire en ligne), p. 404.
v · m
Théorie des automates, des langages formels et des grammaires formelles
Hiérarchie de ChomskyGrammaireLangageAutomate

Type-0

Machine de Turing
Machine de Turing qui s'arrête toujours

Type-1

Type-2

Type-3

Grammaire régulière ou grammaire rationnelle

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
.
  • icône décorative Portail de la linguistique
  • icône décorative Portail de l'informatique théorique