Uma técnica de recuperação de erros sintáticos em Uma técnica de recuperação de erros sintáticos em Uma técnica de recuperação de erros sintáticos em Uma técnica de recuperação de erros sintáticos em compiladorescompiladorescompiladorescompiladores
Modo PânicoModo PânicoModo PânicoModo Pânico
Demontiê Junior
Izabela Melo
Agenda
2Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
• O que é um Compilador?• Fases de um Compilador• Análise Sintática
o Análise Sintática Preditiva• Recuperação de Erros• Modo Pânico
o Exemplo prático• Considerações finais
• O que é um Compilador?• Fases de um Compilador• Análise Sintática
o Análise Sintática Preditiva• Recuperação de Erros• Modo Pânico
o Exemplo prático• Considerações finais
INTRODUÇÃOINTRODUÇÃOINTRODUÇÃOINTRODUÇÃOMODO PÂNICOMODO PÂNICOMODO PÂNICOMODO PÂNICOEXEMPLOEXEMPLOEXEMPLOEXEMPLO
CONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAIS
O que é um compilador?
_________________________________________
_________________________________________
Fonte DestinoCompilador
4Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
Outros processadores de linguagens• Interpretadores
5Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
Interpretador
____________________
Fonte
RESULTADOSEntrada
• Compiladores JITs
6Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
Outros processadores de linguagens
Aplicação Java
Bytecode
Código deMáquina
Compilador
JIT
Máquina Virtual
7
Fases de um compiladorAnalisador Léxico
Fluxo de caracteres
Fluxo de tokens
Meu nome é
Ex.:
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
8
Fases de um compiladorAnalisador Léxico
Analisador Sintático
Fluxo de caracteres
Fluxo de tokens
Árvore Sintática
Hoje, não pagarei-te o almoço!
Ex.:
pagarei-te
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
9
Fases de um compiladorAnalisador Léxico
Analisador Sintático
Analisador Semântico
Fluxo de caracteres
Fluxo de tokens
Árvore Sintática
Árvore Sintática
Você quer ir para casa ou cachorro?
Ex.:
cachorro
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
10
Fases de um compiladorAnalisador Léxico
Analisador Sintático
Analisador Semântico
Gerador de Código Intermediário
Otimizador de Código Independente de Máquina
Gerador de Código
Otimizador de Código Dependente de Máquina
Fluxo de caracteres
Fluxo de tokens
Árvore Sintática
Árvore Sintática
Representação Intermediária
Representação Intermediária
Código de máquina destino
Código de máquina destino
Tabela
de
Símbolos
Notas de aula do Prof. Franklin Ramalho (UFCG/CEEI/DSC)
Análise Sintática• Analisa a estrutura gramatical dos tokens no
programa fonte
• Produz uma estrutura intermediária
– Árvore Sintática
11Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
Notas de aula do Prof. Franklin Ramalho (UFCG/CEEI/DSC)
Análise Sintática• Gramáticas Livre de Contexto (BNF)
– Elementos terminais
– Elementos não terminais
• Ex.:
((9 – 3) + 2 + 5) é uma derivação válida?
E � E + EE � E - EE � (E)E � TT � 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
12Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
Análise Sintática• Tipos de algoritmos
– Análise Sintática Descendente
• Recursiva
• Preditiva (LL)
– Análise Sintática Ascendente (Shift-Reduce)
• SLR
• LR Canônico
• LALR
13Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
Mais complexos
Análise Sintática Preditiva• Utiliza as funções FIRST e FOLLOW para determinar
de forma não ambígua a regra de produção a ser analisada
• FIRST(α) é o conjunto de terminais que podem iniciar as cadeias derivadas de α
• FOLLOW(A) é o conjunto de terminais que podem aparecer à direita de A numa forma sentencial
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
14
Análise Sintática Preditiva• A partir das funções FIRST e FOLLOW, é construída
uma tabela
– As linhas representam os não terminais
– As colunas representam os terminais
– Cada célula é preenchida com a regra de produção que deve ser analisada para o não terminal A e o terminal a
– Se não houver uma regra de produção, a célula indica um erro
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
15
Análise Sintática Preditiva
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
16
Notas de aula do Prof. Franklin Ramalho (UFCG/CEEI/DSC)
Recuperação de Erros Sintáticos• Um bom compilador deve informar todos os erros à
medida em que aparecem
• O compilador precisa voltar a um estado do qual ele possa prosseguir
• Ex.:
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
17
int a = 0;while (x > 0){
a = a x;x--;
}
Recuperação de Erros Sintáticos• Existem várias estratégias
– Recuperação em Nível de Frase
– Produções de Erro
– Correção Global
– e...
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
18
INTRODUÇÃOINTRODUÇÃOINTRODUÇÃOINTRODUÇÃOMODO PÂNICOMODO PÂNICOMODO PÂNICOMODO PÂNICOEXEMPLOEXEMPLOEXEMPLOEXEMPLO
CONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAIS
Ideia Central• Conhecido também por “Modalidade do
Desespero”
• Define um conjunto de tokens de sincronização
• Ao encontrar um erro, descarta os símbolos da entrada até encontrar um token de sincronização
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
20
Definindo os Tokens de Sincronização• Cada não terminal possui um conjunto desses
tokens
• Um bom conjunto pode definir a qualidade do algoritmo de recuperação de erros
• Heurística: podemos incluir todos os tokens em FOLLOW(A) no conjunto de tokens de sincronização do não terminal A
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
21
Abordagem• Ao encontrar um token inesperado
– Se for um token de erro, o analisador sintático ignora o símbolo da entrada
– Se for um token de sincronização, o analisador desempilha o não terminal no topo da pilha
– Se o terminal no topo da pilha não casar com a entrada, ele é desempilhado
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
22
INTRODUÇÃOINTRODUÇÃOINTRODUÇÃOINTRODUÇÃOMODO PÂNICOMODO PÂNICOMODO PÂNICOMODO PÂNICOEXEMPLOEXEMPLOEXEMPLOEXEMPLO
CONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAIS
Gramática
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
24
E � T E | єT � id AA � = F;F � id | num
E � T E | єT � id AA � = F;F � id | num
Realizando Análise Preditiva• Cálculo das funções FIRST e FOLLOW
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
25
FIRST(id) = {id} FIRST(=) = {=}
FIRST(;) = {;} FIRST(num) = {num}
FIRST(E) = {id, є} FIRST(T) = {id}
FIRST(A) = {=} FIRST(F) = {id, num}
FOLLOW(E) = {$} FOLLOW(T) = {id, $}
FOLLOW(A) = {id, $} FOLLOW(F) = {;}
FIRST(id) = {id} FIRST(=) = {=}
FIRST(;) = {;} FIRST(num) = {num}
FIRST(E) = {id, є} FIRST(T) = {id}
FIRST(A) = {=} FIRST(F) = {id, num}
FOLLOW(E) = {$} FOLLOW(T) = {id, $}
FOLLOW(A) = {id, $} FOLLOW(F) = {;}
Realizando Análise Preditiva• Construindo a tabela para o analisador
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
26
id ; = num $
E
T
A
F F � id F � num
A � = F;
T � id A
E � T E E � Є
sinc
sinc
sinc
Realizando Análise Preditiva• Ex.:
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
27
a = ;
b = 3;
a = ;
b = 3;
Pilha Entrada Ação
$ E a = ; b = 3; E � T E
$ E T a = ; b = 3; T � id A
$ E A id a = ; b = 3; Desempilha id
$ E A = ; b = 3; A � = F;
$ E ; F = = ; b = 3; Desempilha =
$ E ; F ; b = 3; Desempilha F
$ E ; ; b = 3; Desempilha ;
. . .$ E b = 3; E � T E
INTRODUÇÃOINTRODUÇÃOINTRODUÇÃOINTRODUÇÃOMODO PÂNICOMODO PÂNICOMODO PÂNICOMODO PÂNICOEXEMPLOEXEMPLOEXEMPLOEXEMPLO
CONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAISCONSIDERAÇÕES FINAIS
Considerações Finais• Vantagens
– Simplicidade
– Garantia de não entrar num laço infinito
• Desvantagens
– Não captura erros múltiplos num mesmo enunciado
Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
29
Referências
30Ciclo de Seminários Técnicos - Modo Pânico Demontiê Junior e Izabela Melo
AHO, A.V.; SETHI, R.; ULLMAN, J.D. Compiladores: Princípios, Técnicas e Ferramentas. 2ª edição. Ed. LTC, 2006.
Notas de aula do Prof. Franklin Ramalho (UFCG/CEEI/DSC) http://www.dsc.ufcg.edu.br/~franklin/pp/
http://www.ybadoo.com.br/ead/cmp/04/CMP_slides.pdf. Útimo acesso em 11/06/2011.
Uma técnica de recuperação de erros sintáticos em Uma técnica de recuperação de erros sintáticos em Uma técnica de recuperação de erros sintáticos em Uma técnica de recuperação de erros sintáticos em compiladorescompiladorescompiladorescompiladores
Modo PânicoModo PânicoModo PânicoModo Pânico
Demontiê Junior
Izabela Melo