Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouÍsis Calvo Alterado mais de 10 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.