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

Post on 22-Apr-2015

108 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Geração de CódigoGeraçã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

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

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

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

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

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

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

Java Virtual MachineFerramentas e utilitários

AssemblersAssemblers

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

◦Java Assembler Interface◦Biblioteca que converte texto para bytecodes

Java Assembler PlaygroundJava™ Bytecode AssemblerJava Virtual Machine Assembler

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>

Jasmin – If Then ElseJasmin – If Then Else

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

exprCodeiconst_1if_icmpeq elsecomm1Codegoto endifelse: comm2CodeendIf:

Jasmin - WhileJasmin - While

while(expr) {comm

}

startWhile: exprCode iconst_1 if_icmpeq endWhile commCode goto startWhileendWhile:

Jasmin - MétodosJasmin - Métodos

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

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

Máquina Virtual .NETFerramentas

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

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 /?

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/

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

José Francisco Pereira {jfp@cin.ufpe.br}Jobson Ronan {jrjs@cin.ufpe.br}

Teoria e Implementação de Linguagens Computacionais – IF688

top related