Geração e Otimização de Código



Documentos relacionados
Geração de código intermediário. Novembro 2006

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

INE5317 Linguagens Formais e Compiladores. AULA 2: Es trutura geral dos Compiladores

UNIVERSIDADE DO OESTE DE SANTA CATARINA CAMPUS DE SÃO MIGUEL DO OESTE

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Introdução às Linguagens de Programação

3. O NIVEL DA LINGUAGEM DE MONTAGEM

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa

COMPILADORES E INTERPRETADORES

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Análises Geração RI (representação intermediária) Código Intermediário

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Organização e Arquitetura de Computadores I. de Computadores

Protótipo de Gerador de Código Executável no Ambiente FURBOL

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Resolução de problemas e desenvolvimento de algoritmos

Processamento de Dados

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

Organização e Arquitetura de Computadores I

Introdução à Linguagem Java

Dadas a base e a altura de um triangulo, determinar sua área.

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Aula 26: Arquiteturas RISC vs. CISC

Conceitos Importantes:

Síntese. Compiladores. Geração de código intermediário. Linguagens Intermediárias. Modelo Clássico. Linguagens Intermediárias. Código intermediário

A FÓRMULA DE CONVERSÃO ENTRE AS UNIDADES É: F = 1.8 C

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

Introdução à Lógica de Programação

Introdução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES

Arquiteturas RISC. (Reduced Instructions Set Computers)

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Máquinas Multiníveis

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de:

ALP Algoritmos e Programação. . Linguagens para Computadores

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

ARQUITETURA DE COMPUTADORES

Estruturas de Dados Pilhas, Filas e Deques

Curso Técnico em Redes

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

Organização e Arquitetura de Computadores I

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 1

Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)

Web site. Objetivos gerais. Introdução. Profa. Patrícia Dockhorn Costa

BARRAMENTO DO SISTEMA


Orientação a Objetos

DAS5102 Fundamentos da Estrutura da Informação

1. NÍVEL CONVENCIONAL DE MÁQUINA (Cont.) 1.3. INSTRUÇÕES Conceitos Básicos

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

Árvores Binárias Balanceadas

Módulo 4. Construindo uma solução OLAP

1.1. Organização de um Sistema Computacional

Máquina Multinível. Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa.

1. NÍVEL CONVENCIONAL DE MÁQUINA

Admistração de Redes de Computadores (ARC)

Exercício de Revisão Linguagem C

Linguagem de Programação I

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

Programação científica C++

Fundamentos de Sistemas Operacionais

Sistemas Operacionais

INF1004 e INF1005: Programação 1. Introdução à Programação

Informática I. Aula 5. Aula 5-13/05/2006 1

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Introdução à Arquitetura de Computadores IFES Campus Serra

Introdução a Informática. Prof.: Roberto Franciscatto

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2

Linguagens de. Aula 02. Profa Cristiane Koehler

3 Sistemas de Numeração:

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

[RÓTULO:] MNEMÔNICO [OPERANDOS] [;COMENTÁRIO]

Programação de Computadores III

Sistema de Arquivos. Ambientes Operacionais. Prof. Simão Sirineo Toscani

Software Básico (INF1018)

Linguagens de Programação Aula 10

Um compilador é um programa que lê um programa escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num programa equivalente

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Revisão de Banco de Dados

Arquitetura de Computadores. Sistemas Operacionais IV

Introdução à Arquitetura de Computadores

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Tarefa Orientada 16 Vistas

Organização de Computadores 1

Figura 1 - O computador

Universidade de São Paulo São Carlos, SP Instituto de Ciências Matemáticas e de Computação. SSC0206 1/2010 Introdução à Compilação

Certificado Digital. Manual do Usuário

Transcrição:

Geração e Otimização de Código Representação de código intermediária Código de três endereços, P-código Técnicas para geração de código Otimização de código Prof. Thiago A. S. Pardo 1 Estrutura geral de um compilador programa-fonte analisador léxico Tabela de símbolos analisador sintático Tabela de palavras e símbolos reservados analisador semântico gerador de código intermediário otimizador de código Manipulação de erros gerador de código programa-alvo dados de entrada saída 2 1

Geração de código A geração de código é uma das tarefas mais complexas do compilador Depende da linguagem-fonte, da máquina-alvo e seu ambiente de execução e sistema operacional Portanto, é conveniente dividir esta etapa em etapas menores Geração de código intermediário, geração de código objeto, otimização Compilação de várias passagens 3 Geração de código intermediário Até o momento, temos utilizado a árvore sintática (mesmo que implícita) como representação interna por excelência, juntamente com as informações da tabela de símbolos Entretanto, ela não corresponde em nada com o código-objeto que queremos gerar, além de poder ser muito complexa Pode ser interessante gerar um código mais próximo do objeto antes de fazer a tradução final Código intermediário 4 2

Geração de código intermediário Características Pode assumir muitas formas Em geral, é alguma forma de linearização da árvore sintática Pode ser muito abstrato (como a árvore sintática) ou mais próximo do código-objeto Pode ou não usar informações sobre a máquina-alvo e o ambiente de execução (como disponibilidade de registradores, tamanho dos tipos, etc.) Pode ou não incorporar informações da tabela de símbolos (como escopo, níveis de aninhamento, etc.), dispensando ou não a tabela na geração de código-objeto 5 Geração de código intermediário Vantagens Bom para quando se quer produzir código-objeto extremamente eficiente Se for genérico o suficiente, pode ser a base para geração de código para várias máquinas Aumenta a portabilidade (o tradutor do código intermediário para o objeto ainda é necessário) 6 3

Geração de código intermediário Veremos aqui as características gerais de 2 formas populares de código intermediário Código de três endereços P-código Também possuem diversas formas distintas na literatura e na prática de compiladores 7 Código de três endereços 8 4

Código de três endereços Instrução mais básica: x = y op z O operador op é aplicado a y e z e o resultado é armazenado em x Origem do nome desse código: três endereços de memória envolvidos no cômputo y e z (mas não x) podem ser constantes ou literais, na realidade Exemplo 2*a+(b-3) t1 = 2 * a t2 = b - 3 t3 = t1 + t2 9 Código de três endereços Atenção É necessário que se gerem variáveis temporárias (t1, t2 e t3 no exemplo) com nomes diferentes dos possíveis identificadores no programa As variáveis podem ser mantidas na memória ou em registradores As variáveis temporárias correspondem aos nós internos da árvore sintática subjacente à expressão 2*a+(b-3) t1 = 2 * a t2 = b - 3 t3 = t1 + t2 + * - 2 a b 3 10 5

Código de três endereços No exemplo, o código intermediário corresponde à linearização da árvore quando ela é percorrida em pós-ordem Qualquer alternativa é possível, dependendo somente da semântica da linguagem Dependendo da alternativa, o código intermediário pode mudar (por exemplo, faz-se primeiro a subtração e depois a soma) 2*a+(b-3) t1 = 2 * a t2 = b - 3 t3 = t1 + t2 + * - 2 a b 3 11 Código de três endereços Para acomodar todas as possibilidades de uma linguagem de programação, o código precisa ser mais flexível Nem sempre se têm três elementos Essa é uma das razões da diversidade de formas de código intermediário encontradas Por exemplo, para operadores unários, pode-se ter o código t2 = -t1 Outras possibilidades: cópia, salto incondicional e condicional, índices, endereços 12 6

Código de três endereços Um exemplo de uma linguagem fictícia e seu possível código intermediário 13 Código de três endereços Estrutura de dados Nem sempre os códigos são armazenados textualmente como no exemplo Listas encadeadas e arranjos podem ser usadas Em vez de armazenar nomes de identificadores, pode ser interessante guardar ponteiros para os identificadores na tabela de símbolos (caso ela esteja sendo usada) Muitas vezes, a noção de tuplas é utilizada (implementadas via registros, por exemplo) Haverá, no máximo, quádruplas, sendo que algumas posições podem ficar vazias 14 7

Código de três endereços Exemplo de representação em tuplas 15 P-código 16 8

P-código Um pouco da história Criado como código-alvo de montagem padrão para os compiladores de PASCAL dos anos 70 e 80 Criado como código para uma máquina hipotética chamada P-máquina, sendo que diversos montadores para máquinas reais foram disponibilizados Aumento da portabilidade Foi redescoberto como um bom código intermediário 17 P-código Assume que O ambiente de execução é baseado em pilhas Dados do ambiente de execução são conhecidos (como tamanho de tipos) Exemplo de P-código para 2*a+(b-3) 18 9

P-código Outro exemplo: x:=y+1 19 P-código Exemplo para o programa fictício completo 20 10

P-código Exemplo para o programa fictício completo 21 P-código Em relação ao código de três endereços Mais próximo do código de máquina Exigem menos endereços (quase todas as instruções vistas até agora tinham 1 ou nenhum endereço) Menos compacto (isto é, tem mais instruções) Não é auto-suficiente, pois assume a existência de uma pilha Pode ser representado e implementado da mesma forma que o código de três endereços 22 11