6
1 Teoria da Computação e Compilação Prof. Cícero C. Quarto [email protected] http://www.engcomp.uema.br Engenharia de Computação Os conceitos centrais da teoria de autômatos Nessa seção, introduziremos as definições mais importantes dos termos que permeiam a teoria de autômatos. Esses conceitos incluem o “alfabeto” (um conjunto de símbolos), “strings” (uma lista de símbolos de um alfabeto) e “linguagem” (um conjunto de strings de um mesmo alfabeto). Alfabetos Um alfabeto é um conjunto de símbolos finito e não-vazio. Convencionalmente, usamos o símbolo Ʃ para um alfabeto. Os alfabetos comuns incluem: 1. Ʃ = {0,1}, o alfabeto binário. 2. Ʃ = {a, b, ..., z}, o conjunto de todas as letras minúsculas. 3. O conjunto de todos os caracteres ASCII, ou o conjunto de todos os caracteres ASCII imprimíveis.

Conceitos de autômatos

Embed Size (px)

DESCRIPTION

abordagem dos conceitos centrais da teoria de autômatos

Citation preview

Page 1: Conceitos de autômatos

1

Teoria da Computação e Compilação

Prof. Cícero C. [email protected]://www.engcomp.uema.br

Engenharia de Computação

Os conceitos centrais da teoria de autômatos

Nessa seção, introduziremos as definições mais importantes dos termos que permeiam a teoria de autômatos.

• Esses conceitos incluem o “alfabeto” (um conjunto de símbolos), “strings” (uma lista de símbolos de um alfabeto) e “linguagem” (um conjunto de strings de um mesmo alfabeto).

Alfabetos

Um alfabeto é um conjunto de símbolos finito e não-vazio. Convencionalmente, usamos o símbolo Ʃ para um alfabeto. Os alfabetos comuns incluem:

1. Ʃ = {0,1}, o alfabeto binário.2. Ʃ = {a, b, ..., z}, o conjunto de

todas as letras minúsculas.3. O conjunto de todos os caracteres

ASCII, ou o conjunto de todos os caracteres ASCII imprimíveis.

Page 2: Conceitos de autômatos

2

Strings

Um string (ou às vezes palavra ou também cadeia) é uma sequência finita de símbolos escolhidos de algum alfabeto.

Exemplo: 01101 é um string do alfabeto binárioƩ = {0,1}. O string 111 é outro string escolhido nesse alfabeto.

O string vazioO string vazio é o string com zero

ocorrências de símbolos. Esse string, denotado por Ɛ, é um string que pode ser escolhido de qualquer alfabeto.

Comprimento de um stringCom frequência, é útil para classificar strings por

seu comprimento, isto é, o número de posições para símbolos no string.

Exemplo: 01101 tem comprimento 5Observação

É comum dizer que o comprimento de um string é o “número de símbolos” no string; essa afirmação é coloquialmente aceita, mas não é estritamente correta. Desta forma, existem só dois símbolos, 0 e 1, no string 01101, mas existem cinco posições para símbolos, e seu comprimento é 5.

Em geral, devemos esperar que o “número de símbolos” possa ser usado quando o significado for “número de posições”.

A notação padrão para o comprimento de um string w é |w|.

Exemplo: |011| = 3 e |Ɛ| = 0

Potências de um alfabetoSe Ʃ é um alfabeto, podemos expressar o conjunto

de todos os strings de um certo comprimento a parte desse alfabeto, usando uma notação exponencial.

Definimos Ʃk como o conjunto de strings de comprimento k, e o símbolo de cada um deles está em Ʃ.

Exemplo: Observe que Ʃ0 = {Ɛ}, independente de qual alfabeto seja Ʃ. Isto é, Ɛ é o único string cujo comprimento é 0.

Se Ʃ = {0, 1}, então Ʃ1 = {0, 1}, Ʃ2 = {00, 01, 10, 11},

Ʃ3 = {000, 001, 010, 011, 100, 101, 110, 111}e assim por diante.

Page 3: Conceitos de autômatos

3

Observe que existe uma ligeira confusão entre Ʃ e Ʃ1. O primeiro é um alfabeto; seus elementos 0 e 1 são símbolos. O outro é um conjunto de strings; seus elementos são os strings 0 e 1, cada um dos quais tem comprimento 1.

O conjunto de todos os strings sobre um alfabeto Ʃ é denotado convencionalmente por Ʃ*

Exemplo: {0,1}* = {Ɛ, 0, 1, 00, 01, 10, 11, 000, ...}. Em outros termos,

Ʃ* = Ʃ0⋃Ʃ1⋃Ʃ2⋃...

Às vezes, desejamos excluir o string vazio do conjunto de strings. O conjunto de strings não vazios do alfabeto Ʃ é denotado por Ʃ*. Desse modo, duas equivalências apropriadas são:

• Ʃ+ = Ʃ1⋃Ʃ2⋃...• Ʃ* = Ʃ+⋃{Ɛ}

Concatenação de stringsSejam os strings x e y. Então, xy denota a

concatenação de x e y, isto é, o string formado tomando-se uma cópia de x e acrescentando-se a ela uma cópia de y.

Mais precisamente, se x é o string composto de i símbolos x = a1a2 ... ai e y é o string composto de j símbolos y = b1b2 ... bj, então xy é o string de comprimento i + j: xy = a1a2 ... aib1b2 ... bj

Exemplo: Sejam x = 01101 e y = 110. Então xy = 01101110 e yx = 11001101.

Para qualquer string w, as equações Ɛw = wƐ = w são válidas. Isto é, Ɛ é a identidade para a concatenação, pois, quando é concatenado com qualquer string, ele produz o mesmo string como resultado (de forma análoga ao modo como 0, a identidade para a adição, pode ser somado a qualquer para número x e produz x como resultado).

Page 4: Conceitos de autômatos

4

Linguagens

Um conjunto de strings, todos escolhidos a partir de algum Ʃ*, onde Ʃ é um alfabeto específico, é chamado linguagem.

Se Ʃ é um alfabeto, e L � Ʃ*, então L é uma linguagem sobre Ʃ.

Linguagens comuns – conjunto de stringsExemplo: Português, no qual uma coleção de palavras válidas

é um conjunto de strings sobre o alfabeto que consite em todas as letras.

Exemplo: C, ou qualquer outra linguagem de programação, na qual os programas válidos são um subconjunto dos strings possíveis que podem ser formados a partir do alfabeto da linguagem.

Alfabeto: letras maiúsculas e minúsculas, dígitos, pontuação e símbolos matemáticos

Outros exemplos de linguagens:

1. A linguagem de todos os strings que consistem em n 0´s seguidos por n valores 1, para algum n ≥ 0: {�, 01, 0011, 000111, …}

2. O conjunto de strings de 0´s e 1´s com número igual de cadaum deles:

{�, 01, 10, 0011, 0101, 1001, …}3. O conjunto de números binários cujo valor é um número primo:

{10, 11, 101, 111, 1011, …}4. Ʃ* é uma linguagem para qualquer alfabeto Ʃ.5. φ, a linguagem vazia, é uma linguagem sobre qualquer alfabeto.6. {ε}, a linguagem que consiste apenas no string vazio, também é

uma linguagem sobre qualquer alfabeto. Note que � ≠ {�}: o primeiro não tem nenhum string, enquanto o outro tem um únicostring.

Problemas

Na teoria de autômatos, um problema é a questão de decidir se um dado string é elemento de alguma linguagem específica. Mais precisamente, se Ʃ é um alfabeto e L é uma linguagem sobre Ʃ, entãoo problema L é:

Dado um string w em Ʃ*, definir se w está ou não em L.

Exemplo: O problema de testar o caráter primo pode ser expressopela linguagem Lp que consiste em todos os strings binários cujovalor como um número binário é primo. Ou seja, dado um string de 0´s e 1´s, diremos “sim” se o string for a representação binária de um primo e diremos “não” se não for.

Por exemplo, 0011101 pode ser a representação de um primo, pela simples razãode que todo inteiro, exceto 0, tem uma representação binária que começa com 1. Entretanto, é menos óbvio se o string 11101 pertence a Lp, e assim qualquer solução paraesse problema terá de usar recursos computacionais significativos de algum tipo: tempo e/ou espaço, por exemplo.

Page 5: Conceitos de autômatos

5

Formadores de conjuntos como

um modelo de definir linguagens

É comum descrever uma linguagem usando um “formador de conjuntos”:

{w |algo sobre w}

Essa expressão é lida como “o conjunto de palavras w tais que (sejao que for dito sobre w à direita da barra vertical)”.

Exemplos:

1. {w | w consiste em um número igual de 0´s e 1´s}2. {w | w é um número inteiro binário primo}3. {w | w é um programa em C sintaticamente correto}

Também é comum substituir w por alguma expressão com parãmetros e descrever os strings na linguagem declarando condições sobre os parâmetros. Aqui estão alguns exemplos; o primeiro com o parâmetro n, o segundo com os parâmetros i e j:

Exemplos:

1. {0n1n | n≥1}. Lê-se “o conjunto de 0 elevado a n 1 elevado a n talque n é maior que ou igual a 1”, essa linguagem consiste nosstrings {01, 0011, 000111, …}

2. {0i1j | 0≤i≤j}. Essa linguagem consiste em strings com alguns0´s(possivelmente nenhum) seguidos por um número igual ousuperior de 1´s. Essa linguagem consiste nos strings {ε, 01, 0101, 010101, …}

Resumo do capítulo 1

� Autômatos finitos: Os autômatos finitos envolvem estados e

transições entre estados em resposta a entradas. Eles são úteis na

elaboração de vários tipos diferentes de software, inclusive o

componente de análise léxica de um compilador e sistemas para

verificar a correção de circuitos ou protocolos

� Expressões regulares: Essas expressões formam uma notação

estrutural para descrever os mesmos padrões que podem ser

representados por autômatos finitos. Elas são usadas em muitos tipos

comuns de software que incluem, por exemplo, ferramentas para

pesquisa de padrões em textos ou em nomes de arquivos

Page 6: Conceitos de autômatos

6

Resumo do capítulo 1 – cont...

� Gramáticas livres de contexto: Essas gramáticas constituem uma

notação importante para descrever a estrutura de linguagens de

programação e conjuntos de strings inter-relacionados; elas são

usadas para elaborar o componente analisador sintático de um

compilador

� Máquinas de Turing: Essas máquinas são autômatos que modelam

o poder dos computadores reais. Elas nos permitem estudar a

decidibilidade, a questão do que pode ou não ser feito por um

computador. Elas também tornam possível distinguir problemas

tratáveis – aqueles que podem ser resolvidos em tempo polinomial –

dos problemas intratáveis – aqueles que não o podem

Resumo do capítulo 1 – cont...

� Alfabetos: Um alfabeto é qualquer conjunto finito não-vazio de símbolos

� Strings: Um string é uma seqüência de comprimento finito de símbolos

� Linguagens e problemas: Uma linguagem é um (possivelmente infinito)

conjunto de strings, os quais escolhem seus símbolos a partir de algum

alfabeto único. Quando os strings de uma linguagem têm de ser

interpretados de algum modo, a questão de saber se um string pertence à

linguagem às vezes se denomina um problema