Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Compiladores
2
Código de Máquina Programa Add v,v,0 cmp v,5 jmplt ELSE THEN: add x, 12,v ELSE: WHILE: cmp x,3 ... v = 5; if (v>5) x = 12 + v; while (x !=3) { x = x - 3; v = 10; } ...... Compilador
3
Compilador analisador léxico parser entrada saída código de programa
máquina programa
4
Um parser conhece a gramática
da linguagem de programação
5
Parser PROGRAM STMT_LIST STMT_LIST STMT; STMT_LIST | STMT;
STMT EXPR | IF_STMT | WHILE_STMT | { STMT_LIST } EXPR EXPR + EXPR | EXPR - EXPR | ID IF_STMT if (EXPR) then STMT | if (EXPR) then STMT else STMT WHILE_STMT while (EXPR) do STMT
6
O parser encontra a derivação
para uma entrada particular derivação Parser entrada E => E + E => E + E * E => 10 + E*E => * E => * 5 E -> E + E | E * E | INT * 5
7
árvore de derivação derivação E E => E + E => E + E * E => 10 + E*E => * E => * 5 E + E 10 E E * 2 5
8
árvore de derivação E código de máquina E + E mult a, 2, 5 add b, 10, a 10 E E * 2 5
9
Parsing
10
Parser string de entrada derivação gramática
11
Exemplo: Parser derivação entrada ?
12
Busca Exaustiva Fase 1: Encontrar derivação
Todas as possíveis derivações de comprimento 1
14
Fase 2 Fase 1
15
Fase 2 Fase 3
16
Resultado final da busca exaustiva
(top-down parsing) Parser entrada derivação
17
Complexidade de tempo da busca exaustiva
Suponha que não existam produções da forma Número de fases para um string :
18
Para uma gramática com regras
Tempo para a fase 1: possíveis derivações
19
Tempo para a fase 2: possíveis derivações
20
Tempo para a fase : possíveis derivações
21
Extremamente ruim!!! Tempo total requerido para um string : fase 1
fase 2|w| fase 2 Extremamente ruim!!!
22
Existem algoritmos mais rápidos
para tipos especiais de gramáticas S-grammar: símbolo string de variáveis Par ocorre apenas uma vez
23
S-grammar - exemplo: Cada string tem uma única derivação
24
Para S-grammars: No parser por busca exaustiva existe uma única escolha em cada fase Tempo para cada fase: Tempo total para parsing de :
25
Para gramáticas livres de contexto em geral:
Existe um algoritmo de parsing que faz parsing de um string em tempo
26
Simplificações de Gramáticas Livres de Contexto
27
Regra de Substituição gramática equivalente Substitua B
28
Em geral: Substitua B gramática equivalente
29
Produções Inúteis Produção Inútil Algumas derivações nunca terminam...
30
Outra gramática: Produção inútil Nunca é atingida a partir de S
31
Em geral: Se Então a variável é útil Caso contrário, a variável é inútil
32
Uma produção é útil se todas as suas variáveis são úteis
33
Removendo Produções Inúteis
Gramática Exemplo:
34
Primero: encontre todas as variáveis que
produzem strings só com terminais Passo 1: Passo 2:
35
Mantenha apenas as variáveis
que produzem símbolos terminais
36
Segundo: Encontre todas as variáveis atingíveis a partir de
Grafo de Dependência não atingível
37
Mantenha apenas as variáveis
atingíveis a partir de S Gramática Final
38
Variáveis Nulas Variável Nula:
39
Removendo Variáveis Nulas
Gramática Exemplo: Variável nula
40
Gramática Final Substitua
41
Produções Unitárias Produção Unitária:
42
Removendo Produções Unitárias
Observação: É removida imediatamente
43
Gramática Exemplo:
44
Substitua
45
Remova
46
Substitua
47
Remova produções repetidas
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.