Escolar Documentos
Profissional Documentos
Cultura Documentos
Compiladores
Sumário
Introdução
Histórico
Contexto de um compilador
A estrutura de um compilador
Análise Léxica
Análise Sintática
Análise Semântica
Geração de Código Intermediário
Otimizador de Código Intermediário
Gerador de Código
Otimizador de Código Alvo
Observações
Exercı́cios
Referências
Profa. Beatriz Trinchão Andrade 2 / 54
Compiladores
Introdução
Sumário
Introdução
Histórico
Contexto de um compilador
A estrutura de um compilador
Análise Léxica
Análise Sintática
Análise Semântica
Geração de Código Intermediário
Otimizador de Código Intermediário
Gerador de Código
Otimizador de Código Alvo
Observações
Exercı́cios
Referências
Profa. Beatriz Trinchão Andrade 3 / 54
Compiladores
Introdução
Introdução
I Linguagens de programação
Introdução
I Linguagens de programação
I Notação para descrição de computação
I Linguagem deve ser traduzida para uma forma executável por
um computador
Compiladores
I Compiladores
I Sistemas de software que fazem essa tradução
I Programa em linguagem-fonte → programa em
linguagem-objeto ou erros
I Relatar erros
Sumário
Introdução
Histórico
Contexto de um compilador
A estrutura de um compilador
Análise Léxica
Análise Sintática
Análise Semântica
Geração de Código Intermediário
Otimizador de Código Intermediário
Gerador de Código
Otimizador de Código Alvo
Observações
Exercı́cios
Referências
Profa. Beatriz Trinchão Andrade 7 / 54
Compiladores
Histórico
Histórico
Histórico
C7 06 0000 0002
Histórico
MOV X, 2
I Montador (assembler) faz a tradução da linguagem de
montagem para a de máquina
I Linguagem de montagem é dependente da máquina
Histórico
X = 2
I Linguagem Fortran
I Desenvolvida por John Backus (IBM) entre 1954 e 1957
Histórico
I Noam Chomsky
I Estudos da estrutura da linguagem natural
I Construção de compiladores mais simples e parcialmente
automática
I Classificação das linguagens de acordo com complexidade de
suas gramáticas (hierarquia de Chomsky)
I Décadas de 1960 e 1970: estudo de algoritmos para
reconhecimento de linguagens livres de contexto (parsing)
Histórico
I Técnicas de otimização
I Estudos da estrutura da linguagem natural
I Automatização da análise sintática (geradores de analisadores
sintáticos)
I Geradores de sistemas de varredura (analisadores léxicos)
I Ambientes de desenvolvimento integrado (IDEs)
Sumário
Introdução
Histórico
Contexto de um compilador
A estrutura de um compilador
Análise Léxica
Análise Sintática
Análise Semântica
Geração de Código Intermediário
Otimizador de Código Intermediário
Gerador de Código
Otimizador de Código Alvo
Observações
Exercı́cios
Referências
Profa. Beatriz Trinchão Andrade 14 / 54
Compiladores
Contexto de um compilador
Contexto de um compilador
Contexto de um compilador
I Pré-processador
I Coleta de código distribuı́do em diferentes arquivos
I Deleção de comentários
I Substituição de macros
I Montador (assembler)
I Recebe código em Assembly
I Traduz para código de máquina relocável (referências e
endereços de memórias são simbólicos)
Contexto de um compilador
Contexto de um compilador
I Carregador (loader)
I Reúne todos os arquivos de objeto executáveis na memória
para execução
I Resolve os endereços realocáveis
I Geralmente é parte do SO
I Interpretador
I Também é um tradutor de linguagens
I Execução direta do programa-fonte
I Editor (IDEs)
I Depurador
I Registra muita ou toda a informação do código-fonte
I Gerenciador de perfil
I Coleta estatı́sticas de um programa-objeto durante sua
execução (número de chamadas a um procedimento, ou
porcentagem de tempo de execução gasto por cada um)
I Gerenciador de projeto
Sumário
Introdução
Histórico
Contexto de um compilador
A estrutura de um compilador
Análise Léxica
Análise Sintática
Análise Semântica
Geração de Código Intermediário
Otimizador de Código Intermediário
Gerador de Código
Otimizador de Código Alvo
Observações
Exercı́cios
Referências
Profa. Beatriz Trinchão Andrade 21 / 54
Compiladores
A estrutura de um compilador
Partes de um compilador
Fases de um compilador
Fases de um compilador
Análise Léxica
Análise Léxica
I Exemplo:
a[index] = 4 + 2
Análise Léxica
I Exemplo:
a[index] = 4 + 2
I Tokens
Análise Sintática
Análise Sintática
Análise Sintática
I Árvore gramatical para
a[index] = 4 + 2
I Exemplo simplificado de gramática: ”Gramatica.txt”
Análise Sintática
Análise Semântica
Análise Semântica
I Significado do programa
I Atributos que podem ser determinados antes da execução,
mas que não devem ser expressos como sintaxe
I Semântica estática
I Declarações, verificação de tipos
I Reúne informações sobre os tipos
I Salvas na árvore ou na tabela
Análise Semântica
I Passo 2
t = 6
a[index] = t
I Passo 2
t = 6
a[index] = t
I Passo 3
a[index] = 6
Gerador de Código
Gerador de Código
Gerador de Código
I Exemplo:
I Uso de instrução de deslocamento ao invés de multiplicação
I Uso de modo de endereçamento mais poderoso
Sumário
Introdução
Histórico
Contexto de um compilador
A estrutura de um compilador
Análise Léxica
Análise Sintática
Análise Semântica
Geração de Código Intermediário
Otimizador de Código Intermediário
Gerador de Código
Otimizador de Código Alvo
Observações
Exercı́cios
Referências
Profa. Beatriz Trinchão Andrade 47 / 54
Compiladores
Observações
Observações:
Sumário
Introdução
Histórico
Contexto de um compilador
A estrutura de um compilador
Análise Léxica
Análise Sintática
Análise Semântica
Geração de Código Intermediário
Otimizador de Código Intermediário
Gerador de Código
Otimizador de Código Alvo
Observações
Exercı́cios
Referências
Profa. Beatriz Trinchão Andrade 50 / 54
Compiladores
Exercı́cios
Exercı́cios
Exercı́cios
Sumário
Introdução
Histórico
Contexto de um compilador
A estrutura de um compilador
Análise Léxica
Análise Sintática
Análise Semântica
Geração de Código Intermediário
Otimizador de Código Intermediário
Gerador de Código
Otimizador de Código Alvo
Observações
Exercı́cios
Referências
Profa. Beatriz Trinchão Andrade 53 / 54
Compiladores
Referências
Referências: