Autômato de pilha agrupado

Na teoria dos autômatos, uma pilha de autômatos agrupados é um autômato finito que pode ser usado como uma pilha que contém dados que podem ser de pilhas adicionais.[1] Como um autômato de pilha, um autômato de pilha agrupado podem passar para cima ou para baixo na pilha, e ler o símbolo atual; além disso, ele poderá, em qualquer lugar, criar uma nova pilha, operar em que, eventualmente destruí-la, e continuar operando com a pilha antiga. Desta forma, as pilhas podem ser agrupadas de forma recursiva a uma profundidade arbitrária; no entanto, o autômato sempre opera na parte mais interna da pilha.

Autômato de pilha agrupado tem o mesmo mecanismo de um autômato com pilha, mas tem menos restrições para ser usado.

Autômato de pilha agrupado é capaz de reconhecer uma linguagem indexada,[2] e no fato de a classe de linguagem indexada é, exatamente, a classe de linguagens aceita por um caminho não-determinístico de autômatos de pilha agrupados.[1][3]

Autômato de pilha agrupado não deve ser confundido com autômato com pilha embutido, que têm menos poder computacional.[citação necessários]

Definição Formal editar

Autômato editar

Um (não determinístico) autômato de pilha agrupado é uma tupla "Q,Σ,Γ,δ,q0,Z0,F,[,],]" onde

  • Q, Σ, Γ é um conjunto finito não vazio de estados, de entrada de símbolos, e pilha de símbolos, respectivamente,
  • [, ], ] são símbolos especiais distintos que não são contidos em Σ ∪ Γ,
    • [ é usado como um marcador a esquerda para a entrada de cadeias de caracteres e uma (sub)pilha de cadeias de caracteres,
    • ] é utilizado como um marcador a direita para estas cadeias de caracteres,
    • ] é usada como um marcador de fim da cadeia de caracteres denotando a pilha inteira.[note 1]
  • Um longo alfabeto de entrada é definida por Σ' = Σ ∪ {[,]}, uma pilha expandida de alfabeto Γ' = Γ ∪ {]}, e o conjunto de entrada que informa a direção, por D = {-1,0,+1}.
  • δ, o controle finito, é um mapeamento de Q × Σ' × (Γ' ∪ [Γ' ∪ {], []}) em subconjuntos finitos de Q × D × ([Γ*D), tal que δ mapas[note 2]
Q × Σ' × [Γ em subconjuntos de Q × D × [Γ* (modo de pilha),
Q × Σ' × Γ' em subconjuntos de Q × D × D (modo de leitura),
Q × Σ' × [Γ' em subconjuntos de Q × D × {+1} (modo de leitura),
Q × Σ' × {]} em subconjuntos de Q × D × {-1} (modo de leitura),
Q × Σ' × (Γ' ∪ [Γ') em subconjuntos de Q × D × [Γ*] (modo pilha de criação), e
Q × Σ' × {[]} em subconjuntos de Q × D × {ε}, (modo de destruição da pilha),
Informalmente, o símbolo superior de um (sub)pilha juntamente com o seu marcador anterior a esquerda "[" é visto como um único símbolo;[4] , em seguida, δ lê
  • o estado atual,
  • o atual símbolo de entrada, e
  • o atual símbolo da pilha,
e saídas
  • o próximo estado,
  • a direção em a qual se move na entrada, e
  • a direção na a qual se move na pilha, ou a cadeia de símbolos para substituir a pilha de maior símbolo.
  • q0Q é o estado inicial,
  • Z0 ∈ Γ é o símbolo de pilha inicial,
  • FQ é o conjunto de estados finais.

Configuração editar

Uma configuração, ou descrição instantânea de como um autômato consiste em uma tripla " q, [a1a2...ai...an-1], [Z1X2...Xj...Xm-1] ", onde

  • qQ é o estado atual,
  • [a1a2...ai...an-1] é a seqüência de caracteres de entrada; por conveniência, a0 = [ e an = ] está definido[note 3] A posição atual na entrada, ou seja, i com 0 ≤ in, é marcada por sublinhado o respectivo símbolo.
  • [Z1X2...Xj...Xm-1] é a pilha, incluindo subpilhas; por conveniência, X1 = [Z1 [note 4] e Xm = ] está definido. A posição atual na pilha, ou seja, j com 1 ≤ jm, é marcado sublinhando o respectivo símbolo.

Exemplo editar

Um exemplo de execução (seqüência de caracteres de entrada não são mostrados):

Ação Passo Pilha
1: [a b [k ] [p ] c ]
Criar subpilha      2: [a b [k ] [p [r s ] ] c ]
remover 3: [a b [k ] [p [s ] ] c ]
remover 4: [a b [k ] [p [] ] c ]
Apagar subpilha
5: [a b [k ] [p ] c ]
mover para cima 6: [a b [k ] [p ] c ]
mover para cime 7: [a b [k ] [p ] c ]
mover para cima 8: [a b [k ] [p ] c ]
inserir 9: [a b [k ] [n o p ] c ]

Propriedades editar

Quando autômatos são permitidos para re-ler sua entrada ("autômato finito determinístico de dois sentidos"), pilhas agrupadas não resultam em uma linguagem com capacidades de reconhecimento adicional, em comparação a pilhas simples.[5]

Gilman e Shapiro usaram autômatos de pilha agrupado para resolver o problema de palavras em determinados grupos.[6]

Notas editar

  1. Aho originally used "$", "¢", and "#" instead of "[", "]", and "]", respectively.
  2. Juxataposition denotes string (set) concatenation, and has a higher binding priority than set union ∪.
  3. Aho originally used the left and right stack marker, viz. $ and ¢, as right and left input marker, respectively.
  4. The top symbol of a (sub)stack together with its preceding left endmarker "[" is viewed as a single symbol.

Referências editar

  1. a b Aho, Alfred (1969). «Nested stack automata». Journal of the ACM. 16 (3): 383–406. ISSN 0004-5411. doi:10.1145/321526.321529 
  2. Partee, Barbara; Alice ter Meulen; Robert E. Wall (1990). Mathematical Methods in Linguistics. [S.l.]: Kluwer Academic Publishers. pp. 536–542. ISBN 978-90-277-2245-4 
  3. John E. Hopcroft, Jeffrey D. Ullman (1979). Introduction to Automata Theory, Languages, and Computation. [S.l.]: Addison-Wesley. ISBN 0-201-02988-X 
  4. Aho (1969), p.385 top
  5. C. Beeri (1975). «Two-Way Nested Stack Automata Are Equivalent to Two-Way Stack Automata» (PDF). J. Comp. and System Sciences. 10: 317–339. doi:10.1016/s0022-0000(75)80004-3 
  6. Robert Gilman, Michael Shapiro (Dec 1998).