I - Noções dum compilador Partes dum compilador Ferramentas de construção de compiladores Bibliografia aconselhada: –Aho, Sethi e Ullman – Cap. 1 LFA 1999/ Jorge 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/ Jorge 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/ Jorge 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/ Jorge 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/ Jorge 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 = id LFA 1999/ Jorge Morais
Geração de código final Código objecto Linguagem assembly/linguagem máquina recolocável No exemplo, em assembly, temos: MOVFid2, R1 ADDF#97.0, R1 MOVFR1, id1 LFA 1999/ Jorge Morais
Contexto dum compilador LFA 1999/ Jorge 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/ Jorge 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/ Jorge 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/ Jorge 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/ Jorge Morais