Compiladores - Aula 03
Compiladores - Aula 03
Compiladores - Aula 03
1
Analisador Léxico: ERs para Tokens
IF = if
ID = [a-z][a-z0-9]*
NUM = [0-9]+
2
Analisador Léxico: ERs para Autômatos
IF
IF = if i f
1 2 3
a a-z
ID = [a-z][a-z0-9]*
4 .. 5 6 7 8 ID
.
z 0-9
NUM = [0-9]+ 0 0
9 .. 10 11 .. 12 13 NUM
. .
9 9
3
Analisador Léxico: Autômato Combinado
IF = if
ID = [a-z][a-z0-9]*
NUM = [0-9]+
4
Simulando AFND para “in”
Início (1) -> AFND pode estar em {1,4,9}
Consome i -> AFND pode estar em {2,5,8,6}
Consome n -> AFND pode estar em {7,8,6}
5
AFND vs AFD
AFDs são facilmente simuláveis por programas de computador
Solução:
6
Conversão de AFNDs para AFDs
= {0,1}
0,1
Início q0 0 q1 1 q2
Conversão de AFNDs para AFDs
0,1 0 1
{q0} {q0,q1} {q0}
Início q0 0 q1 1 q2
{q0,q1} {q0,q1} {q0,q2}
1 0
0 1
{q0} {q0,q1} {q0}
Início q0 0 q0q1
1 q0q2
{q0,q1} {q0,q1} {q0,q2}
1
Conversão de AFNDs para AFDs
Renomeando os estados:
1 0 1 0
0 1 0 1
Início q0 q0q1 q0q2
Início A B C
0 0
1 1
Conversão de AFNDs para AFDs
= {0,1,2}
0 1 2
0,1 1,2
Início q0 q1 q2
0,1,2
Conversão de AFNDs para AFDs
0 1 2
0,1 0,2
Início q0 q1 q2
0 1 2
0 1 2 0
q0 q0q1q2
q1q2 q2 2
*{q2} {q2} 1
2
Conversão de AFNDs para AFDs
Renomeando os estados:
0 0
Início Início
0 0
q0 q0q1q2 A B
2 1 2 1
1 2 1 2
q1q2 q2 2 C D 2
1 1
2 2
Conversão de AFND- para AFD
= {a,b}
a
a b b
b
Conversão de AFND- para AFD
a
a b b
b
a b
{0,1,2,4,7} {1,2,3,4,6,7,8} {1,2,4,5,6,7}
a
a b b
b
a b
A {0,1,2,4,7} {1,2,3,4,6,7,8} B {1,2,4,5,6,7} C
a b
A {0,1,2,4,7} {1,2,3,4,6,7,8} B {1,2,4,5,6,7} C
a
Desenhando o autômato a partir da tabela de transição:
Conversão de AFND- para AFD
= {a,b}
a
a b b
b
b
b
C a
b
a
a
A B D E
a b b
a
19
Conversão de AFND- para AFD → ANTES
NUM = [0-9]+
20
Conversão de AFND- para AFD → DEPOIS
IF = if
ID = [a-z][a-z0-9]*
a-e,g-z,0-9
NUM = [0-9]+
2,5,6,8
f 3,6,7,8
a-z
i 0-9
21
Conversão de AFND- para AFD → ANTES
NUM = [0-9]+
22
Conversão de AFND- para AFD → DEPOIS
IF = if
ID = [a-z][a-z0-9]*
a-e,g-z,0-9
NUM = [0-9]+
2,5,6,8
f 3,6,7,8
a-z
i 0-9
NUM = 13
23
Conversão de AFND- para AFD → DEPOIS
IF = if
ID = [a-z][a-z0-9]*
a-e,g-z,0-9
NUM = [0-9]+
2,5,6,8
f 3,6,7,8
a-z
i 0-9
IF = if
ID = [a-z][a-z0-9]*
ID a-e,g-z,0-9
NUM = [0-9]+
2,5,6,8
f 3,6,7,8
a-z
i 0-9
ID ID
a-h 5,6,8 a-z 6,7,8
j-z 0-9 a-z
1,4,9 0-9
NUM
0-9
IF = 3 10,11,13 11,12,13 0-9
0-9
ID = 8
NUM
NUM = 13
25
Conversão de AFND- para AFD → DEPOIS
IF = if
ID = [a-z][a-z0-9]*
ID a-e,g-z,0-9
NUM = [0-9]+
2,5,6,8 IF
f 3,6,7,8
a-z
i 0-9
ID ID
a-h 5,6,8 a-z 6,7,8
j-z 0-9 a-z
1,4,9 0-9
NUM
0-9
IF = 3 10,11,13 11,12,13 0-9
0-9
ID = 8
NUM
NUM = 13
26
Lista de Exercícios
Lista 3
• Exercícios Teóricos
27