Compiladores são programas que realizam a tradução de um código fonte escrito em uma linguagem para um programa equivalente em outra linguagem (linguagem objeto). Um compilador pode ser dividido em duas etapas: Análise, também chamada de front end, composta pelas análises léxica, sintática e semântica e pela geração de código intermediário; e Síntese (back end), composta pela geração do código objeto. No front end podem ocorrer diferentes tipos de erros e, para cada um desses, existem técnicas adequadas para sua recuperação. Neste seminário, será abordada uma técnica de recuperação de erros sintáticos chamada de modalidade do desespero ou modo pânico.
1. Modo Pânico
Uma técnica de recuperação de erros sintáticos em
compiladores
Demontiê Junior Izabela Melo
demontie@dsc.ufcg.edu.br izabela@dsc.ufcg.edu.br
2. Agenda
• 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
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
2
3. INTRODUÇÃO
MODO PÂNICO
EXEMPLO
CONSIDERAÇÕES FINAIS
4. O que é um compilador?
Fonte Compilador Destino
_________ _________
_________ _________
_________ _________
_________ _________
_____ _____
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
4
5. Outros processadores de linguagens
• Interpretadores
Fonte
_______
_______
______
Entrada RESULTADOS
Interpretador
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
5
6. Outros processadores de linguagens
• Compiladores JITs
Aplicação Java
Bytecode
Máquina Virtual
Compilador
JIT
Código de
Máquina
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
6
7. Fases de um compilador
Fluxo de caracteres
Analisador Léxico
Fluxo de tokens
Ex.:
Meu nome é
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
7
8. Fases de um compilador
Fluxo de caracteres
Analisador Léxico
Fluxo de tokens
Analisador Sintático
Árvore Sintática
Ex.:
Hoje, não pagarei-te o almoço!
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
8
9. Fases de um compilador
Fluxo de caracteres
Analisador Léxico
Fluxo de tokens
Analisador Sintático
Árvore Sintática
Analisador Semântico
Árvore Sintática
Ex.:
cachorro
Você quer ir para casa ou cachorro?
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
9
10. Fases de um compilador
Fluxo de caracteres
Analisador Léxico
Fluxo de tokens
Analisador Sintático
Árvore Sintática
Analisador Semântico
Árvore Sintática
Tabela Gerador de Código
de Intermediário
Símbolos Representação Intermediária
Otimizador de Código
Independente de Máquina
Representação Intermediária
Gerador de Código
Código de máquina destino
Notas de aula do Prof.
Franklin Ramalho Otimizador de Código
Código de máquina
(UFCG/CEEI/DSC) Dependente de Máquina
destino
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
10
11. Análise Sintática
• Analisa a estrutura gramatical dos tokens no
programa fonte
• Produz uma estrutura intermediária
– Árvore Sintática
Notas de aula do Prof.
Franklin Ramalho
(UFCG/CEEI/DSC)
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
11
12. Análise Sintática
• Gramáticas Livre de Contexto (BNF)
– Elementos terminais
– Elementos não terminais
• Ex.:
E E + E
E E - E
E (E)
E T
T 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
((9 – 3) + 2 + 5) é uma derivação válida?
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
12
13. 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 Mais complexos
• LALR
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
13
14. 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
15. 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
16. Análise Sintática Preditiva
Notas de aula do Prof.
Franklin Ramalho
(UFCG/CEEI/DSC)
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
16
17. 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.:
int a = 0;
while (x > 0){
a = a x;
x--;
}
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
17
18. 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
19. INTRODUÇÃO
MODO PÂNICO
EXEMPLO
CONSIDERAÇÕES FINAIS
20. 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
21. 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
22. 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
23. INTRODUÇÃO
MODO PÂNICO
EXEMPLO
CONSIDERAÇÕES FINAIS
24. Gramática
E T E | є
T id A
A = F;
F id | num
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
24
26. Realizando Análise Preditiva
• Construindo a tabela para o analisador
id ; = num $
E E TE E Є
T T id A sinc
A A = F; sinc
F F id sinc F num
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
26
27. Realizando Análise Preditiva
• Ex.: a=;
b = 3;
Pilha Entrada Ação
$E a = ; b = 3; E TE
$ET a = ; b = 3; T id A
$ E A id a = ; b = 3; Desempilha id
$EA = ; b = 3; A = F;
$E;F= = ; b = 3; Desempilha =
$E;F ; b = 3; Desempilha F
$E; ; b = 3; Desempilha ;
$E b = 3; E TE
...
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
27
28. INTRODUÇÃO
MODO PÂNICO
EXEMPLO
CONSIDERAÇÕES FINAIS
29. 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
30. Referências
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.
Ciclo de Seminários Técnicos - Modo Pânico
Demontiê Junior e Izabela Melo
30
31. Modo Pânico
Uma técnica de recuperação de erros sintáticos em
compiladores
Demontiê Junior Izabela Melo
demontie@dsc.ufcg.edu.br izabela@dsc.ufcg.edu.br