Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan...
Transcript of Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan...
Geração de Código
Teoria e Implementação de Linguagens Computacionais – IF688
Jobson Ronan Jeronimo da [email protected]
Roteiro
Visão Geral Introdução Algoritmo de geração de código Máquinas Virtuais
Visão Geral
Código objeto
Análise sintática
Código fonte
AST
Análise semântica
Geração decódigo
AST decorada
Análiseléxica
Tokens
Introdução
Fase essencial do back-end de um compilador que objetiva preencher o gap semântico entre a linguagem fonte e a máquina de destinoChamada de fase de síntese
Introdução
Depende da arquitetura alvoNúmero de registradores e formas de
endereçamento
Dificilmente consegue ser reaproveitado
• Máquinas Virtuais: M x N vs. M + N
Algoritmo de geração de código Aplicação de templates para traduzir as
diversas frases do código fonte execute[V:=E] =
evaluate E assign V
Estrutura inerentemente recursiva Tem como entrada uma estrutura de
objetos Padrão Visitor ;)
Definições: Particionamento de uma máquina: sistema
IBM VM/ESA para o IBM 370 (1965). SO rodando sobre SO: Unix sobre Windows Software que simula o comportamento de
uma máquina (diferente daquela na qual roda).
• Emuladores Ambientes independentes de plataforma
para linguagens de programação
Máquinas Virtuais
O-Code machine para BCPL (1960’s) P-Code machine para UCSD Pascal (1970
´s) Smalltalk (1970´s) Java Virtual Machine para Java (1995) Microsoft .NET: VB, C#, C++, ... (2001)
Máquinas Virtuais
Impacto na PerformanceLinguagens Interpretadas: JavaScript,
Haskell, etc.• Portabilidade e Segurança• 200x mais lentas que C
Linguagens Baseadas em Bytecodes• Linguagens semi-compiladas• 10 a 20x mais lentas que C• JIT: 5x mais lenta que C
Máquinas Virtuais
Exemplo
Demonstração...
Optar por gerar código CLR no projeto Maior suporte dos monitores
Possivelmente a melhor metodologia é a engenharia reversa
Testar bem a análise semântica antes de implementar a geração de código
O Projeto não é simples Porém tem escopo bem definido
Dicas o projeto!
Referências Iniciais
JVM http://www.cin.ufpe.br/~if688/ppt/JVM-5.ppt http://mrl.nyu.edu/~meyer/jvm/jasmin.html
CLR http://www.cin.ufpe.br/~if688/laboratorio/aula
4/seminario.ppt John Gough, Compiling for the .NET
Common Language Runtime
Geração de Código
Teoria e Implementação de Linguagens Computacionais – IF688
Jobson Ronan Jeronimo da [email protected]