Você está na página 1de 23

UNIVERSIDADE FEDERAL RURAL DO SEMIÁRIDO

CURSO: CIÊNCIA DA COMPUTAÇÃO

TEORIA DA COMPUTAÇÃO
Aula 17 - Máquina com Pilhas

Prof.ª Danielle Casillo


SUMÁRIO

• Capítulos 4, 5, 6, e 7 – Teoria da Computação – Máquinas


Universais e Computabilidade. Autor: Tiarajú.
• Máquinas Universais
• Codificação de Conjuntos Estruturados
• Máquina de Registradores NORMA
• Máquina de Turing
• Máquina de Post
• Máquina com Pilhas
• Autômato com Duas Pilhas

2
MÁQUINA COM PILHAS

• Diferencia-se
das máquinas de Turing e Post principalmente
pelo fato de possuir a memória de entrada separada das
memórias de trabalho e de saída
• Cada máquina possui zero ou mais pilhas
empilha desempilha

topo

sentido
de
3
crescimento
base
MÁQUINA COM PILHAS

• São necessárias duas pilhas para que a Máquina seja, de


fato, Universal
•O uso de mais de duas pilhas não aumenta o poder
computacional das máquinas com pilhas

4
MÁQUINA COM PILHAS

• As seguintes conclusões podem ser estabelecidas sobre o


número de pilhas e o poder computacional das máquinas com
pilhas:

• Máquina Finita: Corresponde a uma Máquina Sem Pilhas,


possui um poder computacional relativamente restrito, pois não
tem memória auxiliar para armazenar informações de
trabalho. Por exemplo, não existe Máquina Sem Pilha capaz
de reconhecer um duplo balanceamento como em { anbn  n 
0} 5
MÁQUINA COM PILHAS
• Máquina com Uma Pilha: Embora mais poderosa que a
Classe das Máquinas Finitas, ainda possui uma capacidade
computacional restrita. Por exemplo, não existe Máquina com
uma Pilha capaz de reconhecer um triplo balanceamento
como em { anbncn  n  0 }

• É uma classe de máquinas de fundamental importância no


estudo das linguagens formais como em compiladores de
linguagem tipo Pascal

6
MÁQUINA COM PILHAS

• Máquina com Duas Pilhas: conforme será verificado adiante,


a Classe das Máquinas com Duas Pilhas possui o mesmo poder
computacional que a Classe das Máquinas de Turing ou de
Post

• Máquina com Mais de Duas Pilhas: possui o mesmo poder


computacional que a Classe das Máquinas com Duas Pilhas

7
MÁQUINA COM PILHAS

• Uma Máquina com Pilhas consiste, basicamente, de três


partes:
a) Variável X: de entrada, similar à da Máquina de Post, mas
usada somente para entrada;
b) Variáveis Yi: do tipo pilha, utilizadas como memória de
trabalho;
c) Programa: É uma sequência finita de instruções,
representado como um diagrama de fluxos onde cada
vértice é uma instrução.
8
MÁQUINA COM PILHAS
• As instruções podem ser de cinco tipos:
• Partida
• Parada
• Desvio
• Empilha
• Desempilha
• A variável X não possui tamanho nem limite fixos
• Os símbolos pertencem ao alfabeto de entrada
9
MÁQUINA COM PILHAS
• Inicialmente, o valor de X é a palavra de entrada, e seu
comprimento é igual ao comprimento da palavra corrente
armazenada. Caso X não contenha símbolos, a entrada é vazia,
representada por 
• As variáveis Yi em número variável mas finito, também não
possuem tamanho nem limite fixos, e os símbolos pertencem ao
alfabeto de entrada
• Inicialmente, o valor de cada pilha Yi é a palavra vazia, e seu
comprimento é igual ao comprimento da palavra corrente
armazenada 10
MÁQUINA COM PILHAS
• IMPORTANTE:
• Embora os modelos Máquina de Post e Máquina com Pilhas
possuam alguma semelhança, existe uma grande diferença em
manipular seus dados

• Na máquina de Post, em uma fila, pode-se ler (e remover)


símbolos em uma extremidade e armazenar na outra. Assim os
dados “circulam”

• Em uma máquina com pilhas, o armazenamento e leitura (e 11

remoção) é sempre na mesma extremidade


MÁQUINA COM PILHAS
DEFINIÇÃO
• Uma Máquina com Pilhas é uma dupla:
M = ( , D)

• Onde:
• alfabeto de símbolos de entrada;
• D programa ou diagrama de fluxos construído a partir de
componentes elementares denominados partida, parada, desvio,
empilha e desempilha

12
MÁQUINA COM PILHAS
• As componentes elementares de um diagrama de fluxos são:
a) Partida: existe somente uma instrução de início (partida) em
um programa

b) Parada: existem duas alternativas de instruções de parada


em um programa: uma de aceitação (aceita), e uma ou
mais de rejeição (rejeita)

13
MÁQUINA COM PILHAS
c) Desvio (ou Teste) e Desempilha: Determinam o fluxo do
programa de acordo com o símbolo mais à esquerda da
palavra armazenada na variável X (desvio) ou no topo da
pilha Yi (desempilha)

14
MÁQUINA COM PILHAS
São desvios condicionais, se o  (alfabeto) é n, então
existem n+1 arestas de desvios condicionais, pois se deve
incluir a possibilidade da palavra vazia 

X  ler(X) ou Yi ← ler (Yi) denota uma leitura destrutiva,


que lê o símbolo mais à esquerda de X ou do topo de Yi
retirando o símbolo lido

15
MÁQUINA COM PILHAS

d) Empilha: Empilha um símbolo s   no topo da pilha


indicada, ou seja, concatena o símbolo na extremidade da
palavra armazenada na variável Yi

16
MÁQUINA COM PILHAS

• Em um diagrama de fluxos, existe somente uma instrução de


partida, mas podem existir diversas instruções de parada,
tanto de aceitação como de rejeição

• Uma palavra de entrada é aceita ou rejeitada, se a


computação, iniciada com a variável X contendo a entrada,
atingir uma instrução aceita ou rejeita, respectivamente

17
MÁQUINA COM PILHAS
• É possível uma Máquina com Pilhas ficar em loop infinito

• Em um desvio ou desempilha, se X ou Yi contém a palavra


vazia , então segue o fluxo correspondente; caso contrário,
lê o símbolo mais à esquerda de X ou no topo de Yi e o
remove após a decisão de qual aresta do fluxo indica a
próxima instrução

18
EXEMPLO - MÁQUINA COM PILHAS
DUPLO BALANCEAMENTO
• Considere a seguinte linguagem
Duplo_Bal = { anbn  n 0 }

A Máquina com Pilhas:


Pilhas_Duplo_Bal = ({ a, b }, D

19
EXEMPLO - MÁQUINA COM PILHAS
DUPLO BALANCEAMENTO
•O algoritmo lê o prefixo de
símbolos a e empilha na única
pilha utilizada Y. Após, para
cada símbolo b em X deve
existir um correspondente a em
Y

20
EXEMPLO - MÁQUINA COM PILHAS
TRIPLO BALANCEAMENTO

• Considere a seguinte linguagem


Triplo_Bal = {anbncn  n  0}

A Máquina com Pilhas:


Pilhas_Triplo_Bal = ({ a, b, c }, D)

21
EXEMPLO - MÁQUINA COM PILHAS
TRIPLO BALANCEAMENTO
• Note-se que foram usadas
duas pilhas. O algoritmo lê o
prefixo de símbolos a e
empilha-os em Y1. Após, para
cada símbolo b em X, deve
existir um correspondente a em
Y1. Adicionalmente, empilha a
subpalavra de símbolos b em
Y2. Por fim, para cada c em X,
deve existir um correspondente
b em Y2
PRÓXIMA AULA:

AUTÔMATO COM DUAS


PILHAS

23

Você também pode gostar