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



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

Introdução à Engenharia de Computação

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01

Introdução à Engenharia de Computação

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D)

Linguagem de Montagem

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

Organização de Computadores Software

UNIP - UNIVERSIDADE PAULISTA. Arquitetura de computadores

1.1. Organização de um Sistema Computacional

1 INTRODUÇÃO 1.1 CONCEITO DE PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO

Sistemas Operacionais Aula 2

Linguagens de Programação

Mini Curso DESCOMPLICANDO C# Professor Hélio

Capítulo 7 Nível da Linguagem Assembly

Roteiro. MC-102 Aula 01. Hardware e dispositivos. O que é um computador? Primeiro Semestre de A linguagem C

Linguagens de. Aula 01. Profa Cristiane Koehler

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

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 1

Computador Digital Circuitos de um computador (Hardware)

Linguagem algorítmica: Portugol

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

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X

Organização de Computadores 1. Prof. Luiz Gustavo A. Martins

Introdução aos computadores, à Internet e à World Wide Web by Pearson Education do Brasil

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

Definição de Programas de Computadores e Linguagem de Programação de Comutadores

MATA49 Programação de Software Básico

Carga horária : 4 aulas semanais (laboratório) Professores: Custódio, Daniel, Julio foco: introdução a uma linguagem de programação Linguagem Java

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

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

O Hardware e o Software do Computador

Linguagem de Montagem 2. Operações e Operandos

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

Lógica para Computação

PROGRAMAÇÃO JAVA. Parte 1

3 Revisão de Software

Programação de Computadores. Turma CI-180-B. Josiney de Souza.

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa

Introdução à Arquitetura de Computadores

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

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

CONCEITOS BÁSICOS SOBRE PROGRAMAÇÃO Programação Orientada a Objetos (POO)

Programação Funcional. Aula 5. Funções Recursivas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

3 A Biblioteca para Implementação de Máquinas Virtuais

Programação de Computadores III

Convertendo Algoritmos para a Linguagem C

Computador E/S, Memória, Barramento do sistema e CPU Onde a CPU Registradores, ULA, Interconexão interna da CPU e Unidade de controle.

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

Introdução a Banco de Dados Aula 03. Prof. Silvestri

Curso Técnico em Redes

Algoritmos DCC 119. Introdução e Conceitos Básicos

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013.

Para os problemas seguintes considere os 5 andares de pipelining do MIPS:

COMPILADORES E INTERPRETADORES

Breve Histórico & Conceitos Básicos

Aula 14: Instruções e Seus Tipos

Java. Marcio de Carvalho Victorino

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

3. O NIVEL DA LINGUAGEM DE MONTAGEM

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

Programação: Estruturas de seleção

UNICE Ensino Superior Linguagem de Programação Ambiente Cliente Servidor.

Introdução à Sistemas Operacionais. Glauber Magalhães Pires

Representação de Algoritmos - Linguagens de Programação

Figura 1 - O computador

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

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

E/S CPU. Memória (Instruções e dados) 2 PARADIGMA IMPERATIVO. Instruções e dados. Resultados das operações. Unidade lógica e aritmética

Introdução a Programação Funcional

Algoritmo e Técnica de Programação - Linguagem C

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Lição 1 Introdução à programação de computadores

Sistemas Operacionais. Prof. André Y. Kusumoto

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

Algoritmos e Programação Aula 01 Introdução a Computação

Arquitetura de Computadores Moderna

Implementando uma Classe e Criando Objetos a partir dela

Planificação de. Aplicações Informáticas B

Bacharelado em Ciência e Tecnologia Processamento da Informação TESTE DE MESA TESTE DE MESA

c. Técnica de Estrutura de Controle Teste do Caminho Básico

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA DISCUSSÃO DOS EXERCÍCIOS E CONSTRUÇÃO DE PROGRAMAS SEQUENCIAIS. Prof. Dr. Daniel Caetano

Introdução ao Processamento de Dados (IPD)

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

MC-102 Aula 01. Instituto de Computação Unicamp

O COMPUTADOR. Introdução à Computação

Introdução sobre Scilab

Introdução à Arquitetura de Computadores

Conceitos básicos da linguagem C

FundamentosemInformática

Aula 2 Revisão 1. Ciclo de Vida. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW

Introdução. A Informação e sua Representação (Parte II) Universidade Federal de Campina Grande. Unidade Acadêmica de Sistemas e Computação

Aula 04. Prof Wesley Sathler

Simulado de Algoritmos - Respostas

BEC- Bafômetro Embutido em Carros

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2015.

Programação científica C++

Transcrição:

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

1 Linguagens de programação 2 Compilação 2/21

Layout 1 Linguagens de programação 2 Compilação 3/21

Linguagens de programação Os programadores escrevem instruções em várias linguagens de programação: algumas são diretamente compreensíveis por computadores, outras requerem passos intermediários de tradução. Três tipos gerais de linguagem: Linguagens de máquina Linguagens assembly (ou de montagem) Linguagens de alto nível 4/21

Linguagens de máquina Qualquer computador pode entender diretamente apenas sua própria linguagem de máquina. Essa é a linguagem natural do computador, definida pelo projeto de hardware. Em geral, as linguagens de máquina consistem em strings de números (em última instância reduzidas a 1s e 0s) que instruem os computadores a realizar suas operações mais elementares uma de cada vez. Dependentes de máquina: uma linguagem de máquina é específica e só pode ser utilizada em um tipo de computador. Exemplo: somar o salário base às horas extras para calcular o salário bruto: +1300042774 +1400593419 +1200274027 5/21

Linguagens assembly Abreviações em inglês que representam operações elementares formam a base das linguagens assembly. Programas tradutores chamados assemblers convertem programas em linguagem assembly para a linguagem de máquina. Exemplo: somar o salário base às horas extras para calcular o salário bruto: load salariobase add salarioextra store salariobruto 6/21

Linguagens de alto nível Instruções simples realizam tarefas substanciais. Compiladores convertem programas em linguagem de alto nível para a linguagem de máquina. Permitem aos programadores escrever instruções parecidas com o inglês cotidiano e contêm notações matemáticas comumente utilizadas. C, C++, Java, linguagens.net da Microsoft (por exemplo, Visual Basic, Visual C++ e C#) estão entre as linguagens de programação de alto nível mais amplamente utilizadas. Exemplo: somar o salário base às horas extras para calcular o salário bruto: salariobruto = salariobase + salarioextra 7/21

Layout 1 Linguagens de programação 2 Compilação 8/21

Compilação Um compilador traduz (compila) um programa escrito em uma linguagem de programação de alto nível que é adequada para programadores humanos para a linguagem de máquina que é requerida pelo computador. Impacto do uso de uma linguagem de alto nível para programação no desenvolvimento: notação mais próxima da maneira como humanos pensam sobre problemas o compilador pode detectar alguns erros de programação óbvios programas tendem a ser menores O processo de compilação de um programa de linguagem de alto nível em linguagem de máquina pode consumir uma quantidade considerável de tempo do computador. Interpretadores executam linguagem de alto nível diretamente, embora sejam mais lentos que programas compilados. O Java utiliza uma combinação inteligente de compilação e interpretação para executar programas. 9/21

Processores de linguagem: compiladores Definição 1 (Compilador) Um compilador é um programa de computador (ou um grupo de programas) que, a partir de um código fonte escrito em uma linguagem compilada, cria um programa semanticamente equivalente, porém escrito em outra linguagem, código objeto. programa fonte linguagem fonte compilador programa objeto linguagem objeto 10/21

Processadores de linguagem: execução Quando o programa objeto é um programa em linguagem de máquina executável, ele poderá ser chamado pelo usuário para processar entradas e produzir saídas. entrada programa objeto saída 11/21

Processadores de linguagem: interpretador Definição 2 (Interpretador) Interpretador é um processador de linguagem que recebe como entrada um programa em uma linguagem de programação e executa diretamente as operações especificadas no programa sobre as entradas fornecidas pelo usuário. programa fonte entrada interpretador saída 12/21

Processadores de linguagem: compilação + interpretação Um programa fonte pode ser primeiramente compilado para uma linguagem intermediária, e o codigo intermediário gerado é então interpretado por uma máquina virtual. programa fonte linguagem fonte compilador programa objeto linguagem objeto entrada interpretador saída 13/21

Porque estudar compiladores? Construir um grande e ambicioso sistema de software. Ver a aplicação da teoria na prática. Aprender a projetar linguagens de programação. Aprender como os processadores de linguagens funcionam. 14/21

Breve histórico de compiladores Inicialmente não havia nada. Então, criou-se linguagens de máquinas. Então, criou-se linguagens de montagem (assembly). Então, criou-se linguagens de alto nível. 15/21

Estrutura de um compilador moderno Front-end: Back-end: Análise léxica: identifca símbolos que compõem o programa. Análise sintática: identica como estes símbolos se relacionam entre si. Análise semântica: identifica o significado destas relações. Geração de código intermediário: produz a estrutura na representação intermediária. Otimização do código intermediário: simplifica as estruturas intermediárias geradas. Geração de código objeto: produz a estrutura na linguagem objeto. Otimização de código objeto: melhora a estrutura produzida. 16/21

Estrutura de um compilador moderno (cont.) código fonte analisador léxico analisador sintático analisador semântico gerador de código intermediário otimizador de código intermediário gerador de código objeto otimizador de código objeto código objeto 17/21

Estrutura de um compilador moderno (cont.) do { int x = a + b; y += x; } while (y < z); análise léxica T_Do T_OpenBrace T_Int T_Identifier x T_Assign T_Identifier a T_Plus T_Identifier b T_Semicolon T_Identifier y T_PlusAssign T_Identifier x T_Semicolon T_CloseBrace T_While T_LeftParen T_Identifier y T_Less T_Identifier z T_RightParen T_Semicolon análise sintática x Do Sequence = = + y + a b y x y < z análise semântica 18/21

Estrutura de um compilador moderno (cont.) Do void análise semântica = int Sequence void = int y < bool int z int geração de código intermediário x int + int y int + int a int b int y int x int 19/21

Estrutura de um compilador moderno (cont.) loop: x = a + b y = x + y _t1 = y < z if _t1 goto loop x = a + b loop: y = x + y _t1 = y < z if _t1 goto loop add $1m $2m $3 loop: add $4, $1, $4 slt $6, $1, $5 beq $6, loop geração de código intermediário otimização do código intermediário geração de código objeto otimização do código objeto add $1m $2m $3 loop: add $4, $1, $4 blt $1, $5, loop 20/21

Fim 21/21