Você está na página 1de 21

Compiladores

COMPILADORES

A grande maioria dos slides a seguir estão baseados no


livro: Introdução à compiladores. Autor: RICARTE, I. Ed.
Campus, 2008.

Facilitador : Pedro Kislansky


Compiladores

Ementa – Autômatos finitos

 Autômatos finitos
 Introdução
 Grafos
 Autômatos finitos não determinísticos (AFN)
 Tabela de transição
 Construção de autômatos finitos

Facilitador : Pedro Kislansky


Compiladores

Autômatos finitos - Introdução

A teoria dos autômatos lida com as definições e propriedades


de modelos matemáticos de computação. Esses modelos
desempenham um papel em diversas áreas da ciência da
computação. Um modelo chamado autômato finito é usado
em processamento de texto, compiladores e projeto de
hardware. Outro modelo, denominado gramática livre de
contexto, é utilizado em linguagens de programação e
inteligência artificial.

Facilitador : Pedro Kislansky


Compiladores

Autômatos finitos - Grafos

Um grafo não direcionado, ou simplesmente grafo, é um


conjunto de pontos interligados. Os pontos são conhecidos
como nós ou vértices e as linhas como arestas.

2
1 2
1 3

4 3
5 4

Facilitador : Pedro Kislansky


Compiladores

Autômatos finitos - Grafos

1 2
O número de arestas em um nó específico é
o seu grau. Assim no grafo ao lado o nó 2
possui grau 3 e o nó 1 possui grau 2.
4 3

Em um grafo é possível representá-lo através da expressão:


G = ( V , E ), sendo V os nós pertencentes ao grafo e E o
conjunto de arestas determinado pelo par de nós i e j.
G = {{1,2,3,4} , {(1,2),(1,4),(2,3),(2,4),(3,4)}}

Facilitador : Pedro Kislansky


Compiladores

Autômatos finitos - Grafos

2 2 2
1 3 1 3 1 3

5 4 5 4 5 4
Subgrafo Caminho simples Ciclo

1
2 3

6 4 5 Árvore
Facilitador : Pedro Kislansky
Compiladores

Autômatos finitos - Grafos

1 2 Se o grafo possui setas em vez de linhas, o


grafo é chamado de grafo direcionado. O
número de setas apontando a partir de um
4 3 nó é seu grau de saída, e o número de
setas apontando para um nó é o seu grau de
entrada.

G = { {1,2,3,4} , {(1,2) , (2,3), (3,4) , (1,4) , (4,1) , (2,4)} }

Facilitador : Pedro Kislansky


Compiladores

Autômatos finitos

Um autômato finito é uma máquina de estados finitos que


permite reconhecer, por meio de um conjunto de estados e
transições dirigidas pela ocorrência de símbolos de um
alfabeto, se uma determinada string pertence ou não a uma
linguagem regular.

Formalmente, um autômato finito é descrito por cinco


características, sendo portanto representável por uma
quíntupla M = { K , ∑ , δ , s , F }

Facilitador : Pedro Kislansky


Compiladores

Autômatos finitos M={K,∑,δ,s,F}


K – Conjunto finito de estados
∑ - Alfabeto de entrada finito
δ – Conjunto de transições
s – Estado inicial
F – Conjunto de estados finais

a
S1 S2

M = { {S1,S2} , {a} , { (S1,{a},S2) , S1 , {S2} }


Facilitador : Pedro Kislansky
Compiladores

Autômatos finitos - Exemplo


0 1 0
1
q1 q2 q3
0,1
A figura acima é denominada diagrama de estados. O
autômato tem 3 estados: q1,q2 e q3. quando esse autômato
recebe uma cadeia de entrada, ex: 1101, ele processa essa
cadeia e produz uma saída. A saída será aceita ou rejeita.
O estado inicial é o q1, ele é indicado pela seta apontando
para ele.
Facilitador : Pedro Kislansky
Compiladores

Autômatos finitos – outra forma de representação


0 1 0
1
q1 q2 q3
0,1

0 1
q1 {q1} {q2}
q2 {q3} {q2}
q3 {q2} {q2}
Facilitador : Pedro Kislansky
Compiladores

Autômatos finitos – Exercícios

Faça um autômato finito baseado nas seguintes expressões


regulares:
((1|0)(00))1*
0*101*0
1*0*1101*
(10)*110*
((10) | (00))1*

Facilitador : Pedro Kislansky


Compiladores

Autômatos finitos não determinísticos (AFN)

Um AFN pode ter transições na forma (Si, ɛ , Sf), ou seja,


pode passar de um estado para outro sem a ocorrência de
nenhum símbolo na entrada – uma passagem pela string
vazia. Outra característica é a possibilidade de, a partir de um
mesmo estado, ter mais de um destino possível para um
mesmo símbolo de entrada. Se α C ∑, então pode ser que um
conjunto de transições δ tenha entre seus elementos
(Si, α , Sf) e (Si, α , Sg), com Si ≠ Sg.

Facilitador : Pedro Kislansky


Compiladores

Autômatos finitos não determinísticos (AFN) - exemplo

0 1
ɛ
1
q1 q2 q3
0,1
1
ɛ
0
q1 q1

Facilitador : Pedro Kislansky


Compiladores

Construção de autômatos finitos

A construção sistemática de um autômato finito para


reconhecer strings de uma linguagem regular é realizada
em três etapas:
1. Construção de autômato finito que represente diretamente
os elementos de uma expressão regular. Esse primeiro
autômato é não determinístico.
2. A segunda etapa é a conversão do anterior para um
autômato finito determinístico.
3. Reduzir, ao máximo, o número de estados do autômato.

Facilitador : Pedro Kislansky


Compiladores

1ª Etapa - Algoritmo de Thompson

O Algoritmo de Thompson define uma seqüência de


passos para, a partir de expressão regular, obter um autômato
finito não determinístico.

O primeiro passo do procedimento é decompor a


expressão regular que define as sentenças que deverão ser
reconhecidas em termos de suas relações elementares:
 Concatenação RS
 Alternativa R|S
 Repetição R*

Facilitador : Pedro Kislansky


Compiladores

1ª Etapa - Algoritmo de Thompson – Concatenação - exemplo

Expressão regular: 01

0
0 q1 q2

1
1 q3 q4

01
0
q2
ɛ 1
q4
q1 q3

Facilitador : Pedro Kislansky


Compiladores

1ª Etapa - Algoritmo de Thompson – Alternativa- exemplo

Expressão regular: 0|1

1
q1 q2

0
q3 q4
1 ɛ
ɛ q1 q2

q0 q5
0
ɛ q3 q4 ɛ
Facilitador : Pedro Kislansky
Compiladores

1ª Etapa - Algoritmo de Thompson – Repetição- exemplo

Expressão regular: (1|0)*

1|0 1 ɛ
ɛ q1 q2

q0 q5
0
ɛ q3 q4 ɛ

Facilitador : Pedro Kislansky


Compiladores

1ª Etapa - Algoritmo de Thompson – Repetição- exemplo

Expressão regular: (1|0)*

ɛ
(1|0)* 1
ɛ q2 q3 ɛ
q0
ɛ q1 q6
ɛ q7
0
ɛ q4 q5 ɛ

Facilitador : Pedro Kislansky


Compiladores

Algoritmo de Thompson – Exercícios

Construa um autômato, utilizando o algoritmo de Thompson,


para cada uma das seguintes expressões regulares:
 (a|b)(bb)*
 aba(ab)*a
 0|1(00)*1*
 00(1)*01
 bba(b|a)*
 0(0|1)*101*

Facilitador : Pedro Kislansky

Você também pode gostar