Aula 14 1 Análise Sintáctica Compiladores, Aula Nº 14 João M. P. Cardoso.

Slides:



Advertisements
Apresentações semelhantes
Python: Recursão Claudio Esperança.
Advertisements

Software Básico Silvio Fernandes
Paulo Marques Hernâni Pedroso
II – Análise léxica DEI Papel do analisador léxico.
III – Análise sintáctica
I - Noções dum compilador Partes dum compilador Ferramentas de construção de compiladores Bibliografia aconselhada: –Aho, Sethi e Ullman – Cap. 1 LFA 1999/2000.
III – Análise sintáctica
III – Análise sintáctica
Aula 10 Algoritmos de Busca
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
Software Básico Silvio Fernandes
Análise Sintática - Continuação
JavaCC e JJTree Geração de compiladores implementados em Java
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Listas Ligadas – Conceitos Avançados
YACC.
Análise Sintática Ascendente
Relações em uma Gramática
Linguagem de Prog. e Programas
André Luis Meneses Silva
Laboratório de Programação de Computadores II Aula 1 2S/2009.
Prof. Bruno Moreno Aula 4 – 11/03/2011
Análise Semântica e Representação Intermédia
Departamento de Estatística e Informática
Análise léxica e sintática
Pesquisa em Memória Primária
Determinar o tipo de gramática
Compiladores, Aula Nº 5 João M. P. Cardoso
Compiladores, Aula Nº 11 João M. P. Cardoso
Compiladores, Aula Nº 7 João M. P. Cardoso
Compiladores, Aula Nº 19 João M. P. Cardoso
Compiladores, Aula Nº 9 João M. P. Cardoso
Tipos Abstratos de Dados
1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Compiladores, Aula Nº 10 João M. P. Cardoso
Análises léxica e sintática
Mayerber Carvalho Neto
Pilhas Profa. Nádia Félix.
Análise Léxica.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Analise sintática aula-07-analise-sintática.pdf.
Listas Simplesmente Encadeadas
Análises léxica e sintática
Aula Prática 1 Monitoria IP/CC (~if669). Verificação Dinâmica de Tipos Métodos de superclasses e subclasses: Uso de métodos de subclasses quando se é.
Tratamento de Exceções
Projeto de Tradutor Preditivo. Introdução Introdução Esquemas L-atribuidos são reconhecidos por analisadores Top-Down. Entre estes analisadores, se encontra.
Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso.
Compiladores.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Aula 18 1 Análise Sintáctica Compiladores, Aula Nº 18 João M. P. Cardoso.
Aula 10 Algoritmos de Busca
Estruturas de Dados I Segundo Período de 2008 Gabarito da Primeira Prova.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Prof. Hilton Cardoso Marins Junior
AST no ANTLR Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza
Análise Sintática de Descida Recursiva
Aula 4©João M. P. Cardoso 1 Anatomia de um Compilador Compiladores, Aula Nº 4 João M. P. Cardoso.
COMPILADORES 04 Prof. Marcos.
Um Tradutor Dirigido por Sintaxe Simples
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da profa. Patrícia Jaques.
Algoritmo de Huffman.
Analisador sintático: Tipos de análises sintáticas
Análise Semântica e Representação Intermédia
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Estrutura de Dados Prof. André Cypriano M. Costa
Estrutura de Dados Prof. André Cypriano M. Costa
Compiladores, Aula Nº 13 João M. P. Cardoso
Transcrição da apresentação:

Aula 14 1 Análise Sintáctica Compiladores, Aula Nº 14 João M. P. Cardoso

Aula 14 2 Gramática Modificada Pedaço da gramática original Term  Term “*” INT Term  Term “/” INT Term  INT Pedaço da gramática modificada Term  INT Term’ Term’  “*” INT Term’ Term’  “/” INT Term’ Term’  

Aula 14 3 Analisador Sintáctico Construído Manualmente Um procedimento por símbolo não-terminal Esse procedimento examina o símbolo corrente de entrada Chama recursivamente procedimentos para RHS da produção escolhida Os procedimentos retornam verdadeiro se a análise sintáctica foi bem sucedida e retornam falso em caso contrário

Aula 14 4 Exemplo Procedimento para o símbolo não- terminal Term: Term() { if (token == INT) { token = NextToken(); return TermPrime(); } else return false; } Produções para o símbolo não-terminal Term: Term  INT Term’ A função NextToken() avança um token na sequência de tokens gerada pela análise lexical e retorna o token nessa posição.

Aula 14 5 Exemplo Procedimento para o símbolo não-terminal Term’: TermPrime() { if((token == ‘*’) || (token == ‘/’)) { token = NextToken(); if (token == INT) { token = NextToken(); return TermPrime(); } else return false; else return true; }

Aula 14 6 Exemplo Pseudo-código para a parte do programa responsável pela análise sintáctica:... token = NextToken(); Term();...

Aula 14 7 Construção da Árvore Sintáctica Cada procedimento retorna a secção da árvore sintáctica para a parte da String que analisou Utilizar excepções para tornar clara a estrutura do código (outra forma será utilizar uma função de erro) Em geral, podemos ajustar o algoritmo de análise sintáctica para satisfazer objectivos diferentes Tipicamente, produz AST em vez de árvore sintáctica concreta

Aula 14 8 Construção da Árvore Sintáctica para o exemplo Com geração de excepções: Term() { if (token == INT) { oldToken = token; token = NextToken(); node = TermPrime(); if (node == NULL) return oldToken; else return new TermNode(oldToken, node); } else throw SyntaxError; }

Aula 14 9 Construção da Árvore Sintáctica para o exemplo Com geração de excepções: TermPrime() { if ((token == ‘*’) || (token == ‘/’)) { first = token; next = NextToken(); if (next == INT) { token = NextToken(); return new TermPrimeNode(first, next, node); } else throw SyntaxError; } else return NULL; }

Aula Construção da Árvore Sintáctica para o exemplo Sem geração de excepções Term() { if (token == INT) { oldToken = token; token = NextToken(); node = TermPrime(); if (node == NULL) return oldToken; else return new TermNode(oldToken, node); } else error(); } TermPrime() { if ((token == ‘*’) || (token == ‘/’)) { first = token; next = NextToken(); if (next == INT) { token = NextToken(); return new TermPrimeNode(first, next, TermPrime()); } else error(); } else return NULL; }

Aula Árvore Sintáctica para 2*3*4 Term INT 2 Term’ INT 3 * Term’ INT 4 * Term’  Term INT 3 * Term INT 4 * INT 2 Árvore Sintáctica Concreta AST desejada