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

Preview:

Citation preview

1

Introdução

Prof. Giovanny Lucerogiovanny@ufs.br

2

Compiladores

Um compilador é um programa que traduz um programa escrito numa linguagem fonte para outro equivalente escrito numa linguagem alvo.

Compiladorprograma

fonteprograma

alvo

mensagensde erro

3

esqueleto do programa fonte

pre-processador

programa fonte

COMPILADOR

programa alvo em assembler

montador

código de máquina relocável

carregador

código de máquina absoluto

bibliotecas, arquivos,objetos relocáveis

O contexto de um compilador

4

Análise e Síntese

Análise

– Divide o programa fonte em partes

– cria uma representação intermediária (árvores sintáticas)

Síntese

– constrói o programa alvo

:=m

dptp

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

Análise LéxicaCaracteres 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

identificador

identificador

montante

deposito_inicial

taxa_de_juros 60

expressão

expressão expressão+

*expressão expressão

número

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

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

As fases de um Compiladorprograma fonte

analisador léxico

analisador sintático

analisador semântico

gerador de código intermediário

otimizador de código

gerador de código

gerenciador da tabela de símbolos

tratador de erros

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

Java

ML

Pascal

C

C++

Sparc

MIPS

Pentium

Alpha

Java

ML

Pascal

C

C++

Sparc

MIPS

Pentium

Alpha

CódigoIntermediário

vanguardas retaguardas

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

19

Resumo• O que é um compilador

– 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

Recommended