Este documento discute linguagens regulares e autômatos finitos. Ele introduz os conceitos de autômato finito, suas partes, como funciona, e como pode ser usado para reconhecer linguagens regulares. Também discute composição sequencial e não determinista de sistemas e como autômatos finitos podem ser compostos.
3. Linguagens Regulares
● O estudo das linguagens regulares é abordado
usando os seguintes formalismos:
➔ Autômato Finito. Trata-se d eum formalismo
operacional ou reconhecedor, sendo basicamente,
um sistema de estados finitos;
➔ Expressão Regular. Trata-se de um formalismo
denotacional, também considerado gerador, o qual
é definido a partir de conjuntos (linguagens)
básicos e das operações de concatenação e de
união;
➔ Gramática Regular. Trata-se de um formalismo
axiomático ou gerador o que, como o nome indica,
é uma gramática, mas com restrições de forma das
regras de produção.
Aspectos Teóricos da Computação 3/35
4. Linguagens Regulares
De acordo com a hierarquia de Chomsky, as
linguagens regulares constituem a classe de
linguagem mais simples, sendo possível
desenvolver algoritmos de reconhecimento, de
geração ou de conversão entre formalismos de
pouca complexidade, de grande eficiência e de
fácil implementação.
Aspectos Teóricos da Computação 4/35
5. Linguagens Regulares
Desvantagens:
● Limitações de expressividade
Vantagens
● Simplicidade
● Algoritmos desenvolvidos para essas linguagens
tem alta taxa de eficiência em tempo de
processamento.
● Consigo construir outras linguagens regulares a
partir de uma existente.
● Provar propriedades.
● Construir algoritmos.
Aspectos Teóricos da Computação 5/35
6. Linguagens Regulares
Aplicação principal em Análise Léxica.
Análise léxica é o processo de analisar a entrada de linhas
de caracteres (tal como o código-fonte de um programa de
computador) e produzir uma sequência de símbolos
chamado "símbolos léxicos" (lexical tokens), ou somente
"símbolos" (tokens), que podem ser manipulados mais
facilmente por um parser (leitor de saída).
A Análise Léxica é a forma de verificar determinado alfabeto.
Quando analisamos uma palavra, podemos definir através da
análise léxica se existe ou não algum caracter que não faz
parte do nosso alfabeto, ou um alfabeto inventado por nós. O
analisador léxico é a primeira etapa de um compilador, logo
após virá a análise sintática.
Aspectos Teóricos da Computação 6/35
7. Linguagens Regulares
Para facilitar o estudo de Linguagens Regulares vamos
introduzir 2 conceitos:
● Sistema de Estados Finitos.
● Composição de sistemas.
Aspectos Teóricos da Computação 7/35
8. Sistema de Estados Finitos
Um sistema de estados finitos é um modelo
matemático de sistema com entradas e saídas
discretas. Pode assumir um número finito e
predefinido de estados.
Cada estado resume somente as informações do
passado necessárias para determinar ações para
a próxima entrada.
Aspectos Teóricos da Computação 8/35
9. Sistema de Estados Finitos
● Você consegue pensar um sistema de estados
finitos.
● 5 minutos em grupo.
Aspectos Teóricos da Computação 9/35
10. Sistema de Estados Finitos
Exemplo: Elevador
● É um sistema que não memoriza as
requisições anteriores.
● Cada estado sumariza as informações “andar
corrente” e “direção do movimento”.
● As entradas para o sistema são requisições
pendentes.
Aspectos Teóricos da Computação 10/35
11. Sistema de Estados Finitos
Exemplo: Analisador Léxico e Processadores de
Texto
● Cada estado memoriza a estrutura do prefixo
da palavra em análise.
Aspectos Teóricos da Computação 11/35
12. Sistema de Estados Finitos
Contra-Exemplo: Cérebro Humano
● Um neurônio pode ser representado por um
número finito de bits.
● O cérebro humano é composto por 2 35 células.
● Portanto possível de representar por um
número finito de estados.
● Entretanto, o elevado número de combinações
de células determina uma abordagem pouco
eficiente em termos práticos.
● Tal fenômeno é denominado explosão de
estados.
Aspectos Teóricos da Computação 12/35
13. Composição Sequencial, Concorrente e
Não Determinista
Um sistema em geral se constrói de maneira composicional , no sentido
em que sistemas novos são construídos a partir de sistemas
conhecidos. Dessa maneira fazendo uma desconstrução de sistemas
podemos chegar até o nível mais elementar.
Três formas de composição se destacam:
(a) Sequencial. A execução da próxima componente depende da
terminação da componente anterior.
(b) Concorrente. Resulta em componentes independentes, no sentido
em que a ordem em que são executadas não é importante, e,
portanto podem ser processadas ao mesmo tempo.
(c) Não determinista. A próxima componente a ser executada é uma
escolha entre diversas componentes alternativas. O não
determinismo pode ser:
• Interno. O sistema escolhe aleatoriamente a próxima componente a ser
executada.
• Externo. A escolha da próxima componente a ser executada é externa
ao sistema. 13/35
Aspectos Teóricos da Computação
14. Composição Sequencial, Concorrente e
Não Determinista
Exemplo: Considere um universo de pessoas em um banco
● Sequencial: em uma fila, o atendimento do próximo cliente depende
do atendimento do cliente anterior, o pagamento de uma conta
depende do fornecimento do valor.
● Concorrente: os diversos caixas atendem independentemente
diversos clientes; clientes nos caixas executam ações
independentemente dos clientes que aguardam na fila.
● Não-determinista: quando dois ou mais caixas ficam disponíveis ao
mesmo tempo, o próximo cliente pode escolher em qual caixa será
atendido; o simples caminhar de um indivíduo pode aleatoriamente
iniciar com a perna esquerda ou direita.
Aspectos Teóricos da Computação 14/35
15. Composição Sequencial, Concorrente e
Não Determinista
Focaremos na nossa disciplina a composição sequencial e não determinista.
A semântica não determinística adotada na disciplina é a usual para
Linguagens Formais e pode ser resumida como segue:
● Considera o não determinismo interno;
● Objetiva determinar a capacidade de reconhecer linguagens e de
solucionar problemas.
Aspectos Teóricos da Computação 15/35
16. Autômato Finito
Autômato Finito é um sistema de estados finitos o
qual constitui um modelo computacional do tipo
sequencial muito comum em diversos estudos
teórico-formais da Computação e Informática,
com destaque para Linguagens Formais,
Compiladores, Semântica Formal e Modelos para
Concorrência.
Aspectos Teóricos da Computação 16/35
17. Autômato Finito
Um AF pode ser:
● Determinístico: dependendo do estado corrente e do
símbolo lido, o sistema pode assumir um único estado
bem determinado;
● Não determinístico: dependendo do estado corrente e do
símbolo lido, o sistema pode assumir um conjunto de
estados alternativos;
● Como movimentos vazios: dependendo do estado
corrente e sem ler qualquer símbolo, o sistema pode
assumir um conjunto de estados (portanto é não
determinístico). Movimentos vazios podem ser vistos
como transições encapsuladas nas quais, excetuando-se
por uma eventual mudança de estado, nada mais pode
ser observado, de forma análoga à noção de
encapsulação das linguagens orientadas a objetos.
Aspectos Teóricos da Computação 17/35
18. Autômato Finito
Autômato Determinístico, Não determinístico e Com
movimentos vazios são equivalentes em termos de poder
computacional.
Aspectos Teóricos da Computação 18/35
19. Autômato Finito
Composição:
a) Fita. Dispositivo de entrada que contém a informação a ser
processada;
b) Unidade de Controle. Reflete o estado corrente da máquina.
Possui uma unidade de leitura (cabeça da fita) a qual acessa
uma célula da fita de cada vez e movimenta-se exclusivamente
para a direita;
c) Programa, Função Programa ou Função de Transição. Função
que comanda as leituras e define o estado da máquina.
A fita é finita e armazena um símbolo em cada célula. Os símbolos
pertencem a um alfabeto de entrada. Não é possível gravar sobre
a fita (e não existe memória auxiliar).
O programa é uma função parcial tal que: Dependendo do estado
corrente e do símbolo lido, determina o novo estado do autômato
Aspectos Teóricos da Computação 19/35
20. Autômato Finito
a a b c c b a
Controle
Aspectos Teóricos da Computação 20/35
21. Autômato Finito: Definição Formal
Um Autômato Finito Determinístico (AFD) ou simplesmente Automato Finito M é uma 5-
upla ordenada:
M = { ∑, Q, δ, q0, F}
Na qual:
a) ∑ é um alfabeto de símbolos de entrada, ou simplesmente alfabeto de entrada;
b) Q é o conjunto de estados possíveis do autômato o qual é finito;
c) . δ é uma função programa ou simplesmente programa, ou ainda função de
transição:
δ :Q x ∑ → Q
a qual é uma função parcial. Supondo que a função programa é definida para um
estado p e um símbolo a, resultando no estado q, então:
δ : (p,a) = q
é uma transição do autômato;
d) q0 é um elemento distinguido de Q, denominado estado inicial;
e) F é um subconjunto de Q, denominado conjunto de estados finais.
Aspectos Teóricos da Computação 21/35
22. Autômato Finito
Um AFD pode ser representado na forma de um diagrama no qual:
● Estado são nodos, representados por círculos;
● Transições são arestas, ligando os nodos correspondentes.
● Estados iniciais e finais são representados de forma distinta dos demais.
● Transições paralelas (mesmo nó de origem e destino) podem alternativamente ser
representados com duas arestas apontando para o mesmo nodo ou uma aresta com
os dois símbolos.
Exemplos do livro página 47.
Aspectos Teóricos da Computação 22/35
23. Autômato Finito Determinístico
Uma forma alternativa e muito comum de
representar uma função programa ou função de
transição é como uma tabela de dupla entrada.
δ a ...
p q ...
q ... ...
A tabela acima indica a transição do tipo δ(p,a) =
q.
Aspectos Teóricos da Computação 23/35
24. Autômato Finito Determinístico
A computação de AFD para uma palavra de
entrada w, consiste na sucessiva aplicação da
função programa para cada símbolo de w (da
esquerda para a direita) até ocorrer uma condição
de parada.
Um AFD não possui memória de trabalho,
somente estados.
Aspectos Teóricos da Computação 24/35
26. Parada de um AFD
A parada do processamento de um AFD para
uma entrada w pode ser de duas maneiras:
a) Aceita a entrada w. Após processar o último
símbolo da fita, o autômato finito assume um
estado final;
b) Rejeita a entrada w. São duas possibilidades:
● Após processar o último elemento da fita, o afd
assume um estado não final.
● Em algum momento, ao longo do processamento
de w, a função programa é indefinida para o
argumento (estado corrente e símbolo lido da fita).
Aspectos Teóricos da Computação 26/35
27. Função Programa ou Função de Transição
Estendida
Seja M = (∑, Q, δ,q0, F) um AFD. A função programa
estendida ou computação de M, denotada por:
δ*:Q x ∑* → Q
É a função programa δ :Q x ∑ → Q estendida para
palavras e é indutivamente definida como segue:
δ*(q,ε )=q
δ*(q,aw) = δ *(δ(q,a),w)
Portanto a função programa estendida consiste na
sucessiva aplicação da função programa para cada
símbolo da palavra, a partir de um dado estado. Se a
entrada for vazia o AFD continua no mesmo estado.
Aspectos Teóricos da Computação 27/35
28. Função Estendida
● Exemplo 3.2 da página 50.
Aspectos Teóricos da Computação 28/35
29. Linguagem Aceita, Linguagem Rejeitada
Seja M = (∑, Q, δ,q0, F) um AFD. A Linguagem Aceita ou Linguagem
Reconhecida por M, denotada por:
ACEITA(M) ou L(M)
é o conjunto de todas as palavras pertencentes a ∑* aceitas por M, a
partir do estado inicial qo , ou seja:
L(M) = ACEITA(M) = {w | δ*(q0,w) є F}
Analogamente, a Linguagem Rejeitada por M, denotada por:
REJEITA(M)
é o conjunto de todas as palavras pertencentes a ∑* rejeitadas por M, a
partir do estado inicial q0, ou seja:
REJEITA(M) = {w | δ*(q0,w) ∉F ou δ*(q0,w) é indefinida}
Aspectos Teóricos da Computação 29/35
30. Linguagem Aceita, Linguagem Rejeitada
Supondo que ∑* é o conjunto universo, as
seguintes afirmações são verdadeiras.
ACEITA(M) ∩ REJEITA(M) = Ø
ACEITA(M) U REJEITA(M) = ∑*
~ACEITA(M) = REJEITA(M)
~REJEITA(M) = ACEITA(M)
∑*
ACEITA(M) REJEITA(M)
Aspectos Teóricos da Computação 30/35
31. Autômatos Finitos Equivalentes
Diferentes autômatos finitos podem aceitar a
mesma linguagem.
Dois autômatos finitos M1 e M2 são ditos
Autômatos Finitos Equivalentes se e somente se:
ACEITA(M1) = ACEITA(M2)
Aspectos Teóricos da Computação 31/35
32. Linguagem Regular
Uma linguagem L é dita uma Linguagem Regular
ou Linguagem Tipo 3 se existe pelos menos um
autômato finito determinístico que aceita L.
Aspectos Teóricos da Computação 32/35
33. Linguagem Regular
● Exemplo 3.3 da página 51.
● Exemplo 3.4 da página 52.
Aspectos Teóricos da Computação 33/35
34. Para a Próxima Aula
Ler as seções 3.1, 3.2 e 3.3 do livro texto.
Aspectos Teóricos da Computação 34/35
35. Exercícios
1. Dado o autômato abaixo determine M = (∑, Q, δ,q0, F)
b
q0 a q1 c qf
2. Desenvolva autômatos finitos determinísticos que reconheçam as seguintes
linguagens sobre ∑ ={a,b}:
a) {w | w possui aaa como subpalavra}
b) {w | o sufixo de w é aa}
c) {w | w possui número impar de a e número ímpar de b}
d) {w | w possui número par de a e número ímpar de b ou w possui
número par de b e ímpar de a}
e) {w | o quinto símbolo da direita para a esquerda de w é a}
3. Pense na seguinte afirmação: “Um autômato finito sempre pára.” Analise se
ela é verdadeira ou falsa. Se verdadeira justifique. Se falsa dê um contra-
exemplo.
Aspectos Teóricos da Computação 35/35