Please enable JavaScript.
Coggle requires JavaScript to display documents.
Introdução, admin - Coggle Diagram
Introdução, admin
O que é linguagem?
Segundo o dicionário:
"‘the systems were developed using languages such as Fortran and Basic"
Linguagens de
Programação
Traduzir de uma linguagem fonte (mais abstrata) para uma linguagem alvo ( mais concreta)
Compiladores
Duas Etapas: Análise e Síntese
Análise (front-end)
Lê os caracteres de entrada e os agrupa em sequências chamadas tokens
Os tokens podem conter algum valor associado
Os tokens são consumidos na fase seguinte(parsing)
Análise sintática (parsing)
Entrada: tokens gerados pela fase anterior
Com base nos tokens, cira uma representação hierárquica
Tipicamente utilizam-se árvores sintáticas
Análise Semântica
Usa a árvore sintática e a tabela de símbolos para checar consistência semântica do porgrama
Por exemplo: type checking
A linguagem pode permitir coercions
Código Intermediário
Durante o processo de tradução, um compilador pode construir um aou mais representações intermedíarias do programa :
Árvores sintáticas são representações intermediárias, usadas durante a fase de análise
Otimização de Código
Realiza transformações no código com o objetivo de melhorar algum aspecto relevante
Análise + Transformação
Transformação
3 more items...
Análise
3 more items...
Síntese (back-end)
Seleção de Instruções
Reescrever operações de IR em operações de linguagem de máquina
A princípio, comumente ainda abstrai quantidade de registradores simbólicos
Pode se beneficiar de operações especiais na máquina alvo
Alocação de registradores
É mais eficiente realizar operações manipulando dados próximos a CPU, em registradores
Objetivo: minimizar spilling
processo de descarga e recarga de registradores a partir da memória
como associar as muitas variaveis do programa a poucos registradores?
Geração de Código
Vários problemas complexos surgem durante
geração de código, e pra piorar, interagem
Reordenar instruções pode acabar aumentando
o número de registradores necessários
Alocação de registradores pode criar ‘falsa’
sensação de dependência entre valores, o que prejudica instruction scheduling
Quais as vantagens de separar as fases e usar representação intermediária?
Separação permite criar múltiplos compiladores