Compiladores INTRODUÇÃO. www.pedrofreire.com



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

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

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa

COMPILADORES E INTERPRETADORES

PROGRAMAÇÃO JAVA. Parte 1

Interpretação e Compilação de Linguagens de Programação

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

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

Compiladores Aula 1. Celso Olivete Júnior.

Sintaxe e Semântica. Fases da Compilação. programa fonte

Conceitos básicos de programação

Aula teórica 3. Tema 3.Computadores e linguagens Linguagens de Programação Compilação e linkagem LP Java. Preparado por eng.

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

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

FAP - Faculdade de Apucarana Curso de Sistemas de Informação RESUMO EXPANDIDO DE TRABALHO DE CONCLUSÃO DE CURSO -

Introdução à Programação 2006/07. Computadores e Programação

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

O Processo de Programação

FundamentosemInformática

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

Capítulo 8. Software de Sistema

Curso Técnico em Redes

ESTUDO SOBRE AS LINGUAGENS DE PROGRAMAÇÃO HOSPEDEIRAS SUPORTADAS PELA FERRAMENTA HTML. Aluno: Rodrigo Ristow Orientador: Wilson Pedro Carli

CURSO DE PROGRAMAÇÃO EM JAVA

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

Introdução. Capítulo Breve sinopse

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

RAFF Um Compilador para Facilitar o Aprendizado de Algoritmos

1. NÍVEL CONVENCIONAL DE MÁQUINA

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 2. Cursos de Computação

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

Linguagens de. Aula 02. Profa Cristiane Koehler

Conceitos Básicos de C

Universidade do Estado da Bahia UNEB Departamento de Ciências Exatas e da Terra - Campus I

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

2.1. PHP - Introdução

Java. Marcio de Carvalho Victorino

Programação científica C++

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Breve Histórico & Conceitos Básicos

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

Processamento de Dados

Estrutura de Dados. Ricardo José Cabeça de Souza Parte 1

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

Figura 1 - O computador

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

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

JSP trata-se de uma tecnologia que possibilita o desenvolvimento de páginas web dinâmicas utilizando todas as potencialidades do Java como linguagem

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

Programação de Computadores III

Análise semântica. Análise Semântica. Estrutura de um compilador. Anotação da árvore sintática. Tipos de comunicação de atributos?

Programação Web Prof. Wladimir

Introdução. Sumários. Objectivos da cadeira. História das linguagens de programação. Classificação das Linguagens de programação

O Hardware e o Software do Computador

IFTO LÓGICA DE PROGRAMAÇÃO AULA 01

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

Curso de Eng. Informática Linguagens de Programação. C Sharp University Data Processing. (C Sharp Universidade de Processamento de Dados) Docente:

Computador Máquina que processa uma grande quantidade de dados com rapidez e precisão.

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Introdução à Arquitetura de Computadores IFES Campus Serra

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Fundamentos de Microinformática. Ricardo José Cabeça de Souza 2010 Fundamentos 3

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

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

Linguagem de Programação Introdução a Linguagem Java

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

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

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

3. O NIVEL DA LINGUAGEM DE MONTAGEM

O modelo do computador

Linguagem de Programação I

Um sistema SMS 1 simplificado

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

Codificação da informação. Execução do programa. Codificação binária. Representação de inteiros positivos. Representação binária

Introdução a Computação

Capítulo 1. Linguagens e processadores

Introdução à Arquitetura de Computadores

Programação de Computadores

Sistemas de Bases de Dados

XML e Banco de Dados de Internet. Tópicos Especiais em Tecnologia da Informação Profa. Késsia R. C. Marchi

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

AMBIENTE DE PROGRAMAÇÃO PYTHON

PHP AULA1. Prof. Msc. Hélio Esperidião

Web Browser como o processo cliente. Servidor web com páginas estáticas Vs. Aplicações dinâmicas para a Web:

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Tecnologia da Informação. Visão Geral sobre Informática

Software Básico (INF1018)

AULA Uma linguagem de programação orientada a objetos

Introdução aos Sistemas Operativos

2. O AMBIENTE DE PROGRAMAÇÃO EM C

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas)

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

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

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

Transcrição:

Compiladores INTRODUÇÃO www.pedrofreire.com

Este documento tem alguns direitos reservados: Atribuição-Uso Não-Comercial-Não a Obras Derivadas 2.5 Portugal http://creativecommons.org/licenses/by-nc-nd/2.5/pt/ Isto significa que podes usá-lo para fins de estudo. Para outras utilizações, leia a licença completa. Crédito ao autor deve incluir o nome ( Pedro Freire ) e referência a www.pedrofreire.com. www.pedrofreire.com 2

INTRODUÇÃO www.pedrofreire.com 3

O que são Um compilador prepara um ficheiro de texto com código-fonte para execução. C / C++ Java C# PHP Perl O resultado final pode ser outro ficheiro, preparado para execução direta pelo processador (código máquina) ou preparado para execução por uma máquina virtual dedicada (byte code ou CIL), ou uma representação em memória para interpretação. Compilador Byte code CIL Representação em memória www.pedrofreire.com 4

Exemplos de uso Compiladores C / C++ / Objective C Java é um exemplo de uma linguagem com um compilador que não gera código executável. Gera Java Byte Codes que são depois interpretados por outra aplicação. Pascal Intérpretes/Interpretadores JavaScript PHP XML / HTML / CSS Rich Text Format (RTF) Postscript Tradutores de linguagens Java C# Extractores de informação textual www.pedrofreire.com 5

Analisador léxico Etapas de compilação. www.pedrofreire.com 6

Pré-processador Analisador léxico Etapas de compilação. O pré-processador transforma um ou mais ficheiros de código-fonte noutro ficheiro de código-fonte. É usado em linguagens como C para implementar #include, #define e outras diretivas semelhantes. O linker liga um ou mais ficheiros de código máquina (ficheiros objecto, um por cada ficheiro de código-fonte) num último ficheiro executável pronto para execução. Compilador Assembler Linker www.pedrofreire.com 7

Analisador léxico Etapas: Analisador léxico Também conhecido como scanner. Lê a sequência de caracteres do ficheiro fonte original e agrupa-os em sequências significativas chamadas lexemas. Constrói tokens para cada lexema que são um par com o nome do token e um atributo que o ajuda a especificar. www.pedrofreire.com 8

Analisador léxico Etapas: Também conhecido como parser. Lê a sequência de tokens produzida pela etapa anterior e produz uma árvore que representa a sua estrutura gramatical. www.pedrofreire.com 9

Analisador léxico Etapas: Lê a árvore gerada pela etapa anterior e verifica-a para consistência semântica de acordo com a definição da linguagem (e.g.: verificação de consistência e conversão de tipos de dados). www.pedrofreire.com 10

Analisador léxico Etapas: Lê a árvore gerada pela etapa anterior e transforma-a numa sequência de instruções de uma máquina hipotética. Esta máquina hipotética permite que as etapas seguintes sejam as mesmas para todas as versões do compilador para qualquer tipo de plataforma. www.pedrofreire.com 11

Analisador léxico Etapas: Lê a sequência de instruções gerada pela etapa anterior e optimiza-a de acordo com algum objectivo (código mais rápido ou mais pequeno). Algumas das optimizações triviais executadas nesta fase são a remoção de variáveis temporárias desnecessárias geradas pela etapa anterior e cálculo antecipado de expressões e outras operações constantes. www.pedrofreire.com 12

Analisador léxico Etapas: Lê a sequência de instruções gerada pela etapa anterior e transforma-a numa sequência de instruções da plataforma destino desejada. www.pedrofreire.com 13

Analisador léxico Etapas: Lê a sequência de instruções gerada pela etapa anterior e optimiza-a de acordo com algum objectivo (código mais rápido ou mais pequeno). Algumas das optimizações triviais executadas nesta fase são a optimização do uso de registos do processador e a reordenação de instruções para aproveitar oportunidades de paralelização (e.g.: pipelining). www.pedrofreire.com 14

lex / flex Analisador léxico Ferramentas de geração de compiladores. yacc / bison O lex (ou a sua versão opensource, flex) gera scanners. O yacc (ou a sua versão opensource, bison) gera parsers. São ferramentas com décadas de uso, mas hoje em dia temos outras que nos geram em simultâneo um scanner e um parser (e.g.: ANTLR). www.pedrofreire.com 15

Hiperligações úteis BIBLIOGRAFIA www.pedrofreire.com 16

Compilers: Principles, Techniques and Tools 2 nd edition (2ª edição) Alfred Aho, Monica Lam, Ravi Sethi, Jeffrey Ullman Addison Wesley http://dragonbook.stanford.edu Compiler Construction Toolkit http://hackingoff.com/compilers/ GNU Flex http://www.gnu.org/software/flex/ GNU Bison http://www.gnu.org/software/bison/ ANTLR http://www.antlr.org www.pedrofreire.com 17