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

13
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva [email protected]

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

Page 1: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

Geração de Código

Teoria e Implementação de Linguagens Computacionais – IF688

Jobson Ronan Jeronimo da [email protected]

Page 2: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

Roteiro

Visão Geral Introdução Algoritmo de geração de código Máquinas Virtuais

Page 3: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

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

Page 4: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

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

Page 5: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

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

Page 6: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

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 ;)

Page 7: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

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

Page 8: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

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

Page 9: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

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

Page 10: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

Exemplo

Demonstração...

Page 11: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

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!

Page 12: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

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

Page 13: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br.

Geração de Código

Teoria e Implementação de Linguagens Computacionais – IF688

Jobson Ronan Jeronimo da [email protected]