Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. Introdução
4. Autômato Finito
Exercícios
5. Bibliografia
Introdução
Introdução 1/29
Introdução
O estudo das linguagens regulares ou po 3, é abordado usando
os seguintes formalismos:
Autômato finito. Trata-se de um formalismo operacional ou
reconhecedor, sendo, basicamente, um sistema de
estados finitos;
Expressão regular. Trata-se de um formalismo denotacional,
também considerado gerador (pois pode-se inferir
como construir todas as palavras da
correspondente linguagem), o qual é definido a
par r de conjuntos (linguagens) básicos e das
operações de concatenação e de união;
Gramá ca regular. Trata-se de um formalismo axiomá co ou
gerador o qual, como o nome indica, é uma
gramá ca, mas com restrições da forma das regras
de produção.
Introdução 2/29
Introdução
O estudo das linguagens regulares ou po 3, é abordado usando
os seguintes formalismos:
Autômato finito. Trata-se de um formalismo operacional ou
reconhecedor, sendo, basicamente, um sistema de
estados finitos;
Expressão regular. Trata-se de um formalismo denotacional,
também considerado gerador (pois pode-se inferir
como construir todas as palavras da
correspondente linguagem), o qual é definido a
par r de conjuntos (linguagens) básicos e das
operações de concatenação e de união;
Gramá ca regular. Trata-se de um formalismo axiomá co ou
gerador o qual, como o nome indica, é uma
gramá ca, mas com restrições da forma das regras
de produção.
Introdução 2/29
Introdução
O estudo das linguagens regulares ou po 3, é abordado usando
os seguintes formalismos:
Autômato finito. Trata-se de um formalismo operacional ou
reconhecedor, sendo, basicamente, um sistema de
estados finitos;
Expressão regular. Trata-se de um formalismo denotacional,
também considerado gerador (pois pode-se inferir
como construir todas as palavras da
correspondente linguagem), o qual é definido a
par r de conjuntos (linguagens) básicos e das
operações de concatenação e de união;
Gramá ca regular. Trata-se de um formalismo axiomá co ou
gerador o qual, como o nome indica, é uma
gramá ca, mas com restrições da forma das regras
de produção.
Introdução 2/29
De acordo com a hierarquia de Chomsky, as linguagens
regulares cons tuem a classe de linguagens 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;
Entretanto, as linguagens regulares possuem fortes
limitações de expressividade.
Uma linguagem que possua duplo balanceamento não é
uma linguagem regular;
Exemplo: texto com parênteses balanceados, ou seja,
parênteses em um número qualquer em um texto,
eventualmente encadeados, de tal forma a garan r que, para
cada parêntese aberto, existe um correspondente parêntese
fechado;
Tratamento de expressões aritmé cas comuns não pode ser
realizado usando um formalismo regular
A maioria das linguagens de programação de propósitos
gerais como Pascal, C/C++, Java etc., são não-regulares.
Introdução 3/29
De acordo com a hierarquia de Chomsky, as linguagens
regulares cons tuem a classe de linguagens 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;
Entretanto, as linguagens regulares possuem fortes
limitações de expressividade.
Uma linguagem que possua duplo balanceamento não é
uma linguagem regular;
Exemplo: texto com parênteses balanceados, ou seja,
parênteses em um número qualquer em um texto,
eventualmente encadeados, de tal forma a garan r que, para
cada parêntese aberto, existe um correspondente parêntese
fechado;
Tratamento de expressões aritmé cas comuns não pode ser
realizado usando um formalismo regular
A maioria das linguagens de programação de propósitos
gerais como Pascal, C/C++, Java etc., são não-regulares.
Introdução 3/29
De acordo com a hierarquia de Chomsky, as linguagens
regulares cons tuem a classe de linguagens 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;
Entretanto, as linguagens regulares possuem fortes
limitações de expressividade.
Uma linguagem que possua duplo balanceamento não é
uma linguagem regular;
Exemplo: texto com parênteses balanceados, ou seja,
parênteses em um número qualquer em um texto,
eventualmente encadeados, de tal forma a garan r que, para
cada parêntese aberto, existe um correspondente parêntese
fechado;
Tratamento de expressões aritmé cas comuns não pode ser
realizado usando um formalismo regular
A maioria das linguagens de programação de propósitos
gerais como Pascal, C/C++, Java etc., são não-regulares.
Introdução 3/29
De acordo com a hierarquia de Chomsky, as linguagens
regulares cons tuem a classe de linguagens 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;
Entretanto, as linguagens regulares possuem fortes
limitações de expressividade.
Uma linguagem que possua duplo balanceamento não é
uma linguagem regular;
Exemplo: texto com parênteses balanceados, ou seja,
parênteses em um número qualquer em um texto,
eventualmente encadeados, de tal forma a garan r que, para
cada parêntese aberto, existe um correspondente parêntese
fechado;
Tratamento de expressões aritmé cas comuns não pode ser
realizado usando um formalismo regular
A maioria das linguagens de programação de propósitos
gerais como Pascal, C/C++, Java etc., são não-regulares.
Introdução 3/29
De acordo com a hierarquia de Chomsky, as linguagens
regulares cons tuem a classe de linguagens 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;
Entretanto, as linguagens regulares possuem fortes
limitações de expressividade.
Uma linguagem que possua duplo balanceamento não é
uma linguagem regular;
Exemplo: texto com parênteses balanceados, ou seja,
parênteses em um número qualquer em um texto,
eventualmente encadeados, de tal forma a garan r que, para
cada parêntese aberto, existe um correspondente parêntese
fechado;
Tratamento de expressões aritmé cas comuns não pode ser
realizado usando um formalismo regular
A maioria das linguagens de programação de propósitos
gerais como Pascal, C/C++, Java etc., são não-regulares.
Introdução 3/29
De acordo com a hierarquia de Chomsky, as linguagens
regulares cons tuem a classe de linguagens 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;
Entretanto, as linguagens regulares possuem fortes
limitações de expressividade.
Uma linguagem que possua duplo balanceamento não é
uma linguagem regular;
Exemplo: texto com parênteses balanceados, ou seja,
parênteses em um número qualquer em um texto,
eventualmente encadeados, de tal forma a garan r que, para
cada parêntese aberto, existe um correspondente parêntese
fechado;
Tratamento de expressões aritmé cas comuns não pode ser
realizado usando um formalismo regular
A maioria das linguagens de programação de propósitos
gerais como Pascal, C/C++, Java etc., são não-regulares.
Introdução 3/29
Por outro lado, referente à complexidade de algoritmos,
autômatos finitos pertencem à classe de algoritmos mais
eficientes em termos de tempo de processamento (mais
detalhada adiante);
Qualquer autômato finito que solucione um problema é
igualmente eficiente, ou seja, qualquer solução é ó ma, a
menos de eventual redundância de estados
Redundância pode ser facilmente eliminada,
determinando-se um autômato finito mínimo.
Por causa da simplicidade e eficiência dos algoritmos, se um
problema ver uma solução regular, esta deve ser
considerada preferencialmente a qualquer outra solução
não regular;
Um exemplo pico e simples de aplicação das linguagens
regulares é a análise léxica.
Introdução 4/29
Por outro lado, referente à complexidade de algoritmos,
autômatos finitos pertencem à classe de algoritmos mais
eficientes em termos de tempo de processamento (mais
detalhada adiante);
Qualquer autômato finito que solucione um problema é
igualmente eficiente, ou seja, qualquer solução é ó ma, a
menos de eventual redundância de estados
Redundância pode ser facilmente eliminada,
determinando-se um autômato finito mínimo.
Por causa da simplicidade e eficiência dos algoritmos, se um
problema ver uma solução regular, esta deve ser
considerada preferencialmente a qualquer outra solução
não regular;
Um exemplo pico e simples de aplicação das linguagens
regulares é a análise léxica.
Introdução 4/29
Por outro lado, referente à complexidade de algoritmos,
autômatos finitos pertencem à classe de algoritmos mais
eficientes em termos de tempo de processamento (mais
detalhada adiante);
Qualquer autômato finito que solucione um problema é
igualmente eficiente, ou seja, qualquer solução é ó ma, a
menos de eventual redundância de estados
Redundância pode ser facilmente eliminada,
determinando-se um autômato finito mínimo.
Por causa da simplicidade e eficiência dos algoritmos, se um
problema ver uma solução regular, esta deve ser
considerada preferencialmente a qualquer outra solução
não regular;
Um exemplo pico e simples de aplicação das linguagens
regulares é a análise léxica.
Introdução 4/29
Por outro lado, referente à complexidade de algoritmos,
autômatos finitos pertencem à classe de algoritmos mais
eficientes em termos de tempo de processamento (mais
detalhada adiante);
Qualquer autômato finito que solucione um problema é
igualmente eficiente, ou seja, qualquer solução é ó ma, a
menos de eventual redundância de estados
Redundância pode ser facilmente eliminada,
determinando-se um autômato finito mínimo.
Por causa da simplicidade e eficiência dos algoritmos, se um
problema ver uma solução regular, esta deve ser
considerada preferencialmente a qualquer outra solução
não regular;
Um exemplo pico e simples de aplicação das linguagens
regulares é a análise léxica.
Introdução 4/29
Sistema de Estados Finitos
Um contraexemplo é o computador:
Os estados determinados pelos processadores e memórias
podem ser representados como um sistema de estados
finitos;
Entretanto, em um computador, podem ser agregadas
memórias adicionais durante o processamento (discos,
memórias auxiliares etc.);
Assim, o número de estados não necessariamente é
predefinido antes de se iniciar uma computação, quebrando
um dos princípios dos autômatos finitos.
M = (Σ, Q, δ, q0 , F)
onde:
Σ é um alfabeto de símbolos de entrada, ou
simplesmente alfabeto de entrada;
Q é um conjunto de estados (finito) possíveis do
autômato;
M = (Σ, Q, δ, q0 , F)
onde:
δ é uma função programa ou simplesmente programa,
ou ainda função de transição:
δ :Q×Σ→Q
Suponha que a função programa seja 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;
M = (Σ, Q, δ, q0 , F)
onde:
q0 é um elemento dis nguido de Q, denominado
estado inicial;
F é um subconjunto de Q, denominado conjunto de
estados finais.
δ a ...
p q ...
q ... ...
Função programa (AFD) na forma de tabela.
O autômato finito:
reconhece a linguagem L1 .
ACEITA(M) ou L(M)
REJEITA(M)
ACEITA(M1 ) = ACEITA(M2 )
L2 = ∅ e L3 = Σ∗
Os autômatos finitos:
δ2 a b δ3 a b
q0 q0 q0 q0 q0 q0
Responda:
1. Faça os diagramas referentes aos autômatos M2 e M3 .
2. Existe alguma diferença entre as funções δ2 e δ3 ?
3. O que, exatamente, diferencia M2 e M3 ?
Autômato Finito 26/29
Exercício 2. Autômato finito: número par de cada símbolo
Considere a seguinte linguagem sobre o alfabeto {a, b}:
O autômato finito:
Bibliografia 28/29
Bons Estudos!
Contato: mayk[at].unisalesiano[dot]com[dot]br
Conclusão 29/29