1 compiladores. 2 compilador programa v = 5; if (v>5) x = 12 + v; while (x !=3) { x = x - 3; v =...
TRANSCRIPT
1
Compiladores
2
Compilador
Programa
v = 5;if (v>5) x = 12 + v;while (x !=3) { x = x - 3; v = 10;}......
Add v,v,0cmp v,5jmplt ELSETHEN: add x, 12,vELSE:WHILE:cmp x,3...
Código de Máquina
3
analisadorléxico parser
Compilador
programa código demáquina
entrada saída
4
Um parser conhece a gramáticada linguagem de programação
5
ParserPROGRAM STMT_LISTSTMT_LIST STMT; STMT_LIST | STMT;STMT EXPR | IF_STMT | WHILE_STMT | { STMT_LIST }
EXPR EXPR + EXPR | EXPR - EXPR | IDIF_STMT if (EXPR) then STMT | if (EXPR) then STMT else STMTWHILE_STMT while (EXPR) do STMT
6
O parser encontra a derivação para uma entrada particular
10 + 2 * 5
Parser
E -> E + E | E * E | INT
E => E + E => E + E * E => 10 + E*E => 10 + 2 * E => 10 + 2 * 5
entrada
derivação
7
10
E
2 5
E => E + E => E + E * E => 10 + E*E => 10 + 2 * E => 10 + 2 * 5
derivação
árvore de derivação
E E
E E
+
*
8
10
E
2 5
árvore de derivação
E E
E E
+
*
mult a, 2, 5add b, 10, a
código de máquina
9
Parsing
10
gramática
Parserstringde entrada
derivação
11
Exemplo:
Parser
derivação
S
bSaS
aSbS
SSSentrada
?aabb
12
Busca Exaustiva
||| bSaaSbSSS
Fase 1:
S
bSaS
aSbS
SSSaabb
Todas as possíveis derivações de comprimento 1
Encontrar derivação
13
S
bSaS
aSbS
SSS aabb
14
Fase 2
aSbS
SSS
aabb
SSSS
bSaSSSS
aSbSSSS
SSSSSS
Fase 1
abaSbS
abSabaSbS
aaSbbaSbS
aSSbaSbS
||| bSaaSbSSS
15
Fase 2
SSSS
aSbSSSS
SSSSSS
aaSbbaSbS
aSSbaSbS
Fase 3
aabbaaSbbaSbS
||| bSaaSbSSS
aabb
16
Resultado final da busca exaustiva
Parser
derivação
S
bSaS
aSbS
SSSentrada
aabb
aabbaaSbbaSbS
(top-down parsing)
17
Complexidade de tempo da busca exaustiva
Suponha que não existam produções da forma
A
BA
Número de fases para um string : w ||2 w
18
Tempo para a fase 1:k
k possíveis derivações
Para uma gramática com regras k
19
Tempo para a fase 2: 2k
possíveis derivações2k
20
Tempo para a fase : ||2wk
possíveis derivações||2wk
||2 w
21
Tempo total requerido para um string :w
||22 wkkk
Extremamente ruim!!!
fase 1 fase 2 fase 2|w|
22
Existem algoritmos mais rápidospara tipos especiais de gramáticas
S-grammar: axA
símbolo stringde variáveis
),( aA ocorre apenas uma vezPar
23
S-grammar - exemplo:
cS
bSSS
aSS
abccabcSabSSaSS
Cada string tem uma única derivação
24
No parser por busca exaustiva existe uma única escolha em cada fase
Para S-grammars:
Tempo total para parsing de :w ||w
Tempo para cada fase: 1
25
Para gramáticas livres de contexto em geral:
Existe um algoritmo de parsingque faz parsing de um stringem tempo 3||w
26
Simplificações de
Gramáticas Livres de Contexto
27
Regra de Substituição
bB
abbAB
abBcA
aaAA
aA
abbcA
ababbAcA
aaAA
aA
Substitua B
gramáticaequivalente
28
Em geral:
nyyyB
xBzA
||| 21
Substitua B
zxyzxyzxyA n||| 21 gramáticaequivalente
29
Produções Inúteis
aAA
AS
S
aSbS
aAaaaaAaAAS
Algumas derivações nunca terminam...
Produção Inútil
30
bAB
A
aAA
AS
Outra gramática:
Nunca é atingida a partir de S
Produção inútil
31
Em geral:
Se wxAyS
Então a variável é útilA
Caso contrário, a variável é inútilA
)(GLw
32
Uma produção é útil se todas as suas variáveis são úteis
xA
33
Removendo Produções Inúteis
Gramática Exemplo:
aCbC
aaB
aA
CAaSS
||
34
Primero:encontre todas as variáveis queproduzem strings só com terminais
aCbC
aaB
aA
CAaSS
|| },{ BA
},,{ SBA
Passo 1:
Passo 2:
35
Mantenha apenas as variáveisque produzem símbolos terminais
aCbC
aaB
aA
CAaSS
||
},,{ SBA
aaB
aA
AaSS
|
36
Segundo:Encontre todas as variáveisatingíveis a partir de
aaB
aA
AaSS
|
S A B
Grafo de Dependência
nãoatingível
S
37
Mantenha apenas as variáveisatingíveis a partir de S
aaB
aA
AaSS
|
aA
AaSS
|
Gramática Final
38
Variáveis Nulas
A
Variável Nula: A
39
Removendo Variáveis Nulas
Gramática Exemplo:
M
aMbM
aMbS
Variável nula
40
M
M
aMbM
aMbSSubstitua
abM
aMbM
abS
aMbS
Gramática Final
41
Produções Unitárias
BAProdução Unitária:
42
Removendo Produções Unitárias
Observação:
AA
É removida imediatamente
43
Gramática Exemplo:
bbB
AB
BA
aA
aAS
44
bbB
AB
BA
aA
aAS
SubstituaBA
bbB
BAB
aA
aBaAS
|
|
45
Remova
bbB
BAB
aA
aBaAS
|
|
bbB
AB
aA
aBaAS
|
BB
46
SubstituaAB
bbB
aA
aAaBaAS
||
bbB
AB
aA
aBaAS
|
47
Remova produções repetidas
bbB
aA
aBaAS
|
bbB
aA
aAaBaAS
||
Gramática final
48
Removendo Tudo
Passo 1: Remova Variáveis Nulas
Passo 2: Remova Produções Unitárias
Passo 3: Remova Variáveis Inúteis