Gramàtica indexada

Les gramàtiques indexades son una generalització de les gramàtiques lliures del context en les que els símbols no terminals estan equipats amb una llista d'etiquetats o índex de símbol. Un llenguatge produït per una gramàtica indexada s'anomena un llenguatge indexat.[1][2]

Definició formal

Una gramàtica indexada es defineix com una 5-tupla G = ( N , T , F , P , S ) {\displaystyle G=(N,T,F,P,S)} on:

  • N {\displaystyle N} és un conjunt de variables o de símbols no terminals
  • T {\displaystyle T} és un alfabet de símbols terminals
  • F {\displaystyle F} és un conjunt de símbols índexs o etiquetes
  • S N {\displaystyle S\in N} és el símbol d'inici
  • P {\displaystyle P} és un conjunt finit de regles de producció

A les regles de producció s'afegeix una cadena (stack) σ F {\displaystyle \sigma \in F^{*}} de símbols índex enganxat a cada símbol no terminal A N {\displaystyle A\in N} , denotat per A [ σ ] {\displaystyle A[\sigma ]} . Els símbols terminals poden no dur stacks associats. Per un stack d'índex σ F {\displaystyle \sigma \in F^{*}} i una cadena α ( N T ) {\displaystyle \alpha \in (N\cup T)^{*}} de símbols no terminals, α [ σ ] {\displaystyle \alpha [\sigma ]} denota el resultat d'enganxar [ σ ] {\displaystyle [\sigma ]} a cada símbol no terminal d' α {\displaystyle \alpha } .

Per exemple, si α {\displaystyle \alpha } és igual a a B C d E {\displaystyle aBCdE} amb a , d T {\displaystyle a,d\in T} símbols terminals i B , C , E N {\displaystyle B,C,E\in N} símbols no terminals, llavors α [ σ ] {\displaystyle \alpha [\sigma ]} denota a B [ σ ] C [ σ ] d E [ σ ] {\displaystyle aB[\sigma ]C[\sigma ]dE[\sigma ]} . Seguint aquesta notació, cada regla de producció P {\displaystyle P} ha de ser de la forma:

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

On A , B N {\displaystyle A,B\in N} son símbols no terminals, f F {\displaystyle f\in F} és un índex, σ F {\displaystyle \sigma \in F^{*}} és una cadena de símbols d'índex i α ( N T ) {\displaystyle \alpha \in (N\cup T)^{*}} és una cadena de símbols no terminals (alguns autors fan servir "..." enlloc de σ {\displaystyle \sigma } .

Les derivacions son similars a les de les gramàtiques lliures de context excepte per l'stack de símbols índex per cada símbol no terminal. Quan s'aplica una regla de producció com A [ σ ] B [ σ ] C [ σ ] {\displaystyle A[\sigma ]\rightarrow B[\sigma ]C[\sigma ]} , l'stack d'A es copia a B i C. A més, una regla pot afegir un símbol d'índex a l'stack o treure el de més a l'esquerra.

Formalment, la relació {\displaystyle \Rightarrow } ("derivació directa") es defineix en el conjunt ( N [ F ] T ) {\displaystyle (N[F^{*}]\cup T)^{*}} com segueix:

  1. Si A [ σ ] α [ σ ] {\displaystyle A[\sigma ]\rightarrow \alpha [\sigma ]} és una regla de producció de tipus 1, llavors β A [ ϕ ] γ β α [ ϕ ] γ {\displaystyle \beta A[\phi ]\gamma \Rightarrow \beta \alpha [\phi ]\gamma } . Això és, l'stack ϕ {\displaystyle \phi } de la part esquerra de la regla de producció es copia a cada símbol no terminal de la part dreta.
  2. Si A [ σ ] B [ f σ ] {\displaystyle A[\sigma ]\rightarrow B[f\sigma ]} és una regla de producció de tipus 2, llavors β A [ ϕ ] γ β B [ f ϕ ] γ {\displaystyle \beta A[\phi ]\gamma \Rightarrow \beta B[f\phi ]\gamma } . Això és, l'stack d'índex de la part dreta s'obté de l'stack ϕ {\displaystyle \phi } de la part esquerra afegint f {\displaystyle f} .
  3. Si A [ f σ ] α [ σ ] {\displaystyle A[f\sigma ]\rightarrow \alpha [\sigma ]} és una regla de producció de tipus 3, llavors β A [ f ϕ ] γ β α [ ϕ ] γ {\displaystyle \beta A[f\phi ]\gamma \Rightarrow \beta \alpha [\phi ]\gamma } , fent servir la definició de α [ σ ] {\displaystyle \alpha [\sigma ]} . Això és, el primer índex f {\displaystyle f} es treu de l'stack de la part esquerra i es distribueix a cada símbol no terminal de la part dreta.

Exemples

A la pràctica, stacks d'índexs poden comptar i recordar quines regles s'han aplicat i en quin ordre. Per exemple, les gramàtiques indexades poden descriure llenguatges sensibles al context de paraules triples { w w w : w { a , b } } {\displaystyle \{www:w\in \{a,b\}^{*}\}} :

S[σ] S[] T[] a T[σ]
S[σ] S[] T[] b T[σ]
S[σ] T[σ] T[σ] T[σ]   T[] ε

Una derivació de abbabbabb és:

S[]S[g]S[gg]S[fgg]T[fgg] T[fgg] T[fgg]a T[gg] T[fgg] T[fgg]ab T[g] T[fgg] T[fgg]abb T[] T[fgg] T[fgg]abb T[fgg] T[fgg]...abb abb T[fgg]...abb abb abb.

Vegeu també

  • Jerarquia de Chomsky
  • Llenguatge indexat

Referències

  1. Aho, Alfred V. «Indexed Grammars—An Extension of Context-Free Grammars». J. ACM, 15, 4, 1968-10, pàg. 647–671. DOI: 10.1145/321479.321488. ISSN: 0004-5411.
  2. Hayashi, Takeshi «On Derivation Trees of Indexed Grammars – An Extension of the uvwxy-Theorem». Publications of the Research Institute for Mathematical Sciences, 9, 1, 30-04-1973, pàg. 61–92. DOI: 10.2977/prims/1195192738. ISSN: 0034-5318.
  • Vegeu aquesta plantilla
Jerarquia de ChomskyGramàtiquesLlenguatgesMàquines abstractes
  • Tipus-0
  • Tipus-1
  • Tipus-2
  • Tipus-3
Cada categoria de llenguatges, excepte aquells marcats per *, és un subconjunt de la categoria superior. Qualsevol llenguatge en aquesta categoria es genera per una gramàtica i per un autòmat de la categoria de la mateixa línia.