Compiladores. Conceitos Básicos

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

Compiladores I Prof. Ricardo Santos (cap 1)

Autômatos e Linguagens

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

Introdução parte II. Compiladores. Mariella Berger

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

Projeto de Compiladores

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

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

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

Introdução aos Compiladores

Compiladores. Análise Semântica

Compiladores. Análise Léxica

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

Compiladores Aula 1. Celso Olivete Júnior.

Compiladores. Introdução

CP Compiladores I Prof. Msc.. Carlos de Salles

Introdução à Programação

Conceitos de Linguagens de Programação

Compiladores. Introdução à Compiladores

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

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

Linguagens de Programação Aula 3

INE5421 LINGUAGENS FORMAIS E COMPILADORES

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

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

FACULDADE LEÃO SAMPAIO

Compiladores. Fabio Mascarenhas

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

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

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

Compiladores. Análise Léxica

Linguagens de Programação

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

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

Compiladores. Prof. Bruno Moreno

Paradigmas de Programação

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

EA876 - Introdução a Software de Sistema

Prof. Adriano Maranhão COMPILADORES

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

Noções de compilação

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

Capítulo 1. Aspectos Preliminares

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

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

Noções de compilação

Tratamento dos Erros de Sintaxe. Adriano Maranhão

16. Compilação no Linux

Compiladores Análise Semântica

Projeto de Compiladores

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

Compiladores - Especificando Sintaxe

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

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

Linguagens de Programação Classificação

Programação de Computadores:

Compiladores Análise Semântica

PROGRAMAÇÃO I. Introdução

Compiladores 02 Analise léxica

Ambiente de desenvolvimento

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

Compiladores Aula 3. Celso Olivete Júnior.

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

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

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

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

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

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

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

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

Programação I A Linguagem C. Prof. Carlos Alberto

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

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

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

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

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

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

Linguagem C. André Tavares da Silva.

Identificadores Nome de variáveis, constantes, métodos, etc...

Analisador Léxico parte II

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.

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

I LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1

Revisão. Fases da dacompilação

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

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

IFSC/Florianópolis - Programação Orientada a Objetos com Java - prof. Herval Daminelli

IV.2 Aspectos Léxicos Convencionais

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

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

INE5622 INTRODUÇÃO A COMPILADORES

Interfaces de Vanguarda do Compilador

Trabalho de Linguagens Formais e Compilação

Construção de um compilador para a linguagem Panda

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

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

Transcrição:

Compiladores Conceitos Básicos

Processadores de Linguagem De forma simples, um compilador é um programa que recebe como entrada um programa em uma linguagem de programação a linguagem fonte e o traduz para um programa equivalente em outra linguagem a linguagem objeto.

Processadores de Linguagem Se o programa for um programa em uma linguagem de máquina executável, poderá ser chamado pelo usuário para processar entrada e produzir saída.

Processadores de Linguagem Um interpretador é outro tipo comum de processador de linguagem. Um interpretador executa diretamente as operações especificadas no programa fonte sobre as entradas fornecidas pelo usuário.

Sistema de Processamento de Linguagem Pré-processador: possui a tarefa de coletar o programa fonte e também pode expandir macros em comandos na linguagem fonte.

Sistema de Processamento de Linguagem Editor: resolve os endereços de memória externas, onde o código em um arquivo pode referir-se a uma localização em outro arquivo.

Sistema de Processamento de Linguagem Carregador: reúne todos os arquivos objeto executáveis na memória para execução.

Estrutura de um Compilador

Análise Léxica O analisador léxico lê um fluxo de caracteres que compõem o programa fonte e os agrupa em seqüências significativas, chamadas lexemas. Para cada lexema, o analisador léxico produz como saída um token no formato: <nome-token, valor-atributo>

Análise Léxica O nome-token é um símbolo abstrato que é usado durante a análise sintática, e o segundo componente, valor-atributo, aponta para uma entrada na tabela de símbolos referente a esse token. A informação da entrada da tabela de símbolos é necessária para a análise semântica e para a geração de código.

Análise Léxica Exemplo: suponha o seguinte comando de atribuição: position = initial + rate * 60 Veja os lexemas criados e passado ao analisador sintático: 1. position é um lexema mapeado em um token <id, 1>, onde id é um símbolo abstrato que significa identificador e 1 aponta para a entrada da tabela de símbolos onde se encontra position. A entrada da tabela de símbolos para um identificador mantém informações sobre o identificador, como seu nome e tipo.

Análise Léxica 2. O símbolo de atribuição = é um lexema mapeado para o token < = >. Como esse token não precisa de um valor de atributo, omitimos o segundo componente. 3. initial é um lexema mapeado para o token <id, 2>, onde 2 aponta para a entrada da tabela de símbolos onde se encontra initial. 4. + é um lexema para o token < + >.

Análise Léxica 5. Rate é um lexema mapeado para o token <id, 3> onde o valor 3 aponta para a entrada da tabela de símbolos onde se encontra rate. 6. * é um lexema mapeado para o token < * >. 7. 60 é um lexema mapeado para o token <60>

Análise Sintática O analisador sintático utiliza os primeiros componentes dos tokens produzidos pelo analisador léxico para criar uma representação intermediária tipo árvore. Árvore de sintaxe em que cada nó interior representa uma operação, e os filhos do nó representam os argumentos da operação.

Análise Semântica O analisador semântico utiliza a árvore de sintaxe e as informações na tabela de símbolos para verificar a consistência semântica do programa fonte com a definição da linguagem. Ele também reúne informações gerais sobre os tipos e as salva na árvore de sintaxe ou na tabela de símbolos, para uso na geração de código intermediário.

Análise Semântica Exemplo: verificação de tipo Exigência que um índice de vetor seja um inteiro. Coerções: conversões de tipos. Exemplo: suponha que position, initial e rate tenham sido declarados como números de ponto flutuante, e que o lexema 60 tenha a forma de um inteiro.

Geração de Código Intermediário Reproduzir o código-fonte em um código intermediário t1 = inttofloat (60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3

Otimização de Código É uma fase independente das arquiteturas de máquina e realiza algumas transformações no código intermediário com o objetivo de produzir um código objeto melhor. t1 = id3 * 60.0 id1 = id2 + t1

Geração de Código Mapeia a representação intermediária do código-fonte em uma linguagem objeto. LDF R2, id3 MULF R2, R2, #60.0 LDF R1, id2 ADDF R1, R1, R2 STF id1, R1