Você está na página 1de 18

Linguagens formais e

autômatos
Fundamentos

Prof. Isaias Soares


Introdução

As linguagens podem ser classificadas em dois
grandes grupos: as linguagens formais e as linguagens
não formais.

As linguagens não formais são aquelas que são
utilizadas naturalmente na comunicação entre seres
humanos, como o português, o inglês, o espanhol,
entre outras. Essas linguagens são caracterizadas por
uma grande flexibilidade gramatical, uso de
ambiguidades, variações regionais e sociais, e não
possuem uma definição formal precisa. Por exemplo,
uma mesma palavra pode ter diferentes significados em
contextos diferentes.
Introdução

Já as linguagens formais são aquelas que são
utilizadas para expressar conceitos precisos e bem
definidos, principalmente na área da computação.

Elas são caracterizadas por uma gramática formal
precisa, que especifica exatamente quais são as
regras para construir as sentenças válidas da
linguagem. Essas linguagens são utilizadas em
diversas áreas da computação, como a
programação, a análise de algoritmos, a verificação
de software, entre outras.
Introdução

As linguagens formais podem ser categorizadas em
diferentes classes, dependendo da sua
complexidade e do tipo de gramática que as define.
As classes mais comuns de linguagens formais
são:
– Linguagens regulares: são aquelas que podem
ser reconhecidas por autômatos finitos
determinísticos ou não determinísticos. Elas são
definidas por meio de gramáticas regulares, que
possuem um conjunto limitado de regras de
produção e símbolos terminais.
Introdução
– Linguagens livres de contexto: são aquelas que
podem ser reconhecidas por autômatos finitos não
determinísticos com pilha, ou por meio do algoritmo
CYK. Elas são definidas por meio de gramáticas livres
de contexto, que possuem regras de produção com
um único símbolo não-terminal do lado esquerdo.
– Linguagens sensíveis ao contexto: são aquelas
que podem ser reconhecidas por autômatos lineares
limitados ou por meio do algoritmo de Earley. Elas são
definidas por meio de gramáticas sensíveis ao
contexto, que possuem regras de produção com uma
cadeia de símbolos do lado esquerdo.
Introdução
– Linguagens recursivamente enumeráveis: são
aquelas que podem ser reconhecidas por
autômatos de Turing. Elas são definidas por meio
de gramáticas recursivas, que podem ter regras
de produção arbitrárias e podem gerar infinitas
sentenças.

Essas classes de linguagens formais possuem


diferentes graus de complexidade e poder expressivo,
e são utilizadas em diferentes contextos da
computação e da teoria da computação.
Introdução

O algoritmo CYK (Cocke-Younger-Kasami) é um
algoritmo que verifica se uma dada sentença pode
ser gerada por uma gramática livre de contexto. Ele
é baseado em uma tabela triangular que armazena
todas as possíveis combinações de regras de
produção que geram cada subcadeia da sentença.
Esse algoritmo possui uma complexidade O(n^3)
em tempo, onde n é o tamanho da sentença.
Introdução

O algoritmo de Earley é outro algoritmo utilizado
para reconhecer linguagens livres de contexto. Ele
é baseado em uma técnica de parsing preditivo não
recursivo, que utiliza um conjunto de itens para
representar possíveis pontos de derivação em uma
sentença. Esse algoritmo é capaz de reconhecer
qualquer gramática livre de contexto, e possui uma
complexidade O(n^3) em tempo.
Introdução

Teoria dos autômatos é o estudo das máquinas abstratas ou
autômatos, bem como problemas computacionais que podem
ser resolvidos usando esses objetos. É objeto de estudo tanto
da Ciência da Computação Teórica como da Matemática
Discreta. A palavra autômato vem da palavra grega αὐτόματα
que significa “autuação” (em tradução livre), isto é, sem
influência externa.
Introdução

Os autômatos finitos determinísticos (AFD) e não
determinísticos (AFN) são modelos abstratos de
máquinas que são capazes de reconhecer linguagens
regulares. O AFD é um autômato que possui um conjunto
de estados finitos, uma entrada de símbolos finitos, uma
função de transição e um estado inicial e final. O AFN é
um autômato que possui um conjunto de estados finitos,
uma entrada de símbolos finitos, uma função de transição
e um conjunto de estados iniciais e finais. A principal
diferença entre eles é que o AFN permite múltiplos
caminhos para o mesmo símbolo de entrada, enquanto o
AFD possui apenas um caminho determinístico.
Introdução

Os autômatos de pilha e os autômatos lineares limitados
são modelos abstratos de máquinas que são capazes de
reconhecer linguagens livres de contexto. O autômato de
pilha é uma extensão do autômato finito não
determinístico que utiliza uma pilha para armazenar
informações adicionais sobre a entrada. O autômato
linear limitado é um autômato que possui uma fita de
entrada e uma fita de trabalho de tamanho limitado que
é utilizada para armazenar informações adicionais sobre
a entrada. Ambos os modelos de autômatos possuem
uma pilha ou fita que é utilizada para guardar
informações sobre a derivação da sentença.
Introdução

Os autômatos de Turing são modelos abstratos de
máquinas que são capazes de reconhecer todas as
linguagens recursivamente enumeráveis. Eles são
considerados a máquina universal de computação,
pois são capazes de simular qualquer algoritmo
computável. O autômato de Turing possui uma fita de
entrada, uma fita de trabalho ilimitada e uma cabeça
de leitura/escrita que é utilizada para manipular os
símbolos nas fitas. Esse modelo de autômato é
utilizado em estudos avançados de teoria da
computação e em áreas como a verificação formal
de software.
Introdução

Um exemplo de autômato finito determinístico que
aceita apenas números binários múltiplos de 3. O
estado S0 é tanto o estado de início quanto um
estado de aceitação.
Introdução

Nesse autômato há três estados: S0, S1 e S2 (representados graficamente
por círculos). A entrada é uma sequência finita de caracteres 1s e 0s. Para
cada estado da máquina, existe um arco de transição levando a um outro
estado para ambos caracteres 0 e 1. Após a leitura de cada símbolo a
máquina determinística transita para um único estado referente à aresta
associada ao símbolo.

Por exemplo, esteja o autômato atualmente no estado S0 e o símbolo de
entrada para aquela instância um '1', então ele salta deterministicamente
para o estado S1. Todo AFD possui um estado inicial (denotado
graficamente por uma seta de origem anônima) onde a sua computação
começa e um conjunto de estados de aceitação (denotados graficamente
por um círculo de borda dupla) o qual indica a aceitação da cadeia de
entrada.
Introdução

A teoria dos conjuntos é um dos fundamentos da
matemática e uma ferramenta essencial em
diversas áreas, incluindo a ciência da computação.
Ela lida com a análise e manipulação de conjuntos,
que são coleções de objetos que compartilham
alguma característica em comum.

Para representar um conjunto em notação
matemática, utilizamos chaves {}. Por exemplo, o
conjunto dos números pares pode ser representado
como: A = {2, 4, 6, 8, ...}
Introdução

As operações fundamentais entre conjuntos são: união,
intersecção e diferença.

Um mesmo elemento só pode aparecer uma única vez em
um conjunto.

Um conjunto pode conter outro, ou estar contido em outro.

Um elemento pode pertencer ou não a um conjunto.

Dois conjuntos são iguais, se todos os seus elementos são
iguais.

O complemento de um conjunto é o conjunto de elementos
que tornariam um conjunto igual a outro maior, chamado
de ‘conjunto universo’.
Dúvidas?

?
Bibliografia


Implementação de linguagens de programação: Compiladores.
Ana Maria de A. Price, Simão Sirineo Toscani. 3ª Ed. Série
Livros Didáticos. Bookman. 2008.

Sistemas Operacionais Modernos. 2ª Ed. Andrew S.
Tanenbaum. Pearson/Pretice Hall. 2008.

Você também pode gostar