A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Prof. Giovanny Lucero giovanny@ufs.br Introdução Prof. Giovanny Lucero giovanny@ufs.br."— Transcrição da apresentação:

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

2 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

3 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

4 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

5 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, ... )

6 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

7 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)

8 Á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

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

10 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.

11 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.

12 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

13 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

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

15 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

16 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++

17 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

18 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

19 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


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

Apresentações semelhantes


Anúncios Google