CP Compiladores I Prof. Msc.. Carlos de Salles

Documentos relacionados
CP Compiladores I Prof. Msc. Carlos de Salles

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

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

FACULDADE LEÃO SAMPAIO

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

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

Projeto de Compiladores

Linguagens e Compiladores

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.

Compiladores. Conceitos Básicos

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

Compiladores I Prof. Ricardo Santos (cap 1)

Autômatos e Linguagens

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

INE5421 LINGUAGENS FORMAIS E COMPILADORES

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA DEPARTAMENTO DE INFORMÁTICA APLICADA

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

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

Introdução à Programação

Projeto de Compiladores

Conceitos de Linguagens de Programação

Interfaces de Vanguarda do Compilador

Compiladores. Introdução

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

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

Compiladores. Prof. Bruno Moreno

Universidade Federal do ABC Rua Santa Adélia, Bairro Bangu - Santo André - SP - Brasil CEP Telefone/Fax:

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

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

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

Introdução aos Compiladores

Universidade Federal de Alfenas

FOLHA DE PROVA. Descreva e ilustre, com um exemplo, o algoritmo de minimização de um autômato.

PLANO DE APRENDIZAGEM

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

Linguagens de Programação Classificação

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

Linguagens de Programação

Introdução parte II. Compiladores. Mariella Berger

Ficha da Unidade Curricular

Compiladores. Introdução à Compiladores

Compiladores. Fabio Mascarenhas

Capítulo 1. Aspectos Preliminares

Paradigmas de Programação

Compiladores Aula 1. Celso Olivete Júnior.

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

COMPILADORES PROGRAMA E BIBLIOGRAFIA

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

Conceitos de 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.

Linguagens de Programação Aula 3

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

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

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

CAP. VI ANÁLISE SEMÂNTICA

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

Compiladores - JACC. Fabio Mascarenhas

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

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

Capítulo 1 Linguagens e processadores

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

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

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

PROGRAMAÇÃO I. Introdução

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

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

Tratamento dos Erros de Sintaxe. Adriano Maranhão

EA876 - Introdução a Software de Sistema

Prof. Adriano Maranhão COMPILADORES

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

Linguagens Livres do Contexto. Adaptado de H. Brandão

Algoritmos e Programação

I LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1

Noções de compilação

Noções de compilação

Tokens, Padroes e Lexemas

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

Compiladores 04 Analise léxica Jflex. Prof José Rui

PORTUGOL/PLUS: UMA FERRAMENTA DE APOIO AO ENSINO DE LÓGICA DE PROGRAMAÇÃO BASEADO NO PORTUGOL

Algoritmos e Programação

INE5318 Construção de Compiladores. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

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

1.1 Linguagens de Programação

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)

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

RONALDO LIMA ROCHA CAMPOS GERADOR DE COMPILADORES

COMPILADORES. Análise semântica. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

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

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

Construção de Compiladores

Universidade Católica de Pelotas Bacharelado em Ciência da Computação Linguagens Formais e Autômatos TEXTO 6 Introdução à Compilação

Desenvolvimento de Aplicações Desktop

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

Introdução. Compiladores Análise Semântica. Introdução. Introdução. Introdução. Introdução 11/3/2008

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

Análise semântica. Função, interação com o compilador Tabela de símbolos Análise semântica. Prof. Thiago A. S. Pardo

INE5622 INTRODUÇÃO A COMPILADORES

Análise Léxica I. Eduardo Ferreira dos Santos. Março, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 31

Transcrição:

CP 5017.9 Prof. Msc.. Carlos de Salles 1 - EMENTA O Processo de Compilação. Deteção e Recuperação de Erros. Introdução à geração de Código Intermediário. Geração de Código de Máquina. Otimização. Uma visão sobre alguns compiladores. A construção de um compilador. 2 - O PROCESSO DE COMPILAÇÃO 2.1 - Introdução 2.2 - Aspectos do Processo de Compilação 3 - DEFINIÇÃO DE LINGUAGEM 3.1 - Introdução 3.2 - Sintaxe e Semântica 3.3 - Gramáticas - Definição Formal de Linguagem de Programação 3.4 - O Problema da Análise 4 - ANÁLISE LÉXICA 4.1 - Introdução 4.2 - Construção Manual de Analisadores 4.3 - Construção Sistemática de Analisadores 4.4 - Saídas do Analisador Léxico 4.5 - Implementação 4.6 - Erros 5 - GRAMÁTICAS LIVRES DO CONTEXTO 5.1 - Sintaxe e Semântica 5.2 - Gramáticas - Definição Formal de Linguagens de Programação 5.3 - Gramáticas Livres do Contexto Slide 1

Ementa (continuação) CP 5017.9 Prof. Msc.. Carlos de Salles 6 - ANÁLISE SINTÁTICA DESCENDENTES 6.1 - Formalização 6.2 - Análise com Recuperação 6.3 - Análise sem Recuperação 6.3.1 - Analisadores Recursivos 6.3.2 - Analisadores Preditivos 7 - ANÁLISE SNTÁTICA ASCENDENTE 7.1 - Formalização 7.2 - Analisadores de Precedência 8 - TRADUÇÃO DIRIGIDA POR SINTAXE 8.1 - Esquemas da Tradução Dirigida por Sintaxe 8.2 - Implementação de Tradutores Dirigidos por Sintaxe 9 - TABELA DE SÍMBOLOS 9.1 - Os Conteúdos da Tabela de Símbolo 9.2 Organizações de Tabelas de Símbolos 10 - ORGANIZAÇÃO DE MEMÓRIA 11 - CONSTRUÇÃO AUTOMÁTICA DE ANALISADORES EFICIENTES Bibliografia GRUNE, DICK et al. Projeto Moderno de Compiladores. Editora Campus. AHO, Alfred; SETHI, Ravi; ULLMAN, Jeffrey D. Compiladores Princípios, Técnicas e Ferramentas. Editora Guanabara. Editora LTC. Slide 2

Paradigma análise/síntese código fonte interface de vanguarda código intermediário gerador de código código alvo Estrutura básica de um compilador Slide 3

Interface de vanguarda do compilador Engloba as fases de análise Gera uma representação semântica intermediária Análise léxica Converte uma seqüência de caracteres no(s) arquivo(s) de entrada com o código fonte em uma seqüência de tokens equivalente; Cada token representa um elemento atômico da linguagem; Análise sintática Transforma a seqüência de tokens em uma árvore sintática que representa o código fonte; É dividido em dois grupos de métodos: os top-down e os bottom-up; Tratamento de contexto Avalia erros de tipagem e nos identificadores; Baseia-se em informações coletadas numa estrutura chamada tabela de símbolos. Slide 4

Geração de código X Interpretação Geração de código Transforma a representação semântica intermediária em código executável em uma linguagem alvo; Características: Processamento considerável; A forma intermediária resultante, que é de código binário específico da máquina, é de baixo-nível; O mecanismo de interpretação é o próprio hardware da CPU; A execução do programa é relativamente rápida; Interpretação Ao invés de traduzir para uma linguagem alvo, realiza as ações semânticas diretamente; Vantagens: Geralmente um interpretador é escrito em uma linguagem de mais alto nível, portanto irá rodar em várias máquinas diferentes. Um gerador de código é voltado para uma máquina específica; Escrever um interpretador exige esforço bem menor; Executar as ações diretamente da representação semântica permite tanto uma melhor verificação quanto informação de erros; Melhor segurança (explorado por Java) Características: O processamento do programa é de mínimo a moderado; A forma intermediária resultante, alguma estrutura de dados específica de sistema, de médio a alto nível; O mecanismo de interpretação é um programa; A execução do programa é relativamente lenta. Slide 5

Por que estudar Compiladores? Estruturação eficaz do problema Compiladores analisam sua entrada, constroem uma representação semântica intermediária e sintetizam sua saída a partir disso; Esse paradigma análise-síntese é muito poderoso e amplamente aplicável; Usando a mesma representação semântica intermediária, um compilador pode ser escrito para L linguagens e M máquinas, bastando escrever as L interfaces de vanguarda diferentes e os M sintetizadores diferentes; Uso eficiente de formalismos Expressões regulares análise léxica Gramáticas livres de contexto análise sintática Gramáticas de atributo tratamento de contexto e extensão para geração de código e interpretação Casamento de padrões e técnicas de programação dinâmica geração de código Uso de ferramentas de geração de programas A entrada para um gerador de programas é de um nível de abstração mais alto que de uma linguagem de programação; Flexibilidade e mutabilidade ampliadas; Código pré-construído pode ser incluído em um programa gerado, aumentando seu poder a quase nenhum custo; Uma descrição formal pode ser usada para gerar mais de um tipo de programa; Exemplo: Flex/Bison; Lex/Yacc. Slide 6

Por que estudar Compiladores? A construção de compiladores tem uma ampla aplicabilidade; O uso de técnicas de construção de compiladores são aplicadas em outros escopos Exemplos: Conversão de formatos diferentes de arquivos; Leituras de arquivos HTML ou PostScript. Compiladores são baseados em algoritmos gerais úteis As estruturas de dados e algoritmos implementados são didaticamente importantes Exemplos: Árvores sintáticas; Tabelas hash; Tabelas pré-processadas ; Coletor de lixo; Programação dinâmica, etc. Enfim, estudar compiladores é solidificar o conhecimento de programação! Slide 7

Propriedades de um bom compilador Gerar código correto; De que adianta um compilador que erra uma vez a cada um milhão; Estar de acordo com a especificação da linguagem; Nada de super ou sub-conjuntos da linguagem; Ser escalável, ou seja, ser capaz de tratar códigos fonte de tamanhos arbitrários; Atualmente isso é muito mais simples já que a quantidade de memória disponível é cada vez maior; Velocidade de compilação não é mais importante; Nada mais de cartões compilar agora é rápido; Algoritmos desejavelmente lineares O(n); Não é interessante a existência de algoritmos nãolineares no processo de compilação; Problema: a otimização de código não é linear; Outras características importantes: Portabilidade do compilador; Portabilidade do código alvo; Slide 8

Slide 9 Histórico de compiladores 1945 1960: Geração de Código Linguagens sendo desenvolvidas lentamente; O uso de compiladores era chamado de programação automática ; Linguagens de alto nível não eram bem vistas; Se o compilador gerava código inferior àquele gerado manualmente com assemblers, para que uma linguagem de alto nível? 1960 1975: Parsing Proliferação de novas linguagens; Nasce a idéia que é melhor ter ferramentas para gerar um compilador rapidamente que gerar código mais eficiente; Mudança no paradigma: maior enfoque na análise que na síntese; Aparecimento de técnicas formais notadamente voltadas para a geração de parsers; 1975 dias atuais: Geração e Otimização de Código; Novos Paradigmas Número de novas linguagens e de novas máquinas caem; Demanda por interfaces com o usuário mais amigáveis (nascimento dos IDEs); Novos paradigmas de programação, como linguagens funcionais e lógicas e programação distribuída; A ênfase agora é o que compilar e não mais como compilar.