I - Noções dum compilador

12
I - Noções dum compilador • Partes dum compilador • Ferramentas de construção de compiladores • Bibliografia aconselhada: – Aho, Sethi e Ullman – Cap. 1 LFA 1999/2000 - 1 Jorge Morais

description

I - Noções dum compilador. DEI. Partes dum compilador Ferramentas de construção de compiladores Bibliografia aconselhada: Aho, Sethi e Ullman – Cap. 1. Jorge Morais. LFA 1999/2000 - 1. Partes dum compilador. DEI. Análise Análise léxica Análise sintáctica Análise semântica - PowerPoint PPT Presentation

Transcript of I - Noções dum compilador

Page 1: I - Noções dum compilador

I - Noções dum compilador

• Partes dum compilador

• Ferramentas de construção de compiladores

• Bibliografia aconselhada:– Aho, Sethi e Ullman – Cap. 1

LFA 1999/2000 - 1Jorge Morais

Page 2: I - Noções dum compilador

Partes dum compilador

• Análise– Análise léxica– Análise sintáctica– Análise semântica

• Geração de saída– Geração de código– Optimização de código

• Tabela de símbolos• Tratamento de erros

LFA 1999/2000 - 2Jorge Morais

Page 3: I - Noções dum compilador

Tabela de símbolos

• Identificadores e respectivos atributos• Variáveis:

– Tipo– Âmbito

• Funções– Número de argumentos– Lista com tipos dos argumentos– Método de passagem (valor/referência)– Tipo de retorno

LFA 1999/2000 - 3Jorge Morais

Page 4: I - Noções dum compilador

Tratamento de erros

• Detectar e emitir erro• Avançar para resto da compilação• Erros léxicos – resto da entrada não forma nenhum

token• Erros sintácticos – posição do token não obedece

às regras sintácticas• Erros semânticos – apesar de estar sintacticamente

correcta, a estrutura não faz sentido

LFA 1999/2000 - 4Jorge Morais

Page 5: I - Noções dum compilador

Geração de código intermédio

• Instruções duma Máquina Abstracta

• Exemplo: y = x + 'a' ;– Tabela de símbolos: id1 {y,float}; id2 {x,float}

t1 = (float)97

t2 = id2 + t1

id1 = t2

LFA 1999/2000 - 5Jorge Morais

Page 6: I - Noções dum compilador

Optimização de código

• Tentar optimizar o código final de modo a ficar mais rápido

• No exemplo anterior pode-se reduzir o número de instruções para apenas uma:id1 = id2 + 97.0

LFA 1999/2000 - 6Jorge Morais

Page 7: I - Noções dum compilador

Geração de código final

• Código objecto

• Linguagem assembly/linguagem máquina recolocável

• No exemplo, em assembly, temos:MOVF id2 , R1

ADDF #97.0 , R1

MOVF R1 , id1

LFA 1999/2000 - 7Jorge Morais

Page 8: I - Noções dum compilador

Contexto dum compilador

LFA 1999/2000 - 8Jorge Morais

Page 9: I - Noções dum compilador

Pré processador

• Produzem a entrada para compiladores• Processamento de macros

– Simplificação de grandes construções

• Inclusão de ficheiros– Ficheiros de cabeçalho

• Pré processador “racional”– Aumento de facilidades na linguagem

• Extensões de linguagem– Código embebido doutras linguagens

LFA 1999/2000 - 9Jorge Morais

Page 10: I - Noções dum compilador

Assembler

• Código assembly

• Mnemónicas código máquina

• Gera código máquina recolocável:– a cada variável é associado um endereço– cada instrução máquina com endereços é

marcada para posterior recolocação

LFA 1999/2000 - 10Jorge Morais

Page 11: I - Noções dum compilador

Loader/Link Editor

• Loader costuma fazer as duas tarefas

• Adicionar o endereço onde os dados serão carregados ao endereço recolocável

• Ligar vários programas compilados separadamente

• Alterar endereços de referências externas

LFA 1999/2000 - 11Jorge Morais

Page 12: I - Noções dum compilador

Ferramentas de auxílio

• Geradores de parsers (yacc, bison)• Geradores de scanning (lex, flex)• Engenhos de tradução dirigida pela sintaxe

(gramáticas de atributos)• Geradores de código automático (uso de

templates)• Engenhos de fluxo de dados (optimização

de código)

LFA 1999/2000 - 12Jorge Morais