COMPILAÇÃO. Ricardo José Cabeça de Souza

Documentos relacionados
Compiladores. Conceitos Básicos

Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação

Compiladores. Introdução à Compiladores

Compiladores I Prof. Ricardo Santos (cap 1)

Introdução a Ciência da Computação

PROGRAMAÇÃO I. Introdução

Ambiente de desenvolvimento

Programação: Compiladores x Interpretadores PROF. CARLOS SARMANHO JR

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

Linguagens de Programação Classificação

Introdução à Programação

Autômatos e Linguagens

Como construir um compilador utilizando ferramentas Java

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Projeto de Compiladores

Ferramentas Programação. UDESC - Prof. Juliano Maia 1

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Sistemas Operacionais

Métodos de implementação de linguagens. Kellen Pinagé

Linguagem de Programação

Arquitetura e Organização de Computadores. Compiladores e processamento

a) Computador b) Estrutura do sistema i. Hardware ii.software c) Linguagens de Programação i. Paradigmas e Programação 1.

Introdução à Computação: Máquinas Multiníveis

Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação

Linguagens de Programação Aula 3

Algoritmos e Programação

Algoritmos Computacionais

Linguagens de Programação

QUESTÃO 1 (0,6 ponto) Classifique os processadores de linguagens com relação aos tipos das linguagens-fonte e objeto.

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Síntese. Prof. Geovane Griesang

Conteúdo. Introdução a compiladores Tradução x Interpretação Processo de Compilação

Prof. Adriano Maranhão COMPILADORES

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Algoritmo de Programação. Aula1

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 06

SSC510 Arquitetura de Computadores 1ª AULA

Compiladores. Fabio Mascarenhas

Compiladores e Computabilidade

Linguagens de Programação Sistemas de Linguagens

Estrutura e Funcionamento dos Computadores (Conceitos Básicos)

INE5317 Linguagens Formais e Compiladores. Ricardo Azambuja Silveira INE-CTC-UFSC URL:

Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 1ª Parte Prof. Sandra Pais Soares

Algoritmos e Técnicas de Programação Introdução Givanaldo Rocha de Souza

Análise Sintática. Fabiano Baldo

Introdução à Computação

Algoritmos e Programação

Projeto de Algoritmos

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan

Analisador Léxico parte II

Aplicação. Programa Linguagem de Alto Nível. Programa em Linguagem Assembly. Programa em Linguagem Máquina

Métodos Computacionais

ORGANIZAÇÃO DE COMPUTADORES

GABARITO Questão a b c d e

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

Introdução ao Python. Programa Computacional

Introdução. Tradutores de Linguagens de Programação

A ferramenta make. A - Introdução. O C é orientado para a produção de aplicações informáticas de grande dimensão

Linguagens compiladas: C++ Fora do livro adoptado

2 Paradigmas de linguagens de programação João B. Rocha- Junior. As linguagens evoluem com o passar do tempo

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber 3/10/ :43 AM

Computadores e Programação (DCC/UFRJ)

INE5622 INTRODUÇÃO A COMPILADORES

As fases de um compilador

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18

Tratamento dos Erros de Sintaxe. Adriano Maranhão

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

UNIDADE 1 CONCEITOS BÁSICOS EM ALGORITMOS

Métodos Computacionais em Física Noções Básicas de Linguag

INTRODUÇÃO. Prof. Msc. Luis Filipe Alves Pereira 2015

Capítulo 1. Aspectos Preliminares

Linguagem C Princípios Básicos (parte 1)

Nível da Linguagem de Montagem

MAC2166 Introdução à Computação Aula 1 Como Funciona um Computador

IDES E PROGRAMAÇÃO. Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias

Introdução à Computação: Máquinas Multiníveis

Conceitos de Linguagens de Programação

Lembrando análise semântica. Compiladores. Implementação de esquemas de tradução L-atribuídos. Exemplo de implementação top-down (1)

Paradigmas de Programação

Processadores para computação de alto desempenho

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Organização e Arquitetura de Computadores INTRODUÇÃO

LISTA DE EXERCÍCIOS 01 INTRODUÇÃO À INFORMÁTICA

Outras Linguagens. Aulas 26 e 27. DECivil Departamento de Engenharia Civil, Arquitectura e Georrecursos

Sistemas Operacionais

Fundamentos de Sistemas Operacionais

9. Software de Sistema - Montadores (capítulo 9 do livro texto)

GFM015 Introdução à Computação

Introdução. Nível da Linguagem de Montagem. Linguagem de Montagem (2) Linguagem de Montagem (1) Linguagem de Montagem

Revisão de Programação em C++ Leandro Tonietto Estruturas de Dados em C++ Segurança da Informação

As fases de um compilador

Implementação de Linguagens

Arquitetura e Organização de computadores

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

CP Introdução à Informática Prof. Msc. Carlos de Salles

Linguagem de Montagem do NeanderX

Estrutura dos Sistemas Operacionais. Adão de Melo Neto

Programação Aplicada à Engenharia

Introdução a Programação

CPU. Funções: Componentes: Processamento; Controle. UC (Unidade de Controle); Registradores; ALU s, FPU s etc. Arquitetura de Computadores 3

Transcrição:

COMPILAÇÃO Ricardo José Cabeça de Souza www.ricardojcsouza.com.br

Programas Código-fonte escrito em linguagem de programação de alto nível, ou seja, com um nível de abstração muito grande, mais próximo do modo humano de se pensar Código executável que é um código feito numa linguagem de baixo nível de abstração, muito mais próxima do modo de funcionamento das máquinas do que do raciocínio humano Existem duas formas de se transformar um programa escrito em uma linguagem de alto nível em um código capaz de ser executado por um dispositivo computacional Compilador Interpretador

O programa escrito na linguagem fonte é traduzido para linguagem máquina e depois ligado e carregado para ser executado

Interpretação O programa fonte é traduzido e executado instrução a instrução, de modo interativo O Interpretador traduz cada instrução para uma representação interna e interpreta-a simulando o funcionamento do processador O interpretador aceita para além das instruções da linguagem, comandos para controlar o seu funcionamento

PROCESSO DE COMPILAÇÃO Processo de tradução de um código fonte escrito normalmente em uma linguagem de alto nível (de fácil entendimento por parte do programador) para uma linguagem de baixo nível Um compilador é um programa responsável por executar os processos de compilação

FASES DA COMPILAÇÃO Análise Léxica Primeira etapa da compilação A função do analisador léxico, também conhecido como scanner, é analisar todo o código fonte e produzir símbolos (tokens) que podem ser manipulados na etapa seguinte Nesta etapa são eliminados os espaços em branco e comentários Reconhecer as sequências de símbolos que representam uma unidade. P.e. o nome de uma variável, uma constante, uma palavra chave de uma instrução (while)

FASES DA COMPILAÇÃO Análise Sintática O analisador sintático (parsing) é quem dá significado às sequências de tokens criadas anteriormente Identifica a estrutura gramatical do programa e reconhece o papel de cada componente É normalmente construída uma árvore sintática do programa e uma tabela de símbolos, que identifica variáveis

FASES DA COMPILAÇÃO Geração do Código A geração de código pode englobar Análise semântica Geração de código intermediário Otimizadores Geração de código final

FASES DA COMPILAÇÃO Análise Semântica Esta etapa é responsável por analisar a semântica, ou significado, de cada elemento do código É ele quem encontra erros como, por exemplo, uma multiplicação entre tipos de dados diferentes

FASES DA COMPILAÇÃO Geração do Código Intermediário Nesta etapa ocorre a conversão da árvore sintática, criada na etapa 2, em uma representação intermediário do código fonte Processo de construir instruções da linguagem máquina (em assembly, normalmente) que simulam as instruções reconhecidas pelo analisador sintático

FASES DA COMPILAÇÃO Otimização do Código Nesta etapa o código é otimizado para uma determinada arquitetura (hardware e sistema operacional específico)

FASES DA COMPILAÇÃO Geração de Código Final Nesta ultima etapa da compilação, o arquivo executável (.exe) é criado, otimizado para aquela arquitetura

C++ Quando invocamos a compilação na nossa IDE(Integrated Development Environment) para cada arquivo C/C++ (arquivos.c, cpp, cc, etc) é executado o pré-processador (que executa as diretivas #ifdef, #include, substituições de macros, etc), e o resultado disso é um arquivo temporário com o código fonte pré-processado Em seguida é invocado o compilador que processa este arquivo, caso não ocorram erros é gerado o arquivo objeto (geralmente extensão obj ou.o) Após a geração de todos arquivos objetos é invocado o linker, que faz a linkagem de todos os arquivos objeto gerando finalmente o executável (exe no caso do windows) ou biblioteca dinâmica (dlls no Windows)

C++ Envolve três passos principais Pré-processador Linkagem

Pré Processador O pré-processador é a primeira etapa da compilação, pode ser ou não um programa separado do compilador, mas o que importa mesmo é que ele é o primeiro a tocar o código e cuida de algumas tarefas como: Junta linhas que foram separadas por sequências de escape. Remove comentários e os substitui por espaços em branco Expande macros Processa diretivas de pré-processamento

Pré Processador O comando de pré-processamento que provavelmente é mais conhecido pelos desenvolvedores é o include, que é resolvido pelo pré-processador O include consiste em apenas abrir o arquivo indicado, copiar o seu conteúdo e colar em cima do comando include, sendo que o include pode ter duas formas: #include <iostream> #include objeto.h Na primeira forma, usando-se < e > o pré-processador procura pelo arquivo indicado apenas nos diretórios de include que o compilador estiver configurado Na segunda opção com aspas, o pré-processador procura pelo arquivo no diretório onde estão os fontes do programa Vale lembrar que arquivos de header (extensões h, hpp, etc) não são compilados diretamente pelo compilador, mas apenas quando são incluídos em algum arquivo de código (c, cpp, cc, etc).

Compilador C/C++ O compilador processa o resultado do pré-processador e para cada unidade compilação gera um arquivo objeto Trata cada arquivo fonte como sendo uma unidade de compilação Compila cada um de maneira independente, ignorando a existência de qualquer outro arquivo A única forma do compilador considerar um outro arquivo é através da diretiva include, que já foi processada no passo anterior pelo pré-processador O construtor do compilador foca seus esforços na principal tarefa que consiste em verificar se o código esta bem construído segundo a gramática da linguagem Após verificar que não existe qualquer erro sintático (como, por exemplo, um ; faltando) ou semântico (como, por exemplo, uma variável definida duas vezes) ele já pode então gerar o código em linguagem de maquina que resulta no arquivo objeto

Linker O linker ou programa de ligações é responsável por juntar todos os arquivos objetos e gerar o arquivo executável (pode ser usado também para gerar bibliotecas dinâmicas, como dlls) Dessa forma a tarefa dele é substituir todos as chamadas de funções e acessos a variáveis em arquivos objeto pelo endereço real de onde esse item se encontra Fica responsável também por organizar cada função, variável dentro do espaço de memória do executável

www.ricardojcsouza.com.br