Linguagens e Compiladores

Documentos relacionados
Fundamentos de Programação. Diagrama de blocos

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

Fundamentos de Sistemas Operacionais

Introdução à Informática

Ferramenta para o ensino de Programação via Internet 1

Métricas de Software

Programação de Computadores III

FORMULÁRIO PARA CRIAÇÃO DE DISCIPLINA

RELATÓRIO DEFINIÇÃO. Resumo

Introdução à Programação de Computadores Parte I

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

Linguagem de Programação

Informática I. Aula Aula 19-20/06/06 1

Parte II Introdução a Linguagens de Programação

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

Montadores e Compiladores

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

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

Banco de Dados I. Prof. Edson Thizon

Conteúdo programático

Compiladores INTRODUÇÃO.

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

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

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

Compiladores Aula 1. Celso Olivete Júnior.

Nivel de Linguagem de Montagem (Assembly)

Aula 11: Desvios e Laços

Conceitos básicos sobre computadores

Lógica de Programação. Profas. Simone Campos Camargo e Janete Ferreira Biazotto

O que é um banco de dados? Banco de Dados. Banco de dados

Supervisório Remoto aplicado em Dispositivo Móvel na Plataforma NI LabVIEW

Diagrama de Componentes e Implantação

Breve Histórico & Conceitos Básicos

Luiz Thiago Silva DESENVOLVIMENTO DE UM ANALISADOR DE CÓDIGO ANSI-C. Orientador: Prof. MSc. João Carlos Giacomin

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

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa

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

MDS II Aula 04. Concepção Requisitos Diagrama de Casos de Uso (Use Cases)

PROGRAMAÇÃO DE COMPUTADORES

OBJETIVO GERAL DA DISCIPLINA

BCC402 Algoritmos e Programação Avançada. Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Tóffolo 2011/1

RAFF Um Compilador para Facilitar o Aprendizado de Algoritmos

UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO

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

FACULDADE DE TECNOLOGIA DE TAQUARITINGA PLANO DE ENSINO º SEMESTRE DE INFORMÁTICA APLICADA À PRODUÇÃO INDUSTRIAL

Introdução à orientação a objetos

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

II Semana de Ciência e Tecnologia do IFMG campus Bambuí II Jornada Científica 19 a 23 de Outubro de 2009

Linguagem de Programação I

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

Os salários de 15 áreas de TI nas cinco regiões do Brasil

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

MODELO SUGERIDO PARA PROJETO DE PESQUISA

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

Inteligência Artificial

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

as citações devem ser apresentadas conforme a norma NBR 10520/2002; citação: é a menção de uma informação extraída de alguma fonte.

ENGENHARIA DE SOFTWARE

Sobre o Visual C

Plano de Trabalho Docente Ensino Técnico

Implementação de um analisador léxico: a primeira etapa na construção do compilador Marvel

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

Aula 03. Processadores. Prof. Ricardo Palma

Plano de Ensino 1º semestre de Professores: CLEANTES ALVES LEITE JR. / JOÃO CARLOS IVO DE ABREU

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

Curso Técnico em Redes

Introdução à Programação. Funções e Procedimentos. Prof. José Honorato F. Nunes honoratonunes@gmail.com

MINISTÉRIO DA EDUCAÇÃO SECRETARIA DE EDUCAÇÃO MÉDIA E TECNOLÓGICA ESCOLA TÉCNICA FEDERAL DE PALMAS SUPERVISÃO EDUCACIONAL

Iniciação Científica no INATEL

Arquitetura e Organização de Computadores. Profa. Débora Matos

Projeto Pedagógico do Curso de Avaliação Ambiental Estratégica. Parceria: UNEMAT

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

Deswik.Sched. Sequenciamento por Gráfico de Gantt

Aula 1 Oficina de Programação e Laboratório Apresentação. Profa. Elaine Faria UFU

Linguagens de programação

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

16/09/2012. Agenda. Introdução. Introdução. Tipos de Software (Básico) Tipos de Software. Curso Conexão Noções de Informática

Processo de Desenvolvimento de Software

PROGRAMA DE DISCIPLINA

Linguagem de Montagem

Carlos José Maria Olguín Allysson Chagas Carapeços UNIOESTE/Colegiado de Informática Cascavel, PR

Disciplina: Introdução à informática Profª Érica Barcelos

PLANEJAMENTO E AUTOMAÇÃO DE SOFTWARE PARA UTILIZAÇÃO NA DISCIPLINA DE CÁLCULO DIFERENCIAL E INTEGRAL

Projeto de Desenvolvimento de Software

Paradigmas de Linguagens de Programação

BANCO DE DADOS E BUSINESS INTELIGENCE. C/H: 20 horas (20/02, 25/02, 27/02, 04/03, 06/03)

Modelo Lógico: Tabelas, Chaves Primárias e Estrangeiras

Hardware: Componentes Básicos. Sistema de Computador Pessoal. Anatomia de um Teclado. Estrutura do Computador. Arquitetura e Organização

Introdução a Programação Aula 01

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

Criando scanner para dectar BackupExec vulneráveis ao exploit do Metasploit. Inj3cti0n P4ck3t

PORTARIA N Nº 178 Rio de Janeiro, 25 de outubro de 2012.

Transcrição:

Linguagens e Compiladores Aula 1: a) Critérios b) Noções de Compiladores e Interpretadores c) Usos da tecnologia de compilação d) Compiladores, filtros e pré-processadores e) Estruturação lógica de compiladores f) Exemplo g) Bibliografia Ricardo Luis de Azevedo da Rocha

a) Critério de Aprovação 2 provas 1 trabalho prático em dupla (compilador) É necessário obter aprovação nas provas e também no compilador, pode-se ir para REC tanto pela média das notas como pelo compilador M F =(P 1 + 2.P 2 +C)/4, em caso de aprovação em ambos (teoria e prática), qualquer outro caso a nota será suficiente apenas para a REC A REC será referente às notas inferiores a 5

b) Noções de Compiladores Programação de Sistemas Hardware Linguagem de Máquina Montadores (Linguagem de Baixo Nível) Sistema Operacional Compiladores / Interpretadores (Linguagem de Alto Nível)

Definição Compilador: Um programa de computador que traduz código escrito em uma determinada linguagem (código-fonte) em código escrito em outra linguagem (linguagem-objeto). Exemplos: Traduzir de C++ para C Traduzir de Java para JVM Traduzir de C para C (Por que? Para tornar o código mais eficiente, menor, mais rápido, ou mesmo medir desempenho).

c) Usos da Tecnologia de Compilação Uso mais comum: traduzir um programa em linguagem de alto nível para código objeto para um processador particular Melhorar o desempenho de programas (otimizar) Interpretadores: tradutores diretos on-line, exemplos Perl, Java Paralelização ou vetorização automática Ferramentas de depuração Segurança (safety): Java VM usa compilação para demonstrar segurança de código Formatadores de texto (TeX para PS, PS para PDF) Simulação de arquiteturas, Tolerância a falhas, Assinaturas

Chave do Processo Habilidade de extrair as propriedades de um programa (análise), e, opcionalmente, transformá-lo (síntese). Exemplo: X =... i = 1 While (i <= 100) do i = i + 1 j = i * 4 N = j ** 2 /* Exponenciação Y = X * 2.0 A[i] = X * 4.0 B[j] = Y * N C[j] = N * Y * C[j] End While L1: Print B[1:400] Print C[1:400] Stop

Resultado da Otimização de Código do Exemplo j = 4 /* (i = 1) * 4: propagação da const Y = X * 2.0 /* mudança do invariante do laço While (j <= 400) do j = j + 4 /* substituição da variável (forte) N = j * j /* redução (forte) /* eliminação de A B[j] = Y * N C[j] = B[j] * C[j] /* eliminação de sub-expressão End While L1: Print B[1:400] Print C[1:400] Stop /* Também aloca registros j, N, Y

d) Compiladores, Filtros e Pré- Processadores Tradutor genérico: Fonte Objeto Compilador: Alto nível Outra linguagem Montador: Baixo nível Ling. máquina Filtro: Alto nível Alto nível (conversões) Pré-Processador: Semelhante ao Filtro, porém antecede a etapa de compilação, por exemplo, expandindo macros, etc.

Formalização das Linguagens de Programação Objetivo: eliminar ambigüidades Meio: notação formal Característica: linguagens de programação são mais restritivas que as linguagens naturais Inviável tratar a comunicação homem-máquina em linguagem puramente natural Uso de gramáticas, reconhecedores e dispositivos geradores, descritos em uma metalinguagem

Estratégia para Obtenção de Compiladores Três alternativas: Manual: Realizar toda a codificação através de técnicas especiais (os primeiros compiladores foram construídos desta forma) Mista: Utilizar em parte algum programa de auxílio e desenvolver o restante Semi-Automática: Utilizar programas mais modernos e completos, modificando pouco a estrutura gerada Definir a linguagem fonte de tradução e a linguagem objeto (máquina objeto), além da linguagem de desenvolvimento

Tipos de Compiladores Com relação à máquina hospedeira: Auto-residente: se a máquina hospedeira é a mesma máquina para a qual deve ser gerado código Compilador-Cruzado: se a máquina hospedeira é diferente da máquina para a qual o código deve ser gerado Método de bootstrapping autocompiláveis

Bootstrapping Conceito: X Fonte Objeto Y Ling. desenv Tem-se: L M Constrói-se: L M M L L M L M Compila-se: L L M M, obtendo-se M

e) Estruturação Lógica de Compiladores Analisador léxico Analisador sintático Analisador semântico Gerador de código intermediário Otimizador de código Gerador de código objeto

Estrutura Lógica Código fonte Analisador Léxico Identifica palavras Operadores, números, etc. Átomos Analisador Sintático Identifica estrutura Expressões, declarações, etc. Árvore sintática Analisador Semântico Identifica sentido Tipos, etc. Árv. sint. e tabela símbolos Gerador de Código Int. Repres. Interna Gera representação interna através da árvore sintática Otimizador de Código Repres. Interna Transforma representação interna, modifica código (desempenho) Gerador de Código Gera código objeto Traduz representação interna para linguagem objeto (ex. Assembly) Código Objeto

Front-end e Back-end

Processo de Execução de Linguagens de Alto Nível Programa Fonte (Linguagem de alto nível) Interpretador Compilador Resultados da execução Hardware Interpretador Ling interm. Programa Objeto (Linguagem intermediária) Programa Objeto (Linguagem de Máquina) Bibliotecas Programa Objeto (Linguagem relocável) Relocador

Organização Física Quanto ao número de passos: Em um único passo (ex. Delphi, Turbo Pascal) Em múltiplos passos (ex. compiladores COBOL para Mainframes, compiladores da Microsoft mais antigos) Quanto à hierarquia interna Dirigidos por sintaxe (mais comum) Dirigidos pela análise léxica Dirigidos pela geração de código

Dirigidos por Sintaxe (Programa Principal) Programa Fonte Analisador Léxico Átomos Analisador Sintático Código Objeto Gerador de Código Árvore Sintática

Considerações Custo-benefício Tarefa de compilação de uma linguagem de alto nível não é trivial Sem compiladores não é possível utilizar uma linguagem de alto nível (justificativa de construção) Número de linhas de programa geradas é constante para cada programador, e os programas ficam menores Número de erros diminui pela verificação dos compiladores Engenharia de Software, considerações de eficiência Dificuldade: Compilador Pascal otimiz. demanda aproximadamente 30 Homens-Ano (manualmente)

f) Exemplo

Compilação

Continuação

g) Bibliografia Introdução à Compilação, J. J. Neto, LTC, 1987 (Livro- Base) atualizado em 2016 Compilers: Principles, Techniques and Tools, Alfred Aho, Ravi Sethi and Jeffrey Ullman, Addison-Wesley, 2007 Introdução à compilação, I. Ricarte, ed Campus, 2008 Projeto Moderno de Compiladores Implementação e Aplicações, D. Grune, H. Bal, C. Jacobs, K. G. Langendoen, ed. Campus, 2002 Compiladores: princípios e práticas, K. C. Louden, ed. Thompson, 2004 Implementação de Linguagens de Programação: Compiladores, A. M. A. Price & S. S. Toscani, ed. Sagra- Luzzatto, 2002 Trembley & Sorenson The theory and practice of compiler writing, McGraw-Hill, 1985 Robert W. Sebesta Programming language concepts, Addison-Wesley, 2007.