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

Documentos relacionados
Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 31. Instituto de C

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

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

Compiladores. Fabio Mascarenhas

Compiladores I Prof. Ricardo Santos (cap 1)

Linguagens de Programação

INE5421 LINGUAGENS FORMAIS E COMPILADORES

Compiladores Ambiente de Execução

FACULDADE LEÃO SAMPAIO

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

Compiladores - Análise Recursiva

Compiladores - Análise Recursiva

Compiladores - Especificando Sintaxe

Introdução à Programação

Compiladores. Conceitos Básicos

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

Compiladores Ambiente de Execução

Compiladores. Introdução

Introdução aos Compiladores

Compiladores Geração de Código

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Compiladores. Prof. Bruno Moreno

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

Compiladores Análise Semântica

Introdução parte II. Compiladores. Mariella Berger

EA876 - Introdução a Software de Sistema

Compiladores Análise Semântica

Compiladores Análise Semântica

CP Compiladores I Prof. Msc.. Carlos de Salles

Compiladores 02 Analise léxica

Projeto de Compiladores

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

Conceitos de Linguagens de Programação

V.2 Especificação Sintática de Linguagens de Programação

Linguagens de Programação

Compiladores Aula 1. Celso Olivete Júnior.

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

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.

Como construir um compilador utilizando ferramentas Java

Noções de compilação

Noções de compilação

Compiladores. Introdução à Compiladores

Análise Sintática Introdução

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Conclusões. Baseado no Capítulo 9 de Programming Language Processors in Java, de Watt & Brown

Compiladores. Análise Léxica

Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17

Aspectos do analisador sintático Usabilidade da Dias de atraso

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

Autômatos e Linguagens

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

Construção de Compiladores Aula 3 - Analisador Sintático

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011

As fases de um compilador

Linguagens e Compiladores

Conceitos de Linguagens de Programação

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Programação de Computadores:

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

CAP. VI ANÁLISE SEMÂNTICA

Compiladores - Análise Preditiva

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

Linguagens de Programação Aula 3

Compiladores - Análise Preditiva

As fases de um compilador

INE5622 INTRODUÇÃO A COMPILADORES

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

Compiladores. Análise Léxica

FACULDADE ZACARIAS DE GÓES SISTEMAS DE INFORMAÇÃO ADRIEL ALMEIDA CAFÉ PROCESSO DE COMPILAÇÃO

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

Hierarquia de Chomsky e sua relação com os autômatos

Compiladores - Gramáticas

Paradigmas de Programação

Projeto de Compiladores

Compiladores - Gramáticas

Carlos Eduardo Batista. Centro de Informática - UFPB

Análise Semântica e Representação Intermédia

Trabalho de Linguagens Formais e Compilação

MAB Análise Semântica. Monday, October 10, 11

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

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

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

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

Compiladores. Lex e Yacc / Flex e Bison. Ferramentas Flex/Bison

Linguagens de Programação

PLANO DE APRENDIZAGEM

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

Conceitos de Linguagens de Programação

Análise Sintática - Final

Programação de Computadores II

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

Análise Semântica e Representação Intermédia

Revisão. Fases da dacompilação

Tratamento dos Erros de Sintaxe. Adriano Maranhão

Compiladores - Análise Léxica

Pró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica

MAB Compiladores I Introdução

Transcrição:

ompiladores Introdução Bruno Lopes Bruno Lopes ompiladores 1 / 32

Apresentação Em que período estão? O quanto sabem de programação? Quais linguagens? O quanto sabem de unix? O quanto sabem de Linguagens Formais? O quanto sabem de ompiladores? Bruno Lopes ompiladores 2 / 32

O que se espera do curso? Bruno Lopes ompiladores 3 / 32

Objetivo onhecer, compreender e implementar todas as fases do processo de compilação. Bruno Lopes ompiladores 4 / 32

Etapas Análise Léxica Análise Sintática Análise Semântica Geração de código Otimização de código Bruno Lopes ompiladores 5 / 32

Estrutura de um compilador Front-end ódigo Fonte Analisador Léxico Token Analisador Sintático Árvore Sintaxe de Gerador de ódigo Intermediário ódigo de três endereços Tabela de Símbolos Bruno Lopes ompiladores 6 / 32

Sobre o estudo de compiladores... Interface entre aplicações e arquitetura Técnicas de Linguagens Formais Técnicas de Programação Entender o comportamento de programas Bruno Lopes ompiladores 7 / 32

Sobre o estudo de compiladores... Interface entre aplicações e arquitetura Técnicas de Linguagens Formais Técnicas de Programação Entender o comportamento de programas Bruno Lopes ompiladores 7 / 32

Sobre o estudo de compiladores... Interface entre aplicações e arquitetura Técnicas de Linguagens Formais Técnicas de Programação Entender o comportamento de programas Bruno Lopes ompiladores 7 / 32

Sobre o estudo de compiladores... Interface entre aplicações e arquitetura Técnicas de Linguagens Formais Técnicas de Programação Entender o comportamento de programas Bruno Lopes ompiladores 7 / 32

ompilador Programa que traduz um programa de uma linguagem para outra. Interpretador Programa que lê um outro programa e produz o resultado de sua execução. Bruno Lopes ompiladores 8 / 32

ompilador Programa que traduz um programa de uma linguagem para outra. Interpretador Programa que lê um outro programa e produz o resultado de sua execução. Bruno Lopes ompiladores 8 / 32

ompilador Programa que traduz um programa de uma linguagem para outra. Interpretador Programa que lê um outro programa e produz o resultado de sua execução. Bruno Lopes ompiladores 8 / 32

ompiladores: princípios O significado do programa deve ser preservado. O código gerado deve ser melhor que o de entrada. (omo?) Bruno Lopes ompiladores 9 / 32

Histórico Linguagem de máquina Linguagem de montagem Linguagem de programação Bruno Lopes ompiladores 10 / 32

Histórico Speedcoding Fortran Hierarquia de homsky Algoritmos para reconhecer Linguagens Livres de ontexto Técnicas de otimização de código Bruno Lopes ompiladores 11 / 32

Funcionalidades Reconhecer código Gerar código correto Gerenciar armazenamento de variáveis e código Bruno Lopes ompiladores 12 / 32

Fases Análise Léxica Análise Sintática Análise Semântica Otimização Geração de código Front-end, Middle-end, back-end Bruno Lopes ompiladores 13 / 32

Fases Análise Léxica Análise Sintática Análise Semântica Otimização Geração de código Front-end, Middle-end, back-end Bruno Lopes ompiladores 13 / 32

Front-end ódigo Fonte Analisador Léxico Token Analisador Sintático Árvore Sintaxe de Gerador de ódigo Intermediário ódigo de três endereços Tabela de Símbolos Bruno Lopes ompiladores 14 / 32

Front-end Reconhece programas legais Reporta erros Produz código intermediário Produz de gerenciamento de memória e código Bruno Lopes ompiladores 15 / 32

Scanner Análise Léxica Organização em tokens. Este é um programa int i = 10; Bruno Lopes ompiladores 16 / 32

Scanner Análise Léxica Organização em tokens. Este é um programa int i = 10; Bruno Lopes ompiladores 16 / 32

Scanner Análise Léxica Organização em tokens. Este é um programa int i = 10; Bruno Lopes ompiladores 16 / 32

Quantos tokens? #include<stdio.h> int main (int argc, char *argv[]) { printf("hello world!"); return 0; } Bruno Lopes ompiladores 17 / 32

Análise Léxica Recohecimento de tokens Gerenciamento da tabela de símbolos (que operações? quando efetuá-las?) Uso de expressões regulares Ferramentas: Lex, JFlex etc. Bruno Lopes ompiladores 18 / 32

Parsing omo as palavras estão estruturadas? Estão bem estruturadas? Retorno: estrutura diagramizada Este é um programa int i = 10; Bruno Lopes ompiladores 19 / 32

Parsing omo as palavras estão estruturadas? Estão bem estruturadas? Retorno: estrutura diagramizada Este é um programa int i = 10; Bruno Lopes ompiladores 19 / 32

Parsing omo as palavras estão estruturadas? Estão bem estruturadas? Retorno: estrutura diagramizada Este é um programa int i = 10; Bruno Lopes ompiladores 19 / 32

Parser Reconhece a sintaxe Reporta erros ódigo intermediário Bruno Lopes ompiladores 20 / 32

Parser Determina elementos estruturais do código e seus relacionamentos omo especificar a sintaxe? Produz uma árvore sintática Bruno Lopes ompiladores 21 / 32

Resultado do parsing? #include<stdio.h> int main (int argc, char *argv[]) { printf("hello world!"); return 0; } Bruno Lopes ompiladores 22 / 32

Parser Estrutura definida por regras recursivas (como?) Regras recursivas definidas por uma gramática Geradores: YA, Bison, Sable, Java etc. Bruno Lopes ompiladores 23 / 32

Análise Semântica Busca entender o significado. Atributos semânticos podem ser analisados antes da execução Verificação de tipos Eliminação de ambiguidades onstruções Sensíveis ao ontexto Bruno Lopes ompiladores 24 / 32

Análise Semântica Busca entender o significado. Atributos semânticos podem ser analisados antes da execução Verificação de tipos Eliminação de ambiguidades onstruções Sensíveis ao ontexto Bruno Lopes ompiladores 24 / 32

Otimização de código omo utilizar menos recursos? omo melhorar o desempenho? Heurísticas Bruno Lopes ompiladores 25 / 32

for(i=0; i<n; i++) for(j=0; j<n; j++) A[i][j] = 0; for(i=0; i<n; i++) for(j=0; j<n; j++) A[j][i] = 0; p = &A[0][0]; t = n * n; for(i=0; i<t; i++) *p++ = 0; Bruno Lopes ompiladores 26 / 32

Back-end Traduz código intermediário em código de máquina Escolhe instruções para implementar cada operação Gerencia registradores Bruno Lopes ompiladores 27 / 32

Registradores Inserir no Load Inserir no Store Define conjunto de registradores que serão utilizados Bruno Lopes ompiladores 28 / 32

Escalonamento de instruções Usar recursos de forma produtiva Alocação ótima é NP-ompleto Heurísticas Bruno Lopes ompiladores 29 / 32

Bruno Lopes ompiladores 30 / 32

Linguagem Tiny Variáveis inteiras Declaração a partir da atribuição de valores ontrole com if e repeat if termina com end e tem um else opcional omentários entre chaves Expressões aritméticas e booleanas Bruno Lopes ompiladores 31 / 32

{Exemplo de programa em Tiny - Fatorial} read x; {inteiro de entrada} if x > 0 then {express~ao booleana} fact := 1; repeat fact := fact * x; x := x + 1; until x = 0; write fact; end Bruno Lopes ompiladores 32 / 32