I - Noções dum compilador
description
Transcript of 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
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
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
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
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
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
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
Contexto dum compilador
LFA 1999/2000 - 8Jorge Morais
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
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
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
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