Você está na página 1de 23

Disciplina – Compiladores

Curso: Engenharia Informática – 3ºAno

Sumario:

Autómatos com pilhas

25 de Maio de 2022 Docente: Aníbal Reis 1


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

1. Introdução
As gramáticas livres de contexto são a base da construção das linguagens
de programação e são por isso muito importantes.

Existirá uma classe de autómatos que se possa associar a todas as


linguagens livres de contexto?

Nos capítulos anteriores vimos que para linguagens regulares, uma


subclasse das livres de contexto, temos os autómatos finitos,
determinísticos e não determinísticos, que são uma forma de
representação e especificação de linguagens.

No entanto como sabemos os autómatos finitos não conseguem


representar todas as linguagens.
25 de Maio de 2022 Docente: Aníbal Reis 2
Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

1. Introdução
Sempre que uma linguagem é infinita e que as suas cadeias têm uma
estrutura tal que é necessário guardar memória da parte da cadeia já lida,
é impossível encontrar um autómato finito para a linguagem.

Por exemplo, nenhum autómato finito é capaz de aceitar a linguagem


L={anbn:,n>=0} porque para isso é necessário uma capacidade infinita de
contagem.

Também no caso de cadeias simétricas em relação a um ponto central,


L={v ϵ ∑* tal que v=wwR ,w ϵ ∑*} se verifica o mesmo, sendo até necessário
aqui a memorização de uma cadeia de símbolos (e não apenas o seu
número) por ordem inversa.
25 de Maio de 2022 Docente: Aníbal Reis 3
Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

1. Introdução
Este facto sugere a utilização de uma pilha como memória, pilha do tipo
LIFO (last in first out) resultando numa classe de máquinas chamadas
autómatos de pilha (pushdown automata, PDA) ou aceitadores de
pilha (pushdown accepters, PDA).

A pilha pode ter uma dimensão arbitrariamente grande, até ∞.

25 de Maio de 2022 Docente: Aníbal Reis 4


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. O autómato de pilha, PDA – Push Down Automata


O PDA tem uma pilha adicional em relação ao autómato finito

25 de Maio de 2022 Docente: Aníbal Reis 5


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. O autómato de pilha, PDA – Push Down Automata


O PDA lê caracteres de entrada, estando num certo estado interno; lê o
símbolo que está no momento presente no topo da pilha; em função de
tudo o que lê, e em função do seu estado interno actual, executa uma
movida do autómato para um outro estado interno, e eventualmente
escreve (ou apaga) um ou vários símbolos no topo da pilha.

Isto é, a função de transição δ tem três argumentos de entrada e dois


argumentos de saída, como ilustrado na figura seguinte.

25 de Maio de 2022 Docente: Aníbal Reis 6


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. O autómato de pilha, PDA – Push Down Automata

Função de transição do PDA.


Como veremos posteriormente, se se permitir que este autómato seja não
determinístico, obtém-se uma classe de autómatos que aceitam
exactamente as linguagens livres de contexto.

Neste caso, contrariamente ao que acontece para os autómatos finitos, e


infelizmente, não há equivalência entre os determinísticos e os não-
determinísticos.
25 de Maio de 2022 Docente: Aníbal Reis 7
Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. O autómato de pilha, PDA – Push Down Automata


A classe dos autómatos de pilha determinísticos define uma nova família
de linguagens, as linguagens determinísticas livres de contexto, muito
importantes para as linguagens de programação e que são um
subconjunto das linguagens livres de contexto maior do que as linguagens
regulares

25 de Maio de 2022 Docente: Aníbal Reis 8


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)

Num autómato de pilha não determinístico, cujo acrónimo é NPDA (do


inglês), cada movida da unidade de controlo
 lê um símbolo na cadeia de entrada,
 altera o conteúdo da pilha através das operações usuais em
pilhas.

Cada movida da unidade de controlo é determinada por


 símbolo de entrada atual
 símbolo no topo da pilha no momento presente.

25 de Maio de 2022 Docente: Aníbal Reis 9


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)


O resultado de uma movida da unidade de controlo é
 um novo estado da unidade de controlo
 uma mudança no topo da pilha.

Poderemos conceber também PDA’s transdutores, com um ficheiro de


saída onde ele escreve.
No entanto só nos interessaremos aqui pelos PDA aceitadores.

25 de Maio de 2022 Docente: Aníbal Reis 10


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)


Definição formal de autómato de pilha não-determinístico
Um aceitador não determinístico de pilha (NPDA-
nondeterministic pushdown accepter) é definido por um septeto

25 de Maio de 2022 Docente: Aníbal Reis 11


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)

25 de Maio de 2022 Docente: Aníbal Reis 12


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)


Uma movida do autómato tem a seguinte sintaxe, sendo δ a função de
transição:

25 de Maio de 2022 Docente: Aníbal Reis 14


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)

Operações sobre pilha

25 de Maio de 2022 Docente: Aníbal Reis 13


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)


A tabela seguinte ilustra outros tipos de transições possíveis.

25 de Maio de 2022 Docente: Aníbal Reis 15


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)


Exemplo 1
Considere-se a transição num NPDA definida por:

Ou

25 de Maio de 2022 Docente: Aníbal Reis 16


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)


Exemplo 2: Seja o NPDA com

25 de Maio de 2022 Docente: Aníbal Reis 17


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)


Há duas transições neste exemplo que merecem uma análise mais
detalhada:

25 de Maio de 2022 Docente: Aníbal Reis 18


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)

Que faz então o autómato? Quando atinge q3 ?

Ele conta os a’s que vai lendo através dos 1’s que escreve na pilha. Num
certo instante tem tantos 1’s quantos os a’s que leu. Depois aparece um b,
muda de estado e apaga um 1. Por cada b que lê depois, apaga um 1.

Se o número de b’s que leu até um certo instante igualar o número de a’s
que leu na primeira parte, apaga todos os 1’s e chega ao símbolo inicial #
que está no fundo da pilha.

E agora se estiver no fim da cadeia, não havendo na leitura mais do que o


λ , passa ao estado aceitador q3.
25 de Maio de 2022 Docente: Aníbal Reis 19
Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)

25 de Maio de 2022 Docente: Aníbal Reis 20


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)

Descrição instantânea de um NPDA


A descrição instantânea do NPDA é completamente definida pelo tripleto

25 de Maio de 2022 Docente: Aníbal Reis 21


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)

25 de Maio de 2022 Docente: Aníbal Reis 22


Disciplina – Compiladores
Curso: Engenharia Informática – 3ºAno

2. Autómatos de pilha não-determinísticos (NPDA)

25 de Maio de 2022 Docente: Aníbal Reis 23

Você também pode gostar