Compiladores. Introdução à Compiladores

Documentos relacionados
Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

II.1 Conceitos Fundamentais. Uma delas é programar o =>

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Introdução aos Compiladores

Compiladores I Prof. Ricardo Santos (cap 1)

Programação de Computadores:

INE5421 LINGUAGENS FORMAIS E COMPILADORES

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

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1

PROGRAMAÇÃO I. Introdução

Projeto de Compiladores

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

Introdução parte II. Compiladores. Mariella Berger

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

Noções de compilação

Projeto de Compiladores

Noções de compilação

Compiladores. Conceitos Básicos

Linguagens de Programação Classificação

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

Compiladores e Computabilidade

Sistema Computacional

Organização e Arquitetura de Computadores I

Compiladores. Geração de Código Objeto

Linguagens de Programação

EA876 - Introdução a Software de Sistema

Existem três categorias principais de linguagem de programação: linguagem de máquina, linguagens assembly e linguagens de alto nível.

Compiladores. Introdução

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

Paradigmas de Programação

Linguagens de Programação Aula 3

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

Prof. Sandro Wambier

Programação de Computadores

Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior

Autômatos e Linguagens

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

Introdução a Programação de Jogos

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

Linguagem de Montagem do NeanderX

SSC0112 Organização de Computadores Digitais I

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

CONJUNTO DE INSTRUÇÕES

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

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Introdução à Computação

Introdução à Computação

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Programação de Computadores

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

Infraestrutura de Hardware. Funcionamento de um Computador

Arquitetura e Organização de computadores

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Introdução ao Fortran 90

Compiladores. Prof. Bruno Moreno

Introdução à Programação

SSC510 Arquitetura de Computadores 1ª AULA

1) Considere a situação atual da memória do sistema computacional abaixo discriminada.

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

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

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

Histórico e Conceitos

Algoritmos e Programação

Estrutura e funcionamento básico de um computador

Sistemas Operacionais

Introdução à Programação de Computadores Fabricação Mecânica

Sâmia Rodrigues Gorayeb. Arquitetura de Computadores Linguagem de Máquina

Primeiro Trabalho de POO Emulador para o Processador Winter

Conceitos de Linguagens de Programação

LAPRO I. Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Informática - FACIN. Prof. Dr. Rafael Garibotti

Linguagens de Programação

OFICINA DA PESQUISA PROGRAMAÇÃO APLICADA À CIÊNCIA DA COMPUTAÇÃO

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

Compiladores. Análise Léxica

Especificações Gerais do Compilador e Definição de FRANKIE

Tecnólogo em Análise e Desenvolvimento de Sistemas. Sistemas Operacionais (SOP A2)

Arquitetura e Organização de Computadores

Slides trabalhados durante a quinta aula

CP Compiladores I Prof. Msc.. Carlos de Salles

FACULDADE LEÃO SAMPAIO

Introdução à Computação

Programação de Computadores

Disciplina: Arquitetura de Computadores

Algoritmos Computacionais

Classificação das linguagens de programação

3. Linguagem de Programação C

Montadores e Compiladores

Conjunto de Instruções e Modelos de Arquiteturas

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 32. Instituto de C

Paradigmas de Linguagem de Programação. Aspectos Básicos

Linguagens de Programação

Compiladores Aula 1. Celso Olivete Júnior.

Introdução à Programação

Memória. Arquitetura de Von Neumann. Universidade do Vale do Rio dos Sinos Laboratório I Prof.ª Vera Alves 1 CPU. Unidade de controle ULA

INF 1005 Programação I

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

Fundamentos de Arquiteturas de Computadores Turma :A1 Lista 3 Profa.: Simone Martins

Introdução à Computação para Engenharia MAC2166 Prof. Dr. Paulo Miranda IME-USP. Aula 1 Introdução à Computação

Informática I. Aula 9. Aula 9-17/05/2006 1

Sistema de memória e suas características

Transcrição:

Compiladores Introdução à Compiladores Cristiano Lehrer, M.Sc.

Introdução (1/2) O meio mais eficaz de comunicação entre pessoas é a linguagem (língua ou idioma). Na programação de computadores, uma linguagem de programação serve como meio de comunicação entre o indivíduo que deseja resolver um determinado problema e o computador escolhido para ajudá-lo na solução: Ligação entre o pensamento humano e a precisão requerida para o processamento pela máquina. O desenvolvimento de um programa torna-se mais fácil se a linguagem de programação em uso estiver próxima ao problema a ser resolvido (linguagem de alto nível): Incluir construções que refletem a terminologia e/ou os elementos usados na descrição do problema.

Introdução (2/2) Os computadores digitais aceitam e entendem somente sua própria linguagem de máquina, a qual consiste tipicamente de sequências de zeros e uns (linguagem de baixo nível). Para que se tornem operacionais, os programas escritos em linguagens de alto nível devem ser traduzidos para linguagem de máquina: Conversão realizada através de sistemas especializados - compiladores ou interpretadores - que aceitam como entrada um representação textual da solução de um problema, expresso em uma linguagem fonte, e produzem uma representação do mesmo algoritmo expresso em outra linguagem, dita linguagem objeto.

Evolução das Linguagens de Programação Linguagens de máquina: Programas em notação binária. Linguagens simbólicas (Assembly): Linguagens simbólicas ou de montagem. Linguagens orientadas ao usuário: Pascal, Fortran, Algol, Ada, C, C++, Java. Linguagens orientadas a aplicação: Excel, SQL, Lotus 1-2-3, Visicalc. Linguagens de conhecimento: Prolog.

Tradutores de Linguagens de Programação (1/4) Tradutor é um sistema que aceita como entrada um programa escrito em uma linguagem de programação (linguagem fonte) e produz como resultado um programa equivalente em outra linguagem (linguagem objeto). Montadores (assemblers): Tradutores que mapeiam instruções em linguagem simbólica (assembly) para instruções de linguagem de máquina, geralmente, numa relação de uma-para-uma, isto é, uma instrução de linguagem simbólica para uma instrução de máquina. Macro-assemblers: Tradutores que mapeiam instruções em linguagem simbólica para linguagem de máquina, geralmente, numa relação de umapara-várias.

Tradutores de Linguagens de Programação (2/4) Compiladores: Tradutores que mapeiam programas escritos em linguagens de alto nível para programas equivalentes em linguagem simbólica ou linguagem de máquina. programa fonte COMPILADOR programa objeto dados de entrada PROGRAMA OBJETO resultados

Tradutores de Linguagens de Programação (3/4) Pré-compiladores, pré-processadores ou filtros: Tradutores que mapeiam instruções escritas numa linguagem de alto nível estendida para instruções da linguagem de programação original, ou seja, são tradutores que efetuam conversões entre duas linguagens de alto nível. Fortran IV Nível G IBM FILTRO Fortran IV padrão ANSI

Tradutores de Linguagens de Programação (4/4) Interpretadores: Tradutores que aceitam como entrada o código intermediário de um programa anteriormente traduzido e produzem o efeito de execução do algoritmo original sem, porém, mapeá-lo para linguagem de máquina. dados programa fonte TRADUTOR programa intermediário INTERPRETADOR (máquina virtual) resultados

Estrutura de um Tradutor (1/7) programa fonte analisador léxico analisador sintático analisador semântico atendimento a erros A N Á L I S E tabelas gerador de código intermediário otimizador de código gerador de código objeto S Í N T E S E programa objeto

Análise Léxica: Estrutura de um Tradutor (2/7) Identificar sequências de caracteres que constituem unidades léxicas (tokens). O analisador léxico lê, caractere a caractere, o texto fonte, verificando se os caracteres lidos pertencem ao alfabeto da linguagem, identificando tokens, e desprezando comentários e brancos desnecessários. while I < 100 do I := J + I; [while, ] [id, 7] [<, ] [cte, 13] [do, ] [id, 7] [:=, ] [id, 12] [+, ] [id, 7] [;, ]

Estrutura de um Tradutor (3/7) Analises Sintática e Semântica: A fase de análise sintática tem por função verificar se a estrutura gramatical do programa está correta, isto é, se essa estrutura foi formada usando as regras gramaticais da linguagem. A fase de análise semântica tem por função verificar se as estruturas do programa irão fazer sentido durante a execução.

Estrutura de um Tradutor (4/7) Geração de código intermediário: Esta fase utiliza a representação interna produzida pela Analisador Sintático e gera como saída uma sequência de código. Vantagens da geração de código intermediário: Possibilita a otimização de código intermediário, de modo a obter-se o código objeto final mais eficiente. Resolve, gradualmente, as dificuldades da passagem de código fonte para código objeto, já que o código fonte pode ser visto como um texto condensado que explode em inúmeras instruções elementares de baixo nível.

Otimização de código: Estrutura de um Tradutor (5/7) Esta fase tem por objetivo otimizar o código intermediário em termos de velocidade de execução e espaço em memória. Geração de código objeto: Esta fase tem como objetivos: Produção de código objeto. Reserva de memória para constantes e variáveis. Seleção de registradores. É a fase mais difícil, pois requer uma seleção cuidadosa das instruções e dos registradores da máquina alvo a fim de produzir código objeto eficiente.

Gerência de tabelas: Estrutura de um Tradutor (6/7) Algumas das tabelas usadas são fixas para cada linguagem, por exemplo, a tabela de palavras reservadas, tabelas de delimitadores. Entretanto, a estrutura que possui importância fundamental é aquela que é montada durante a análise do programa fonte, com informações sobre: Declarações de variáveis. Declarações dos procedimentos ou subrotinas. Parâmetros de subrotinas.

Atendimento a erros: Estrutura de um Tradutor (7/7) Tem por objetivo tratar os erros que são detectados em todas as fases de análise do programa fonte. Qualquer fase analítica deve prosseguir em sua análise, ainda que erros tenham sido detectados. É fundamental que o tradutor prossiga na tradução, após a detecção de erros, de modo que o texto seja totalmente analisado.

Arquitetura de um Processador Hipotético R0 A0 A3 R1 R2 R3 D0 D7 processador memória

Registradores Presentes na figura: Quatro registradores de dados, usados como área de armazenamento temporário para os dados envolvidos na execução das operações: R0, R1, R2 e R3 Ocultos na figura: Registrador de instruções: Armazena a instrução que é executada. Contador de programas: Armazena o endereço da próxima instrução que deve ser executada. Registrador de controle: Armazena o estado associado ao resultado da última instrução.

Processador de oito bits: Barramento Dimensão do barramento de dados: D0 a D7 Memória: Capacidade de endereçamento de memória: 16 posições: A0 a A3.

Instruções (1/2) LOAD 00 Para transferir o conteúdo de uma posição de memória para um registrador. Por exemplo, a instrução LOAD 10, R1 é usada para carregar o conteúdo da posição 10 de memória para o registrador R1. STORE 01 Para transferir o conteúdo de um registrador para uma posição de memória. Por exemplo, a instrução STORE R2, 5 é usada para transferir o conteúdo do registrador R2 para a posição 5 de memória.

Instruções (2/2) ADD 10 Para adicionar o conteúdo de dois registradores e armazenar o resultado em outro registrador. Por exemplo, a instrução ADD R1, R2, R3 soma o conteúdo de R1 e R2 e coloca o resultado em R3. BZERO 11 Para mudar o conteúdo do contador de programas para a posição de memória especificada se o conteúdo do registrador indicado for igual a zero. Por exemplo, a instrução BZERO R3, 7 define que o contador de programas será alterado para o valor 7 somente se o conteúdo de R3 for igual a zero.

LOAD 5, R3 00010111 LOAD 00 5 0101 R3 11 BZERO R3, 7 11110111 BZERO 11 R3 11 7 0111 Representação Binária

Exemplo Linguagem de Alto Nível c = a + b; Linguagem Simbólica LOAD 10, R1 LOAD 11, R2 ADD R1, R2, R0 STORE R0, 12 Linguagem de Máquina 00101001 00101110 10011000 01001100