Construção de Compiladores

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Software Básico Silvio Fernandes
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 06: Funções.
Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Prof. Yandre Maldonado e Gomes da Costa
Prof. Heloise Manica Paris Teixeira
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Pesquisa em Memória Primária
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Programação II Estruturas, uniões e enumerações
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Análise Léxica Supondo o trecho de programa abaixo:
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
Arquitetura de Computadores
Aula 6 Subprogramas Universidade do Vale do Rio dos Sinos
PROGRAMAÇÃO ou LINGUAGEM C?
Robson Godoi / Sandra Siebra
Ponteiros.
Lista Encadeada Circular Lista Duplamente Encadeada
Listas Encadeadas.
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Análise Semântica e Representação Intermédia
Listas Lineares Estrutura de Dados.
Departamento de Estatística e Informática
Aula prática 13 Orientação a Objetos – C++ Parte 1
Linguagem de Programação II Parte VII
Linguagem de Programação II Parte IX
INTELIGÊNCIA ARTIFICIAL
Eric, Fabrício, João Vicente
Implementação de FILAS com Alocação Dinâmica
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
SISTEMAS OPERACIONAIS
Tipos de Dados Paradigmas de Programação
Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Projeto de Banco de Dados
DESIGN E COMUNICAÇÃO MULTIMÉDIA 2011 / 2012 DESIGN E COMUNICAÇÃO MULTIMÉDIA 2011 / 2012 FORMADOR Gonçalo Miguel MÓDULO 25. Introdução ao ActionScript 3.0.
Estruturas de Dados Aula 9: Listas (parte 1)
Ambiente de Execução - Rotinas
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Capítulo VIII Ambientes de Execução
Algoritmos e Estrutura de Dados I Jean Carlo Mendes
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Faculdade Pernambucana - FAPE Setembro/2007
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
Objetivos Ao concluir esta Disciplina espera-se que os alunos sejam capazes de: Distinguir os conceitos de Estrutura e Dados; Compreender o que são, como.
Estruturas de Dados Murilo Salgado Razoli.
Estrutura de Dados Aula 3 - Listas
Arrays Outline 7.1 Introdução 7.2 Arrays 7.3 Declarando e Criando Arrays 7.4 Exemplos usando arrays 7.5 Ordenando arrays 7.6 Procurando em.
Análise Contextual Mauro Araújo Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal de Pernambuco.
Estrutura de Dados Prof. André Cypriano M. Costa
Sistemas Operacionais Sistemas de Arquivos Prof. José Queiroz - ZEQUE.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

Construção de Compiladores Análise Semântica Tabela de Símbolos

Tabela de Símbolos Conceitos iniciais Usada para guardar informações sobre os identificadores declarados em um programa TS é pesquisada cada vez que um identificador é encontrado no programa fonte A gerência da TS de um compilador deve ser implementada de forma a permitir inserções, eliminações e consultas da forma mais eficiente possível.

Tabela de Símbolos Entrada na tabela de símbolos Cada entrada é a declaração de um nome. Formato pode não ser uniforme As informações armazenadas para cada nome podem variar de acordo com o tipo/uso do nome Entradas podem ser implementadas como registros ("record" ou "struct") contendo campos (nome, tipo, classe, tamanho, escopo, etc.) que a qualificam. Se o número máximo de caracteres em um nome for limitado e pequeno Alocação estática Se o número máximo e limite não determinados Alocação dinâmica

Tabela de Símbolos Implementação da tabela de símbolos Para linguagens de um só nível (sem estrutura de blocos) Lista linear de registros Novos nomes são inseridos no início e a pesquisa sempre se processa do início para o fim Para linguagens com estrutura de blocos O escopo das variáveis terá que ser observado

Tabela de Símbolos Exemplo:

Tabela de Símbolos Um identificador pode estar sendo declarado ou sendo usado pelo programador. Se estiver sendo declarado temos de analisar duas situações: Em uma linguagem sem estrutura de blocos, devemos pesquisar a TS do início até o fim Em uma linguagem com estrutura de blocos, devemos pesquisar a parte da TS aos símbolos do bloco corrente (mais interno) Se estiver sendo usado, devemos pesquisar a TS do início até o fim Se não for encontrado é um símbolo indefinido.

Tabela de Símbolos E quando existem dois identificadores iguais? Para localizar um identificador a busca começa pelo topo da pilha

Tabela de Símbolos Operações sobre uma tabela Formas de implementação Definição de uma tabela vazia Inserção de um identificador/registro na tabela (declaração) Procura de um identificador na tabela (gerar erro se não achado) Entrada em um novo escopo Saída do escopo atual Formas de implementação Principal diferença está na forma de manipular o escopo Usar uma estrutura de dados persistente (escopos preservados) Usar uma estrutura de dados destrutiva

Tabela de Símbolos Estrutura de dados persistente Implementação: utilizando várias listas Estrutura de dados composta por <apontador,lista> Cada bloco tem a sua própria lista Tabela 1 2 3 7 Apontador Lista (4) a b p q 4 5 6 Apontador Lista (1) x b c 8 9 10 Apontador Lista (3) c d r 11 12 13 Apontador Lista (2) y e f

Tabela de Símbolos Estrutura de dados persistente Implementação: utilizando várias listas Operações: Definição: árvore de tuplas vazia Declaração: verifica se a lista atual já possui símbolo Procura: percorre a lista atual e as superiores utilizando o apontador Entrada: cria nova tupla e atribui apontador com referência para lista anterior Saída: usa apontador para voltar a lista anterior

Tabela de Símbolos Estrutura de dados destrutiva Apenas os escopos ativos são preservados Implementação I: utilizando <nível,deslocamento>

Tabela de Símbolos Estrutura de dados destrutiva Implementação I: utilizando <nível,deslocamento> b p identificador deslocamento nível tipo a c integer x proc tipo? 1 2 3

Tabela de Símbolos Estrutura de dados destrutiva Implementação I: utilizando <nível,deslocamento> Operações: Definição: lista vazia Declaração: ver se escopo (nível) atual já possui símbolo Procura: percorre toda a lista Entrada: incrementa o nível, zera o deslocamento e adiciona as novas entradas Saída: elimina todos as entradas do escopo corrente e decrementa o nível

Tabela de Símbolos Estrutura de dados destrutiva Operações: Implementação II: utilizando pilha Operações: Definição: pilha vazia Declaração: pesquisa na lista até Mark Procura: percorre toda a pilha Entrada: empilha um Mark seguido por todos os identificadores do bloco atual Saída: elimina todos as entradas da pilha até encontrar um Mark, o qual também é eliminado c b x Mark p b a Mark

Tabela de Símbolos Problema de eficiência Todas as técnicas possuem o mesmo problema de eficiência Procura é realizada por busca linear No pior caso, o tempo de procura é proporcional ao tamanho da tabela de símbolos É comum que programas usem bibliotecas Geralmente centenas de identificadores são definidos em tais bibliotecas Exemplo: Canvas3D canvas = new Canvas3D(config); Hashing é a geração de um número identificador baseado no conteúdo binário da entrada processamento Identificador em um array

Tabela de Símbolos Espaços de identificadores compartilhados X separados Em algumas linguagens funções e variáveis no mesmo escopo podem ter o mesmo nome C permite Pascal não permite Contexto deixa claro se uma variável ou função é usada Nomes de função e variáveis são tratados de forma separada Quando isso não acontece temos um espaço de identificadores compartilhado Espaços de nomes pode ser compartilhados ou separados para todos os tipos de identificadores Variáveis, funções, tipos, exceções, construtores, classes, etc.