Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan...

Post on 19-Apr-2015

106 views 3 download

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 Silvajrjs@cin.ufpe.br

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 Silvajrjs@cin.ufpe.br