19
1 Introdução Prof. Giovanny Lucero [email protected]

1 Introdução Prof. Giovanny Lucero [email protected]

Embed Size (px)

Citation preview

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

1

Introdução

Prof. Giovanny [email protected]

Page 2: 1 Introdução Prof. Giovanny Lucero giovanny@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

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

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

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

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

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

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

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

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

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

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)

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

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

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

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

+

*

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

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.

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

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

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

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

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

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

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

14

Passagens

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

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

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

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

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

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

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

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

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

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

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