Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)

Documentos relacionados
Compiladores. Análise Sintática

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

Tratamento dos Erros de Sintaxe. Adriano Maranhão

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Análise Sintática. Análise Sintática. Tipos de Analisadores Gramáticais: PARSERS

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

BNF (Backus-Naur Form) Gramática Livres de Contexto / Estruturas Recursivas

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente

Análise sintática. Análise sintática ascendente. Parte-se dos símbolos terminais em direção ao símbolo inicial da gramática. Derivação mais à direita

Análise sintática. Prof. Thiago A. S. Pardo Tratamento de erros sintáticos

Analisadores Descendentes Tabulares; Cjs First Follow

Análise Sintática - Final

Introdução Análise Sintática Descendente Análise Sintática Ascendente. Aula Prática. Fernando Antônio Asevedo Nóbrega

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34

Análise Sintática. Fabiano Baldo

Compiladores Aula 6. Celso Olivete Júnior.

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 12. Instituto de C

Compiladores - Análise LL(1)

Análise Sintática Descendente

Reduce: reduz o que está imediatamente à esquerda do foco usando uma produção

Compiladores - Análise LL(1)

Análise Sintática LL(1)

Construção de Compiladores Aula 16 - Análise Sintática

INE5317 Linguagens Formais e Compiladores. AULA 10: Anális e S intática

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Compiladores - Análise SLR

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

V Teoria de Parsing. Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada

Interfaces de Vanguarda do Compilador

Compiladores. Análise Sintática

INE5318 Construção de Compiladores. AULA 4: Análise Sintática

Análise Sintática Bottom-up

CP Compiladores I Prof. Msc.. Carlos de Salles

Compiladores. Parser LL 10/13/2008

Análise sintática. Prof. Thiago A. S. Pardo. Análise sintática ascendente

Compiladores - JACC. Fabio Mascarenhas

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Tokens, Padroes e Lexemas

Análise sintática. Análise sintática. Top-down ou descendente. Com retrocesso: por tentativa e erro. Preditiva: para gramáticas LL(1) 09/04/2012

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba

Vantagens de uma Gramática. Sintaxe de uma Linguagem. Analisador Sintático - Parser. Papel do Analisador Sintático. Tiposde Parsers para Gramáticas

Compiladores. Prof. Bruno Moreno Aula 11 20/05/2011

Análise Bottom-Up. Compiladores. Parsing LR. Tabela Ações/Transições. Análise LR. Construindo tabelas LR

Compiladores I. Caracterizar um método de análise bottom-up. Compreender os mecanismos básicos envolvidos no processo de análise LR.

Compiladores I Prof. Ricardo Santos (cap 1)

Análise Sintática (Cap. 04) Análise Sintática Descendente

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto

Aspectos do analisador sintático Usabilidade da Dias de atraso

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Como construir um compilador utilizando ferramentas Java

Compiladores. Introdução

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Compiladores - Análise Recursiva

QUESTÃO 1 (0,6 ponto) Classifique os processadores de linguagens com relação aos tipos das linguagens-fonte e objeto.

Pró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica

Linguagens Livres de Contexto

V.2 Especificação Sintática de Linguagens de Programação

Análise Sintática II: Analisadores Descendentes Preditivos

Introdução à Programação

Linguagens de Domínio Específico

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Conceitos de Linguagens de Programação

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

Universidade Federal de Alfenas

Compiladores - Análise Preditiva

Conceitos de Linguagens de Programação

Universidade Federal do ABC Rua Santa Adélia, Bairro Bangu - Santo André - SP - Brasil CEP Telefone/Fax:

Compiladores. Análise Léxica

Analisadores Sintáticos LR

FOLHA DE PROVA. Descreva e ilustre, com um exemplo, o algoritmo de minimização de um autômato.

MAB Análise Sintática. Wednesday, April 4, 12

Construção de Compiladores Aula 3 - Analisador Sintático

Estrutura geral de um compilador programa-fonte

Parsing Preditivo. Antes de ser abordado o Parsing Preditivo, será apresentado o Analisador Sintático Descendente Recursivo.

MAB Análise Sintática. Wednesday, August 31, 11

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

Análise sintática. Questão. E se a análise sintática pudesse ser modelada por autômatos?

Compiladores. Top-Down x Bottom Up. Plano da aula. Redução exemplo 1. Redução exemplo 1. Lembrando: construir a tabela de análise LL(1) A Abc b B d

Compiladores - Análise Recursiva

Automata e Linguagens Formais

Linguagens Formais e Autômatos

IV.2 Aspectos Léxicos Convencionais

Linguagens de Programação Aula 5

Compiladores - Análise Preditiva

Analisadores Ascendentes ou Empilha-Reduz. Mais um exemplo... Mais um exemplo... Top-Down x Bottom Up. Conteúdo da aula. Analisadores Ascendentes

Compiladores - Especificando Sintaxe

Eduardo Belo de Araújo. Analisador ANSI-C

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Construção de Compiladores Aula 18 - Análise Sintática Ascendente

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Análise Sintáctica. Definições: Conjuntos First() e Follow() Compiladores, Aula Nº 19 João M. P. Cardoso. Conjunto First(β)

Identificadores Nome de variáveis, constantes, métodos, etc...

LL Parser ( TOP-DOWN)

Linguagens Livres do Contexto. Adaptado de H. Brandão

Linguagens de Domínio Específico

Transcrição:

Compilação: Erros Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão * Analisadores Botton-Up: - Shift-Reduce (SLR) * Erros no Lex * Erros no Yacc * Erros na Definição da Gramática! Recuperação de Erros: * Analisadores Top-Down (LL) Modo Pânico / Recuperação Local * Analisadores Botton-Up (SLR) - Ações de recuperação * Recuperação de erros: análise de expressões com precedência de operadores 1

Compilação: Erros Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão Parar a análise no primeiro erro Mensagens de erro precisas Compiladores famosos... Turbo Pascal e Microsoft C (1990) * Analisadores Botton-Up: - Shift-Reduce (SLR) * Erros no Lex * Erros no Yacc * Erros na Definição da Gramática! Recuperação de Erros: * Analisadores Top-Down (LL) Modo Pânico / Recuperação Local * Analisadores Botton-Up (SLR) - Ações de recuperação * Recuperação de erros: análise de expressões com precedência de operadores 2

Compilação: DETECÇÃO de Erros - Análise Top Down (LL) Analisador Preditivo Tabular Entrada a + b $ Analisador Preditivo Não-Recursivo: Composto por: X Y Analisador Preditivo Não Recursivo Saída Ok, Erros - Uma fita de entrada - Uma pilha auxiliar - Uma tabela de derivação preditiva (Tabela Sintática) Funcionamento: Z $ Pilha Tabela de Análise Sintática M Similar ao Analisador Preditivo Recursivo. Necessita que seja gerada previamente a Tabela Sintática. É possível construir um analisador preditivo não-recursivo mantendo explicitamente uma pilha, ao invés de implicitamente através de chamadas recursivas 3

Compilação: DETECÇÃO de Erros - Análise Top Down (LL) Analisador Preditivo Tabular Análise Sintática: O analisador é controlado por um programa que considera X, o símbolo no topo da pilha, e a é um símbolo terminal da entrada. Estes dois símbolos determinam a ação do analisador. Há três possibilidades então: 1. Se X = a = $, o analisador encerra o reconhecimento, com sucesso. 2. Se X = a $, o analisador desempilha X da pilha e avança o ponteiro de entrada ao próximo símbolo de entrada. 3. Se X é um não-terminal, o programa consulta a entrada M[X,a] da tabela de derivação M. Esta entrada pode ser uma produção de X ou um erro. Se, por exemplo, M[X,a] = { X UVW }, o analisador substitui X no topo da pilha por WVU (com U no topo). Como saída, assume-se que o analisador apenas imprime a produção utilizada. Se M[X,a] = erro, o analisador chama a rotina de recuperação de erro. X Y Z $ Pilha Entrada a + b $ Analisador Preditivo Não Recursivo Tabela de Análise Sintática M Saída Ok, Erros Tabela de Análise Sintática: É uma matriz M com n linhas e t+1 colunas, onde n é o número de símbolos não-terminais, e t é o número de símbolos terminais (a coluna extra corresponde ao Símbolo $) 4

DETECÇÃO de Erros Analisador Preditivo Tabular Regras de Produção Terminais: { id, +, *, (, ) } Não-Terminais: { E, E, T, T, F } Id + Id * Id Algoritmo: Price & Toscani, pg.47 Gramática LL(1) 5

DETECÇÃO de Erros Analisador Preditivo Tabular Regras de Produção Terminais: { id, +, *, (, ) } Não-Terminais: { E, E, T, T, F } Id + + Id * Id Algoritmo: Price & Toscani, pg.47 Gramática LL(1) 6

Compilação: DETECÇÃO de Erros - Análise Top Down (LL) Analisador Descendente Recursivo Feito a mão Slides From: OCW Oppen CourseWare MIT / 6.035 Lecture

Compilação: DETECÇÃO de Erros - Análise Top Down (LL) Analisador Descendente Recursivo Feito a mão Slides From: OCW Oppen CourseWare MIT / 6.035 Lecture

Compilação: DETECÇÃO de Erros - Análise Top Down (LL) Analisador Descendente Recursivo Feito a mão Slides From: OCW Oppen CourseWare MIT / 6.035 Lecture

Compilação: DETECÇÃO de Erros - Análise Botton-Up (SLR) Analisador Shift-Reduce Sentença Gramática Tipos de Ações 10

Compilação: DETECÇÃO de Erros - Análise Botton-Up (SLR) Analisador Shift-Reduce Slides From: OCW Oppen CourseWare MIT / 6.035 Lecture

Compilação: DETECÇÃO de Erros - Análise Botton-Up (SLR) Analisador Shift-Reduce O que fazer quando acha um erro?!? Slides From: OCW Oppen CourseWare MIT / 6.035 Lecture

Compilação: DETECÇÃO de Erros - Análise Botton-Up (SLR) Analisador Shift-Reduce O que fazer quando acha um erro?!? Slides From: OCW Oppen CourseWare MIT / 6.035 Lecture Se parar: Mensagem Precisa!

Compilação: Recuperação de Erros Recuperação de Erros * O que é? - Quando um compilador detecta um erro de sintaxe é desejável que ele tente continuar o processo de análise de modo a detectar outros erros. * Qual a sua função? - Na recuperação de erros, tenta-se colocar o analisador em um estado tal que o restante da sentença de entrada ainda possa ser analisada. Este processo pode envolver: a modificação da entrada (excluir tokens), a modificação da pilha, ou de ambos. * Problema: gerar mais erros do que se não tivesse tratado... * Tipos de recuperação de erro - Modo Pânico: forma mais simples de detecção na qual o analisador lê e descarta símbolos da entrada até encontrar um token de sincronização; - Modo Recuperação Local: recupera o erro fazendo alterações sobre um símbolo, desprezando um token de entrada, ou substituindo-o por outro, ou inserindo um novo token, ou ainda removendo um símbolo da pilha.

Compilação: Recuperação de Erros Recuperação de Erros * Exemplos simples: A := B + C While A < X Do A:= A+1; <= Erro! A : = B C + D; <= Erro! * Qualidade da solução... Um algoritmo de recuperação pode tentar reiniciar a análise inserindo um ; após o identificador C... OK Um algoritmo de recuperação pode tentar reiniciar a análise inserindo um ; após o identificador B... Mais problemas!!! - A qualidade de uma rotina de recuperação de erros é medida pela precisão com que ela re-sincroniza a análise e é inversamente proprocional à sua capacidade de gerar falsos erros

Compilação: RECUPERAÇÃO de Erros - Análise Top Down (LL) Analisador Preditivo Tabular Regras de Produção Terminais: { id, +, *, (, ) } Não-Terminais: { E, E, T, T, F } Id + Id * Id Id + + Id * Id Recuperação?

Compilação: RECUPERAÇÃO de Erros - Análise Top Down (LL) Analisador Preditivo Tabular Regras de Produção Modo Pânico: Id + Id * Id Terminais: { id, +, *, (, ) } Não-Terminais: { E, E, T, T, F } => Despreza símbolos da entrada até encontrar um símbolo de sincronização => Método bastante simples... => Resultado também é simplório... Id + + Id * Id Recuperação...

Compilação: RECUPERAÇÃO de Erros - Análise Top Down (LL) Analisador Preditivo Tabular Regras de Produção Id + Id * Id Id + + Id * Id Terminais: { id, +, *, (, ) } Não-Terminais: { E, E, T, T, F } Modo Pânico: - Na tabela do analisador preditivo tabular, as entradas em branco representam situações de erro; - Alteramos a tabela do reconhecedor de modo a desprezar símbolos de entrada até encontrar um token de sincronização; - O conjunto de tokens de sincronização para um símbolo-não terminal A é formado pelos símbolos terminais contidos em Follow(A). Exemplo: Follow (E) = Follow (E ) = { ), $ } Follow (T) = Follow (T ) = { +, ), $ } Follow (F) = { +, *, ), $ } Recuperação... nova Tabela do Reconhecedor LL com extensão para tratar erros

Compilação: RECUPERAÇÃO de Erros - Análise Top Down (LL) Analisador Preditivo Tabular Regras de Produção Modo Pânico: Terminais: { id, +, *, (, ) } Id + Id * Id Id + + Id * Id Não-Terminais: { E, E, T, T, F } - O conjunto de tokens de sincronização para um símbolo-não terminal A é formado pelos símbolos terminais contidos em Follow(A). Exemplo: Follow (E) = Follow (E ) = { ), $ } Follow (T) = Follow (T ) = { +, ), $ } Follow (F) = { +, *, ), $ } Recuperação... nova Tabela do Reconhecedor LL com extensão para tratar erros

Compilação: RECUPERAÇÃO de Erros - Análise Top Down (LL) Analisador Preditivo Tabular Modo Pânico: Regras de Produção Terminais: { id, +, *, (, ) } Não-Terminais: { E, E, T, T, F } Id + Id * Id Id + + Id * Id $E E => +TE Recuperação... nova Tabela $E T+ $E T E => +TE T => FT

Compilação: RECUPERAÇÃO de Erros - Análise Top Down (LL) Analisador Preditivo Tabular Regras de Produção Modo Recuperação Local: Id + Id * Id Id + + Id * Id Recuperação... Terminais: { id, +, *, (, ) } Não-Terminais: { E, E, T, T, F } => Despreza símbolos da entrada, substitui ou insere um símbolo a cada erro detectado (na inserção tem que evitar laço infinito) => Método mais sofisticado => Criação da Tabela do Reconhecedor com a inclusão de situações específicas para tratar diferentes erros (expande tabela acrescentando linhas para os terminais também)

Compilação: RECUPERAÇÃO de Erros - Análise Top Down (LL) Analisador Preditivo Tabular Regras de Produção Terminais: { id, +, *, (, ) } Não-Terminais: { E, E, T, T, F } Modo Recuperação Local: => Criação da Tabela do Reconhecedor com a inclusão de situações específicas para tratar diferentes erros (expande tabela acrescentando linhas para os terminais também) => Em branco: situações que não ocorrem Descarta Descarta ERRO1 ERRO1 ERRO1 ERRO1 Descarta Descarta ERRO1 ERRO1 ERRO1 ERRO1 Descarta ERRO1 ERRO1 ERRO1 ERRO1 id Desempilha + Desempilha * Desempilha ( ) Desempilha ERRO2 ERRO2 ERRO2 ERRO2 Desempilha ERRO2 $ ERRO3 ERRO3 ERRO3 ERRO3 ERRO3 ACEITA!

Compilação: RECUPERAÇÃO de Erros - Análise Top Down (LL) Analisador Preditivo Tabular Regras de Produção Terminais: { id, +, *, (, ) } Não-Terminais: { E, E, T, T, F } Modo Recuperação Local: Rotinas de erro típicas para o exemplo abaixo: ERRO1: insere token id na entrada e msg operando esperado ERRO2: desempilha o símbolo ) e msg parêntese esperado ERRO3: descarta o token da entrada e msg fim do arquivo encontrado Descarta: retira da pilha um não terminal Desempilha: retira da pilha um terminal Descarta Descarta ERRO1 ERRO1 ERRO1 ERRO1 Descarta Descarta ERRO1 ERRO1 ERRO1 ERRO1 Descarta ERRO1 ERRO1 ERRO1 ERRO1 id Desempilha + Desempilha * Desempilha ( ) Desempilha ERRO2 ERRO2 ERRO2 ERRO2 Desempilha ERRO2 $ ERRO3 ERRO3 ERRO3 ERRO3 ERRO3 ACEITA!

Compilação: RECUPERAÇÃO de Erros - Análise Botton-Up (SLR) Analisador Shift-Reduce Slides From: OCW Oppen CourseWare MIT / 6.035 Lecture

Compilação: RECUPERAÇÃO de Erros - Análise Botton-Up (SLR) Analisador Shift-Reduce => Criação da Tabela do Reconhecedor com a inclusão de situações específicas para tratar cada tipo de erro (só ocorrem ao ler o próximo token)

Compilação: RECUPERAÇÃO de Erros Analisador Descendente Recursivo Feito a mão O que fazer quando acha um erro?!?