Aspectos Teóricos da
Computação
Linguagens Formais - 1
Prof. Luiz Fernando R B Corrêa
Agenda
Breve introdução da Hierarquia de
Chomsky
Definição de linguagens regulares
Autômatos Finitos Determinísticos
Gramática AFD / AFD Gramática
Autômatos Finitos Não-determinísticos
Equivalência entre AFND e AFD
Autômatos Finitos com Movimentos
Vazios
Hierarquia de Chomsky
Breve Introdução
Classifica as linguagens 4 tipos:
Tipo 0: Linguagens Enumeráveis
Recursivamente
Maior nível de liberdade em suas
regras
Tipo 1:Linguagens Sensíveis ao
Contexto
Tipo 2:Linguagens Livres do Contexto
Tipo 3:Linguagens Regulares
Hierarquia de Chomsky
Breve Introdução
Os dois últimos níveis são amplamente utilizados
na descrição de linguagens de programação e na
implementação de compiladores e interpretadores
Cada nível é um super conjunto do próximo. Logo,
uma gramática de tipo n é conseqüentemente uma
linguagem de tipo n - 1.
Linguagens Regulares
Linguagens Regulares ou Tipo 3 pode
ser representada por:
Autômato Finito
• Expressão Regular
basicamente, um sistema de estados
finitos (determinístico, não-determinístico
ou com movimentos vazios)
conjuntos (linguagens) básicos +
concatenação e união
• Gramática Regular
gramática com restrições da forma das
regras de produção
Linguagens Regulares
Hierarquia de Chomsky
classe de linguagens mais simples
algoritmos de reconhecimento,
geração ou conversão entre
formalismos
pouca complexidade
grande eficiência
fácil implementação
Linguagens Regulares
Universo de aplicações das
linguagens regulares
Exemplo típico e simples
Muito grande
Constantemente ampliado
Análise léxica
Exemplos mais recentes
Sistemas de animação
Hipertextos
Hipermídias
Sistema de Estados Finitos
Sistema de Estados Finitos
modelo matemático de sistema com
entradas e saídas discretas
número finito e pré-definido de estados
podem ser definidos antes de iniciar o
processamento
Estado
somente informações do passado
necessárias para determinar as ações para
a próxima entrada
Sistema de Estados Finitos
Motivacional
Podem ser associados a diversos tipos de
sistemas naturais e construídos
Exemplo: Elevador
Não memoriza as requisições anteriores
Estado: sumariza "andar corrente" e
"direção de movimento"
Entrada: requisições pendentes
Exemplo: Analisador Léxico, Processador de
Texto
Estado: memoriza a estrutura do prefixo da
palavra em análise
Entrada: texto
Autômato Finito
Reconhecedor de palavras ou cadeia de
caracteres, que sempre pára retornando uma
resposta sim (cadeia reconhecida) ou não
(cadeia não reconhecida)
Bons modelos para computadores com
capacidade de memória reduzida
Fazem parte de vários dispositivos eletromecânicos do dia-a-dia
Podem ser classificados em:
Autômatos Finitos Determinísticos (AFD)
Autômatos Finitos Não-Determinísticos
(AFND)
Autômato Finito
Exemplo - 1
Interruptor de Luz
Se estiver apagada e pressionar, acende
Se estiver acessa e pressionar, apaga
Autômato Finito
Exemplo - 2
Palavra AMOR
Tentativa de
ler a palavra
AMBIENTE
Em q2 não é
mais possível
andar, logo
dizemos que o
autômato na
reconhece a
palavra
Autômato Finito Determinístico
Máquina composta basicamente de três partes:
Fita: dispositivo de entrada
contém informação a ser processada
Unidade de Controle: reflete o estado corrente
da máquina
possui unidade de leitura (cabeça da fita)
acessa uma célula da fita de cada vez
movimenta-se exclusivamente para a direita
Programa, Função Programa ou Função de
Transição
comanda as leituras
define o estado da máquina
Autômato Finito Determinístico
Fita
Finita
dividida em células
cada célula armazena um símbolo
símbolos pertencem a um alfabeto de
entrada
não é possível gravar sobre a fita (não existe
memória auxiliar)
palavra a ser processada ocupa toda a fita
Autômato Finito Determinístico
Unidade de controle
número finito e predefinido de estados
Leitura
lê o símbolo de uma célula de cada vez
move a cabeça da fita uma célula para a direita
posição inicial da cabeça célula mais à esquerda
da fita
Autômato Finito Determinístico
Programa: função parcial
dependendo do estado corrente e do símbolo lido
determina o novo estado do autômato
Não possui memória de trabalho, logo, para
armazenar as informações passadas necessárias
ao processamento, deve-se usar o conceito de
estado
Autômato Finito Determinístico
Definição Formal
Autômato Finito Determinístico (AFD), é definido
pela 5-upla:
M=(Σ,Q, δ,qo,F), onde:
Σ : Alfabeto de símbolos de entrada
Q : conjunto de estados possíveis do autômato o
qual é finito
δ : função programa ou função transição: δ:QxΣQ
,a qual é uma função parcial. Significa dizer que
permanecendo em um estado e lendo um símbolo
do alfabeto faz o autômato passar para outro estado
ou mesmo ficar no mesmo
transição do autômato: δ(p, a) = q
q0 : estado inicial tal que q0 é um elemento de Q
F : conjunto de estados finais tal que F está contido
em Q
Autômato Finito Determinístico
Definição Formal
Autômato finito como um diagrama: δ(p, a) = q
Autômato Finito Determinístico
Definição Formal
Estados iniciais e finais
Transições paralelas: δ(q, a) = p e δ(q, b) = p
Os arcos que vão de um estado para outro
são chamados de transições
Autômato Finito Determinístico
Definição Formal
Função programa como uma tabela de dupla
entrada
Autômato Finito Determinístico
Definição Formal
Computação de um autômato finito
sucessiva aplicação da função programa para
cada símbolo da entrada (da esquerda para a
direita) até ocorrer uma condição de parada
Lembre-se que um autômato finito
não possui memória de trabalho para
armazenar as informações passadas deve-se
usar o conceito de estado
Autômato Finito Determinístico
Definição Formal
Exemplo: Autômato Finito: aa ou bb como
subpalavra
L1 = { w | w possui aa ou bb como subpalavra }
Autômato finito:
M1 = ({ a, b }, { q0, q1, q2, qf }, δ1, q0, { qf })
*
Obs.: Para facilitar, o estado inicial vamos
marcar com e os finais com *
Autômato Finito Determinístico
Definição Formal – Gramática AFD
q1: "símbolo anterior é a“
q2: "símbolo anterior é b“
após identificar aa ou bb
qf (final): varre o sufixo da entrada terminar o processamento
Autômato Finito Determinístico
Definição Formal
Lendo a palavra abba
Autômato Finito Determinístico
Definição Formal
Lendo a palavra abba
Autômato Finito Determinístico
Definição Formal – AFD Gramática
Seja o AFD:
A gramática é:
G={{a,b},{q0,q1,q2}, δ,{q0},{q2}
δ
a
b
q0
q1
∅
q1
∅
q2
q2
∅
∅
Autômato Finito Determinístico
Definição Formal
Autômato Finito Sempre Para
Como
qualquer palavra é finita
novo símbolo é lido a cada aplicação da função
programa
não existe a possibilidade de ciclo (loop) infinito
Parada do processamento
Aceita a entrada
após processar o último símbolo, assume um
estado final
Rejeita a entrada. Duas possibilidades
após processar o último símbolo, assume um
estado não-final
programa indefinido para argumento (estado e
símbolo)
Autômato Finito Determinístico
Resumindo
Definir um AFD engloba definir
Um conjunto finito de estados;
Um alfabeto de entrada que indica os símbolos
de entrada permitidos;
Um conjunto de regras de movimento que
indicam como ir de um estado p/ outro,
dependendo do símbolo de entrada;
Um estado escolhido como estado inicial;
Um conjunto de estados escolhidos como
estados finais (de reconhecimento);
Autômato Finito Determinístico
Para definir formalmente o comportamento de
um Autômato Finito (ou seja, dar semântica à
sintaxe de um Autômato Finito), é necessário
estender a definição da função programa
usando como argumento um estado e uma
palavra
Autômato Finito Determinístico
Função Programa Estendida (FPE), Computação
Seja M = (Σ, Q, δ, q0, F) AFD. A função programa
estendida denotada por:
δ*: Q × Σ* → Q
é a função prog δ: Q × Σ → Q estendida para
palavras - indutivamente definida
δ*(q, ε) = q
δ*(q, aw) = δ*(δ(q, a), w)
Observe
sucessiva aplicação da função programa para
cada símb da palavra a partir de um dado estado
se a entrada for vazia, fica parado
aceita/rejeita: função programa estendida a
partir do estado inicial
Autômato Finito Determinístico
Função Programa Estendida (FPE), Computação
Exemplo:
Função estendida= fe
δ*(q0, abaa) =
δ*(δ(q0, a), baa) =
δ*(q1, baa) =
δ*(δ(q1, b), aa) =
δ*(q2, aa) =
δ*(δ(q2, a), a) =
δ*(q1, a) =
δ*(δ(q1, a), ε) =
δ*(qf, ε) =
ACEITA
fe sobre abaa
processa abaa
fe sobre baa
processa baa
fe sobre aa
processa aa
fe sobre a
processa a
qf fe sobre ε: fim da indução;
Autômato Finito Determinístico
Linguagem Aceita, Linguagem rejeitada
Seja M = (Σ, Q, δ, q0, F) um AFD
Ling Aceita ou Ling Reconhecida por M
L(M) = ACEITA(M) = { w | δ*(q0, w) ∈ F }
Ling Rejeitada por M:
REJEITA(M) = { w | δ*(q0, w) ∉ F ou δ*(q0, w) é
indefinida }
Supondo que Σ* é o conjunto universo
ACEITA(M) ∩ REJEITA(M) = ∅
ACEITA(M) ∪ REJEITA(M) = Σ*
~ACEITA(M) = REJEITA(M) Complemento
~REJEITA(M) = ACEITA(M) Complemento
Autômato Finito Determinístico
Autômatos Finitos Equivalentes
Diferentes autômatos finitos podem aceitar uma
mesma linguagem
M1 e M2 são Autômatos Finitos Equivalentes se e
somente se
ACEITA(M1) = ACEITA(M2)
Autômato Finito Determinístico
Linguagem Regular ou Tipo 3
L é uma Linguagem Regular ou Linguagem Tipo 3
existe pelo menos um autômato finito
determinístico que aceita L
Autômato Finito Determinístico
Exercício
Autômato Finito: número par de cada
símbolo:
L4 = { w | w possui um número par de a e um número
par de b }
Desenhar o AFD
Autômato Finito Não-Determinístico
Definições
Não-determinismo
Importante generalização dos modelos de
máquinas.
Fundamental no estudo de teoria da
computação e teoria das linguagens formais
Não é sempre que aumenta o poder de
reconhecimento de linguagens de uma classe
de autômatos
Qualquer AFND pode ser representado por um
AFD. O contrário também é verdade
Autômato Finito Não-Determinístico
Definições
Não-determinismo no programa, é uma função
parcial
dependendo do estado corrente e do símbolo
lido, determina um conjunto de novos estados
do autômato.
Assume um conjunto de estados alternativos
como uma multiplicação da unidade de
controle uma para cada alternativa
processando independentemente sem
compartilhar recursos
Podemos ter zero, uma ou mais transições de
estado com o mesmo símbolo de entrada.
Autômato Finito Não-Determinístico
M = (Σ, Q, δ, q0, F)
Σ - alfabeto (de símbolos) de entrada
Q - conjunto de estados possíveis (finito)
δ - (função) programa ou função de transição
(função parcial)
δ: Q × Σ → 2Q
transição: δ(p, a) = { q1, q2, …, qn }
q0 é um elemento distinguido de Q: estado inicial
F é um subconjunto de Q: conjunto de estados
finais
Autômato Finito Não-Determinístico
Autômato como Diagrama
Autômato Finito Não-Determinístico
O processamento de um AFND M para um
conjunto de estados ao ler um símbolo, é a união
dos resultados da função programa aplicada a
cada estado alternativo.
Para definir formalmente o comportamento de
um AFND é necessário estender a definição da
função programa usando como argumento um
conjunto finito de estados e uma palavra
Autômato Finito Não-Determinístico
Função Programa Estendida, Computação
Seja M = (Σ, Q, δ, q0, F) um AFND. A função
Programa Estendida(FPE) denotada por:
δ*: 2Q × Σ* → 2Q
indutivamente definida como
δ*(P, ε) = P
δ*(P, aw) = δ*(∪q∈P δ(q, a), w)
Transição estendida (a um conjunto de estados):
dado um conjunto de estados {q1,q2,...,qn} e para
um símbolo a:
δ*({ q1, q2,…, qn }, a) = δ(q1, a) ∪ δ(q2, a) ∪…∪
δ(qn, a)
Autômato Finito Não-Determinístico
Parada do processamento
Aceita a entrada
após processar o último símbolo da fita, existe
pelo menos um estado final pertencente ao
conjunto de estados alternativos atingidos
Rejeita a entrada. Duas possibilidades
após processar o último símbolo da fita, todos
os estados alternativos atingidos são nãofinais
programa indefinido para o argumento
(conjunto de estados e símbolo)
Autômato Finito Não-Determinístico
Linguagem Aceita, Linguagem Rejeitada
Seja M = (Σ, Q, δ, q0, F) um autômato finito nãodeterminístico
Ling Aceita ou Linguagem Reconhecida por M
L(M) = ACEITA(M) = { w | δ*({ q0 }, w) ∩ F ≠ ∅ }
Linguagem Rejeitada por M
REJEITA(M) = { w | δ*({ q0 }, w) ∩ F = ∅ ou δ*({ q0 },
w) é indefinida }
Autômato Finito Não-Determinístico
Linguagem Aceita, Linguagem Rejeitada
Exemplo: AFND: aa ou bb como subpalavra
L5 = { w | w possui aa ou bb como subpalavra }
AFND:
M5 = ({ a, b }, { q0, q1, q2, qf }, δ5, q0, { qf })
Desenhar o AFD
Representar δ5 em tabela, tal que ACEITA(M5)=l5
Autômato Finito Não-Determinístico
Linguagem Aceita, Linguagem Rejeitada
o ciclo em q0 realiza uma varredura em toda a entrada
o caminho q0/q1/qf garante a ocorrência de aa
o caminho q0/q2/qf garante a ocorrência de bb
Autômato Finito Não-Determinístico
Linguagem Aceita, Linguagem Rejeitada
*
Autômato Finito Não-Determinístico
Linguagem Aceita, Linguagem Rejeitada
Exemplo2: AFND: aaa como sufixo
L6 = { w | w possui aaa como sufixo }
Autômato finito não-determinístico:
M6 = ({ a, b }, { q0, q1, q2, qf }, δ6, q0, { qf })
Autômato Finito Não-Determinístico
Exercício
Exemplo3: AFND:
Dado M = ({q0,q1,q2}, {a,b}, δ, qo, {q2})
Diga se a palavra bab é aceita ou rejeitada e justifique!
a
b
q0
{q1}
{q0,q1}
q1
{}
{q2}
*q2
{q2}
{q2}
Relação entre AFD e AFND
Não-determinismo
aparentemente, um significativo acréscimo ao poder
computacional autômato finito
na realidade não aumenta seu poder computacional
Teorema: Equivalência entre AFD e AFND
Classe dos Autômatos Finitos Determinísticos é
equivalente à Classe dos Autômatos Finitos NãoDeterminísticos
Relação entre AFD e AFND
Transformação de AFND em AFD
Seja o AFND
Relação entre AFD e AFND
Transformação de AFND em AFD
Transições do estado vazio + estados resultantes da junção
de dois ou mais estados da transição...
Relação entre AFD e AFND
Transformação de AFND em AFD
Relação entre AFD e AFND
Transformação de AFND em AFD
{q2} = estado de aceitação, então todos os estados que
tiverem q2 também serão estados de aceitação
Relação entre AFD e AFND
Transformação de AFND em AFD
Será que temos estados inacessíveis que podem ser
removidos?
Para facilitar a identificação, renomear os estados.
Quem acessa o estado C? Retirando o estado C, quem
acessará o estado D? ...
Relação entre AFD e AFND
Transformação de AFND em AFD
Após simplificação
=
Relação entre AFD e AFND
Algoritmo de conversão de AFND em AFD
1.
2.
3.
4.
5.
Tome o diagrama de transição do AFND e crie para cada
conjunto de estados, um novo estado onde o rótulo é o
próprio conjunto.
Complete as transições de cada novo estado acompanhando o
comportamento de cada estado individualmente e tomando a
união dos estados acessados.
Adicione como estados finais aqueles estados que tem como
rótulo um estado final.
Elimine os estados nunca acessados a partir do estado inicial.
Complete o AFD da seguinte forma:
1.
Q do AFD são os estados resultantes dos passos até este
ponto.
2.
O alfabeto não é alterado
3.
A construção do delta já foi mencionada.
4.
O estado inicial não se altera
5.
Os estados finais são a união de todos os estados finais do
delta resultante.
Exercícios
Transformar de AFND para AFD
Exercícios
Transformar de AFND para AFD
Exercícios
Transformar de AFND para AFD
Autômatos Finitos com Mov. Vazios
AFNε ou AFε
Movimentos vazios
generalizam os movimentos não-determinísticos
Movimento vazio
transição sem leitura de símbolo algum da fita
interpretado como um não-determinismo interno ao
autômato
transição encapsulada
excetuando-se por uma eventual mudança de
estados, nada mais pode ser observado
Autômatos Finitos com Mov. Vazios
Algumas vantagens
facilita algumas construções e demonstrações
Poder computacional p/ autômatos finitos
não aumenta o poder de reconhecimento de linguagens
qualquer AFNε pode ser simulado por um AFD
Autômatos Finitos com Mov. Vazios
O autômato vai do estado p para o estado q sem ler um
símbolo de entrada.
p
q
Autômatos Finitos com Mov. Vazios
Exemplo 1
Suponha um autômato que reconhece a soma de um inteiro
positivo ou negativo com um decimal positivo
Autômatos Finitos com Mov. Vazios
Exemplo 1
Acompanhar este autômato com a expressão -12+2.6
Autômatos Finitos com Mov. Vazios
Exemplo 2
Mostre como o autômato finito não-determinístico com
transições vazias (AFND-ε) se comporta ao receber a
palavra abc.
Para isso, mostre os conjuntos de estados atingidos após a
leitura de cada símbolo da palavra. Lembre-se de
considerar as transições ε antes e depois de fazer a
transição para os símbolos da palavra.
Autômatos Finitos com Mov. Vazios
Exemplo 2
Autômatos Finitos com Mov. Vazios
Exemplo 3
AFNε: a’s antecedem b’s
M7 = ({ a, b }, { q0, qf }, δ7, q0, { qf })
Autômatos Finitos com Mov. Vazios
Exemplo 4
L8 = { w | w possui como sufixo a ou bb ou ccc }
M8 = ({ a, b, c }, { q0, q1, q2, q3, q4, q5, q6, qf }, δ8,
q0, { qf })
Autômatos Finitos com Mov. Vazios
Exemplo 3
ee
s
t
p
q
u
bebeb
r
Estando no estado s e recebendo o símbolo b:
ler b e ir para p
ir para t e então ler b e ir para q
ir para t, ir para u e então ler b e ir para r.
O conjunto {b, bb, bbb} é aceito pelo autômato.
Referências da Aula
Material de aula: Linguagens Formais e
Autômatos Expressões Regulares. Professor
Eduardo Araújo Oliveira.
http://sites.google.com/site/eaoufpe
Licenciatura em Engenharia Informática – DEI/ISEP,
Linguagens de Programação 2006/07, Ficha 4,
Autómatos Finitos Determinísticos
http://www.dei.isep.ipp.pt/~goreti/ficha4.pdf
Capítulo 3 - Autómatos e respectivas
linguagens. Carlos Barrico.
http://www.di.ubi.pt/~cbarrico/Disciplinas/Compilad
ores/Downloads/Capitulo3.pdf