120 likes | 263 Views
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
E N D
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 • Geração de saída • Geração de código • Optimização de código • Tabela de símbolos • Tratamento de erros Jorge Morais LFA 1999/2000 - 2
Tabela de símbolos DEI • 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 Jorge Morais LFA 1999/2000 - 3
Tratamento de erros DEI • 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 Jorge Morais LFA 1999/2000 - 4
Geração de código intermédio DEI • 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 Jorge Morais LFA 1999/2000 - 5
Optimização de código DEI • 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 Jorge Morais LFA 1999/2000 - 6
Geração de código final DEI • 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 Jorge Morais LFA 1999/2000 - 7
Contexto dum compilador DEI Jorge Morais LFA 1999/2000 - 8
Pré processador DEI • 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 Jorge Morais LFA 1999/2000 - 9
Assembler DEI • 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 Jorge Morais LFA 1999/2000 - 10
Loader/Link Editor DEI • 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 Jorge Morais LFA 1999/2000 - 11
Ferramentas de auxílio DEI • 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) Jorge Morais LFA 1999/2000 - 12