I - Noções dum compilador
description
Transcript of I - Noções dum compilador
![Page 1: I - Noções dum compilador](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/1.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/2.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/3.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/4.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/5.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/6.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/7.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/8.jpg)
Contexto dum compilador
LFA 1999/2000 - 8Jorge Morais
![Page 9: I - Noções dum compilador](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/9.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/10.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/11.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082423/568150af550346895dbec9d9/html5/thumbnails/12.jpg)
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