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
Visão Geral Código fonte Análise léxica AST Análise sintática Análise semântica Geração de código Tokens AST decorada Código objeto
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 destino Chamada de fase de síntese
Introdução Depende da arquitetura alvo Nú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 ;)
Máquinas Virtuais 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 Performance Linguagens 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
Exemplo Demonstração...
Dicas o projeto! 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
Referências Iniciais JVM CLR 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/aula4/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 Silva jrjs@cin.ufpe.br