geração de código equipe de monitores teoria e implementação de linguagens computacionais –...

20
Geração de Código Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Upload: internet

Post on 22-Apr-2015

108 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Geração de CódigoGeração de Código

Equipe de Monitores

Teoria e Implementação de Linguagens Computacionais – IF688

Page 2: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

RoteiroRoteiro

IntroduçãoVisão geralAlgoritmo de Geração de CódigoFerramentas e exemplos

◦Java Virtual Machine - JVM◦.NET Virtual Machine - CLR

Page 3: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

IntroduçãoIntroduçã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

Page 4: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

IntroduçãoIntrodução

Dependente da arquitetura◦Registradores (tipo, quantidade etc)◦Conjunto de instruções◦Modo de endereçamento◦Sistema Operacional (nativos)

Dificilmente aproveitado para mais de uma plataforma◦Máquina real ou virtual

Page 5: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Visão GeralVisã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 6: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Algoritmos de geraçãoAlgoritmos de geração

Utilizam-se templates para se traduzir as diversas frases de código-fonte

execute [ v := e ]◦evaluate [e]◦assign v

Estrutura Inerentemente recursivaTem como entrada uma estrutura de

objetos◦Visitor◦AST decorada

Page 7: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Máquinas VirtuaisMáquinas Virtuais

JVM◦Máquina vitual JAVA◦Baseada em pilha◦Interpreta os bytecodes presentes em

um .class

Arquivos .class◦Formato binário◦Para gerá-lo precisamos de um assembler

Page 8: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Máquinas VirtuaisMáquinas Virtuais

CLR◦Common Languagem Runtime◦Máquina virtual .NET Framework◦Interpreta arquivos .exe

.exe◦Interpreta apenas os arquivos gerados para a

plataforma◦MONO foi baseado na mesmas definições

Page 9: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Java Virtual MachineFerramentas e utilitários

Page 10: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

AssemblersAssemblers

Jasmin [http://jasmin.sourceforge.net/]

◦Java Assembler Interface◦Biblioteca que converte texto para bytecodes

Java Assembler PlaygroundJava™ Bytecode AssemblerJava Virtual Machine Assembler

Page 11: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Jasmin - InstruçõesJasmin - Instruções

dload <var-num> - Double dstore <var-num> - Double fload <var-num> - Float fstore <var-num> - Float iload <var-num> - Int

iinc <var-num> <amount> Incrementa o inteiro

Instruções da JVM dependem do tipo. integer, float, double etc.

if_icmpeq <label> if_icmpge <label> if_icmpgt <label>

Page 12: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Jasmin – If Then ElseJasmin – If Then Else

if(expr){ comm1;} else { comm2;}

exprCodeiconst_1if_icmpeq elsecomm1Codegoto endifelse: comm2CodeendIf:

Page 13: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Jasmin - WhileJasmin - While

while(expr) {comm

}

startWhile: exprCode iconst_1 if_icmpeq endWhile commCode goto startWhileendWhile:

Page 14: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Jasmin - MétodosJasmin - Métodos

.method doubleLocals(DD)D.limit stack 4.limit locals 4dload_1dload_3dadd dreturn.end method

Page 15: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Jasmin - Gerando executávelJasmin - Gerando executável

java –jar jasmin.jar myfile.j

O local de saída depende dos pacotes utilizados.◦Pode ser indicado local alternativo

Page 16: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Máquina Virtual .NETFerramentas

Page 17: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

AssemblerAssembler

ILAsm.exe◦Microsoft® .NET Framework◦Intermediate Language Assembler◦Componente do .NET Framework◦Tradução para código da plataforma◦Codifica o MSIL◦Não possui GUI

Page 18: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

ILAsm - UsoILAsm - Uso

ilasm [Options] <sourcefile> [Options]◦Utiliza recursos do Próprio Framework◦Seleção de arquitetura, dependencias,

informações de debug, entre outras opções

◦Ilasm /?

Page 19: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Características do .NETCaracterísticas do .NET

Seu assembler não requer “linguagem intermediária”

Assembler compõe o frameworkO código é independente do tipo de dado

◦Tipos básicos: int, double, floatBoa documentação

Especificação em:◦ http://www.cin.ufpe.br/~jfp/MonitoriaCompiladores/

Page 20: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688

Geração de CódigoGeração de Código

José Francisco Pereira {[email protected]}Jobson Ronan {[email protected]}

Teoria e Implementação de Linguagens Computacionais – IF688