Modo Pânico

31
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 compiladores compiladores compiladores compiladores Modo Pânico Modo Pânico Modo Pânico Modo Pânico Demontiê Junior [email protected] Izabela Melo [email protected]

description

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.

Transcript of Modo Pânico

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

[email protected]

Izabela Melo

[email protected]

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

[email protected]

Izabela Melo

[email protected]