Prof. Giovanny Lucero giovanny@ufs.br Introdução Prof. Giovanny Lucero giovanny@ufs.br.

Slides:



Advertisements
Apresentações semelhantes
1 Estruturas de Controle Márcia J. N. Rodrigues Lucena Especialização em Técnicas e Ferramentas de Apoio à Decisão Departamento.
Advertisements

Implementando um Montador com LEX e YACC
Prof. Celso Gramática.
Grupo Paralelismo – Unesp RC
FORTRAN 90 Denise Yumi Takamura.
SQL Procedural Junho/2006.
Funções de Linha 24/04/06. Funções de Linha Gerar ou construir novo valor não existente na tabela inicial. Valor construído a partir de dados de uma ou.
SISTEMAS DE NUMERAÇÃO Material elaborado pelo Prof. José Luiz Mendes e alterado pela Profa Janine.
Modularização de Código. Modularizar código Construção do algoritmo em um módulo único (Início...Fim/ Program... End) Único arquivo.
Introdução ao Fortran 4/abril/2006. Pseudocódigo Compreensão do problema Elaboração da lógica de resolução Tradução da lógica para pseudocódigo.
Utilização do montador Daedalus
Prototipação de um Interpretador para IMP com ML Juliana Vizzotto Júlio Machado Fevereiro 2002.
Teste Estrutural de Software
Análise e Solução de Problemas
Servidores e Programação Web Redes de Computadores.
Mais sobre classes Baseada no Livro: Deitel&Deitel - C++ How To program Cap. 7 Prentice Hall 1994 SCE 213 Programação Orientada a Objetos, ICMC - USP 2.
Introdução A fim de preparar a geração de código, deve-se relacionar o fonte estático do programa às ações em tempo de execução. Durante a execução, o.
Geração de Código Cap. 8. Introdução Fase final para um compilador Entrada é uma representação intermediária do código fonte e a saída é um programa para.
Arquitetura de Computadores I
1 Tradução Dirigida à Sintaxe Prof. Ricardo Santos.
Design Patterns – Composite e Visitor
Adriana da Silva Jacinto CT-282 Prof. Dr.Parente Técnicas de diagnóstico 1º semestre 2005.
CE-262 Ontologia e Web Semântica Prof. José M Parente de Oliveira
CES-11 LAB 03 Bitmap Quadtree
CES-41 COMPILADORES Capítulo IV Complementos de Análise Léxica.
ITA - Instituto Tecnológico de Aeronáutica Aula #1.1 – Tutorial de Web Services utilizando o NetBeans 5.5 Disciplina: CE 262 – Ontologias e Web Semântica.
Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.
1.3 – Interpretadores – Compiladores versus Interpretadores
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo III Declarações e Comandos de Atribuição.
CES-41 COMPILADORES Aulas Práticas
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VII Variáveis Indexadas Numéricas.
Capítulo IX – Ponteiros 9.1 – Introdução 9.2 – Relação entre ponteiros e variáveis indexadas 9.3 – Alocação dinâmica de memória 9.4 – Variáveis indexadas,
CES-41 COMPILADORES Aulas Práticas Capítulo III Análise Semântica no Yacc.
Capítulo III Diagramas de Transições
CE-262 Ontologia e Web Semântica Prof. José M Parente de Oliveira Sala 120 – Prédio da Computação Lógica de Descrições.
Capítulo V Análise Sintática
CES-41 COMPILADORES Capítulo I Introdução.
Capítulo I – Conceitos Primários 1.1 – Estrutura de um computador 1.2 – Informações manipuladas por um computador 1.3 – Evolução das linguagens de programação.
I – Informação Digital – Tema de Discussão Escola Politécnica da USP MBA EPUSP em Gestão e Engenharia do Produto EP018 O Produto Internet e suas Aplicações.
I – Informação Digital – Trabalho Grupo Escola Politécnica da USP MBA EPUSP em Gestão e Engenharia do Produto EP-018 – O Produto Internet e suas Aplicações.
Curso Técnico em Informática La Salle - Canoas
MAC499 - Trabalho de Formatura Supervisionado Sistema de Reconhecimento de Escrita On-Line.
Business Process Management e Workflow - jBPM Aluno: Filipe Ferraz Salgado Orientador: Francisco Reverbel Novembro 2006.
EEL170 COMPUTAÇÃO I Antonio Cláudio Gómez de Sousa 1a série de slides versão 19/03/2012.
Aritmética de ponto flutuante Erros
Desempenho A rápida taxa de melhoria na tecnologia de computadores veio em decorrência de dois fatores: avanços na tecnologia utilizada na construção.
C/C++.
Laboratório de Programação Prof. Oscar Luiz Monteiro de Farias
Gerador de Analisadores Léxicos
Linguagens Formais e Tradutores Análise Sintática - 1
Linguagens Formais e Tradutores Linguagens Regulares (Revisão)
Capítulo 1 Introdução 1.1 O que é um sistema operacional
Tecnologia para Web JavaScript Enrique Pimentel Leite de Oliveira
Recursividade Estrutura de Dados.
Elaine Harada Teixeira de Oliveira – DCC – ICE - UFAM
Prof: Graciano Notação Científica.
Frações Professor: Graciano Pianezzer Beletti.
Curso de Programação em C++ Universidade Federal do Ceará Departamento de Engenharia Estrutural e Construção Civil Prof: Evandro Parente Junior Monitor:
Baseado no documento do Prof. Ronaldo Martins da Costa
LINGUAGENS DE PROGRAMAÇÃO
Sistemas Operacionais e Windows XP Aula 04 – DCA0302.
04:27 Introdução Tipos de Fluxo de Dados e de Arquivos Manipulação de Arquivos em Java Classes FileReader e FileWriter Classes FileInputStream e FileOutputStream.
Robótica: Sistemas Sensorial e Motor
Introdução Ciência da Computação estudo de algoritmos –ÊNFASE ao estudo de DADOS armazenamento manipulação refinamento (a partir de dados cru) estrutura.
Análise Sintática – Parte 1
1 Static Metaprogramming In C++ K. CZARNECKI e U. EISENECKER Universidade Federal de Santa Catarina Centro Tecnológico Departamento de Informática e Estatística.
1.
Nome alunos 1 Título UC. Título – slide 2 Conteúdo Conteúdo 2.
Compiladores - Introdução. O que é um Compilador? “Um compilador é um programa que lê um programa escrito em uma linguagem (linguagem fonte) e a traduz.
COMPILADORES 06 Prof. Marcos.
Transcrição da apresentação:

Prof. Giovanny Lucero giovanny@ufs.br Introdução Prof. Giovanny Lucero giovanny@ufs.br

Compiladores Um compilador é um programa que traduz um programa escrito numa linguagem fonte para outro equivalente escrito numa linguagem alvo. programa fonte programa alvo Compilador mensagens de erro

O contexto de um compilador esqueleto do programa fonte montador pre-processador código de máquina relocável programa fonte bibliotecas, arquivos, objetos relocáveis carregador COMPILADOR Carregador: também conhecido como link editor código de máquina absoluto programa alvo em assembler

Análise e Síntese := m + Análise Divide o programa fonte em partes cria uma representação intermediária (árvores sintáticas) Síntese constrói o programa alvo dp * tp 60 Ferramentas que fazem análise: Editores de estruturas Pretty printers Verificadores estáticos Interpretadores Formatadores de texto Interpretadores de consultas

Análise do programa fonte Análise léxica (linear ou scanning) Análise sintática (hierárquica ou gramatical) Análise semântica (restrições sensíveis ao contexto: tipos, coerções, ... )

Caracteres são agrupados em Tokens Análise Léxica Caracteres são agrupados em Tokens montante := deposito_inicial + taxa_de_juros * 60 É decomposto nos seguintes tokens: Identificador montante Símbolo de atribuição := Identificador deposito_inicial Sinal de adição Identificador taxa_de_juros Sinal de multiplicação Número 60

Análise Sintática Agrupa os tokens do programa fonte em frases gramaticais. Reconhece a estrutura gramatical do programa fonte a qual é representada por uma árvore gramatical. (árvore gramatical = árvore de parser = árvore de derivação) Devolve uma árvore sintática (sintaxe abstrata)

Árvore de derivação (gramatical) enunciado de atribuição identificador := expressão montante expressão + expressão identificador expressão * expressão deposito_inicial identificador número taxa_de_juros 60

Árvore sintática Uma árvore sintática (ou sintaxe abstrata) é uma representação condensada da árvore gramatical := montante deposito_inicial taxa_de_juros 60 + *

Definição da Sintaxe dos programas A estrutura gramatical dos programas é expressa recursivamente Por exemplo, podemos definir expressões pelas regras: Qualquer identificador é uma expressão. Qualquer número é uma expressão. Se expressão1 e expressão2 são expressões, então também o são expressão1 + expressão2 expressão1 * expressão2 (expressão1) Formalismo usado: GLCs.

Qual é divisão entre léxico e sintático? Construções léxicas requerem somente de algum mecanismo de repetição Em geral, tudo o que se pode descrever com expressões regulares Construções sintáticas requerem recursividade Exemplos léxico: identificadores, numeros, ... Exemplo sintaxe: parênteses balançados, casamento de begin com ends, expressões. Exemplo de léxico onde exp. Regulares não são suficientes: comentários aninhados.

Análise Semântica Verifica erros semânticos detectáveis estaticamente verificação de tipos, resolução de sobrecarga, coerção, variáveis inicializadas antes de serem usadas, ... := montante deposito_inicial taxa_de_juros 60 REAL-ADD REAL-MULT inttoreal

As fases de um Compilador programa fonte analisador léxico analisador sintático analisador semântico gerenciador da tabela de símbolos tratador de erros gerador de código intermediário *** Aumentar o tamanho das letras Fases = Módulos otimizador de código gerador de código programa alvo

Passagens Por eficiência, é comum que várias fases sejam agrupadas numa única passagem

O agrupamento das fases front-end (vanguarda) as fases que dependem mais do programa fonte análise léxica, sintática e semântica e geração de código intermediário. back-end (retaguarda) as fases que dependem mais do programa alvo geração e otimização de código Interface entre vanguarda e retaguarda Código intermediário

Portabilidade e Modularidade vanguardas retaguardas Java Sparc Java Sparc ML MIPS ML MIPS Pascal Pascal Código Intermediário Pentium Pentium C Portabilidade inclusive só com uma única linguagem. Ex. JVM. Uma única vanguarda. Retaguardas para c/plataforma. Com várias linguagens: Eiffel compila para JVM e aproveita toda a portabilidade de Java. C Alpha C++ Alpha C++

Os primos do compilador Pré-processadores processadores de macros, inclusão de arquivos, extensões de linguagens (p.e. linguagens de consulta embutidas) Lings. de Marcação com páginas dinâmicas (JSP, ASP, ....) Montadores (Ensambladores) produzem código de máquina relocável

Ferramentas Geradores de analisadores gramaticais Geradores de analisadores léxicos Dispositivos de tradução dirigida pela sintaxe Dispositivos de fluxo de dados Geradores de tradutores dirigidos por semântica Análise de fluxo de dados para otimização Tradutores dirigidos por sintaxe: ainda no meio científico-acadêmico

Resumo O que é um compilador As fases de um compilador Ferramentas Análise sintática, análise semântica e síntese O contexto de um compilador As fases de um compilador Ferramentas Referências: Capítulos 1 do Dragão e do Tigre