Construção de Compiladores

Slides:



Advertisements
Apresentações semelhantes
Software Básico Silvio Fernandes
Advertisements

ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Avaliador de Expressões
Construção de Aplicativos Computacionais METEOROLOGIA
Algoritmos de manipulação de estruturas elementares de dados
Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha
Estrutura de Dados e Algoritmos e Programação e Computadores II
Software Básico Silvio Fernandes
ESTRUTURAS DO TIPO FILA
Universidade Federal do Pará Serviço Público Federal Centro de Ciências Exatas e Naturais Departamento de Informática Abril/2001.
Compiladores Prof. Yandre Maldonado Compiladores - Prof. Yandre - 1.
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Prof. Heloise Manica Paris Teixeira
Análise Sintática - Continuação
Monitores.
JavaCC e JJTree Geração de compiladores implementados em Java
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Análise Sintática Ascendente
Análise Léxica Supondo o trecho de programa abaixo:
Construção de Compiladores
Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Verificação de Tipos.
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
7 Abstração Genérica Unidades genéricas e instanciação.
Estrutura de dados Busca
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Departamento de Estatística e Informática
PROGRAMAÇÃO I UNIDADE 1.
Unidade 3 Controle de Concorrência
Aula prática 13 Orientação a Objetos – C++ Parte 1
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Denise Guliato Faculdade de Computação – UFU
Material Didático Proposto 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Comissão para Coordenação das Atividades Pedagógicas.
Eric, Fabrício, João Vicente
Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC
Estrutura de Dados Unidade 6 Simulação do exercício 6.2 Elaborada por Mauricio Falvo.
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Denise Guliato Faculdade de Computação – UFU
O Processo de Compilação
Teoria e Implementação de Linguagens Computacionais – IF688
Lógica de Predicados Semântica.
Verificação de Tipos e Escopos
Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Augusto Sampaio e Paulo Borba Centro de Informática
Geração de Código Intermediário
Modelos de Paradigmas de programação
Computação Eletrônica
Ambiente de Execução - Rotinas
Análise Léxica.
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por.
Analise Semântica aula-10-analise-semântica.pdf.
Analisador Léxico Prof. Alexandre Monteiro
Projeto de Linguagens de Programação
Material Didático Proposto 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Comissão para Coordenação das Atividades Pedagógicas.
Mas para que serve um analisador sintático? Verificar se a estrutura gramatical do programa está correta Escrito de outra forma: O texto segue as regras.
COMPILADORES 04 Prof. Marcos.
Semântica de Linguagens de Programação
Geração de Código Fase final do compilador
Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção.
Sintaxe de uma Linguagem
Analisador sintático: Tipos de análises sintáticas
Estrutura de dados Pilhas e filas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Análise Contextual Mauro Araújo Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal de Pernambuco.
Transcrição da apresentação:

Construção de Compiladores Análise Semântica Exemplos sob a Perspectiva da Implementação

Análise Semântica Abre escopo Fechar escopo

Análise Semântica pilhaEsc.push(“$”); Procedimento analisador_sintático { pilhaEsc = new Pilha(); obtenha_símbolo(); PROG(); } Procedimento PROG { se simbolo_lido.token != “Programa” então ERRO(“falta programa”); senão { pilhaEsc.push(“$”); obtenha_símbolo(); se simbolo_lido.tipo == IDENT então pilhaEsc.add(simbolo_lido.token); se simbolo_lido.token == “;” então DECL(); … }

Análise Semântica 8 pilhaEsc = new Pilha();

Análise Semântica 8 pilhaEsc.push(“$”); $

Análise Semântica 8 pilhaEsc.push(exemplo); exe.. simbolo_lido.token $

Análise Semântica 8 a pilhaEsc.push(a); exe.. $

Análise Semântica 8 b a pilhaEsc.push(b); exe.. $

Análise Semântica 8 p b a pilhaEsc.push(b); exe.. $

Análise Semântica 8 $ p b a pilhaEsc.push(“$”); exe.. $

Análise Semântica 8 x $ p b a pilhaEsc.push(x); exe.. $

Análise Semântica 8 b x $ p b a pilhaEsc.push(b); exe.. $

Análise Semântica 8 c b x $ p b a pilhaEsc.push(c); exe.. $

Análise Semântica $ pilhaEsc.procurar(b); Observação 1: $ 8 c b x $ p b a pilhaEsc.procurar(b); Observação 1: Note que a pilha retorna a referência correta exe.. $ Observação 2: Como saber se identificar é declarado ou usado?

Análise Semântica pilhaEsc.procurar(b); Observação 2: x  0; … se simbolo_lido.tipo == IDENT então { se (x==0) pilhaEsc.add(simbolo_lido.token); senão pilhaEsc.procurar(simbolo_lido.token); obtenha_símbolo(); } se simbolo_lido.token == BEGIN então x++; se simbolo_lido.token == END então x--; pilhaEsc.procurar(b); Observação 2: Como saber se identificar é declarado ou usado?

Análise Semântica 8 c b x $ p b a pilhaEsc.procurar(x); exe.. $

Análise Semântica 8 c b x $ p b a pilhaEsc.procurar(y); exe.. $ ERRO

Análise Semântica $ While (topo != “$”) pilhaEsc.pop() 8 c b x $ p b a While (topo != “$”) pilhaEsc.pop() pilhaEsc.pop() // retirar $ exe.. $

Análise Semântica Observação 3: $ $ E o identificador do programa? c b 8 c b x $ exemplo; p b a exe.. $

Análise Semântica Observação 4: ERRADO Como fechar o escopo? Procedimento COM_COMP { se simbolo_lido.token != “begin” então; ERRO(“falta begin”); senão { obtenha_símbolo(); COM_OPC(); se simbolo_lido.token != “end” então ERRO(“falta end”); senão x--; fecharEscopo(); … } ERRADO

Análise Semântica Observação 4: C := 10; Como fechar o escopo? Procedimento COM_COMP { se simbolo_lido.token != “begin” então ERRO(“falta begin”); senão { obtenha_símbolo(); COM_OPC(); se simbolo_lido.token != “end” então ERRO(“falta end”); senão x--; se (x == 0) então fecharEscopo(); … } fecharEscopo C := 10;