A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688."— Transcrição da apresentação:

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

2 Roteiro Introdução Visão geral Algoritmo de Geração de Código Ferramentas e exemplos ◦Java Virtual Machine - JVM ◦.NET Virtual Machine - CLR

3 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

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

5 Visão Geral Código objeto Análise sintática Código fonte AST Análise semântica Geração de código AST decorada Análise léxica Tokens

6 Algoritmos 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 recursiva Tem como entrada uma estrutura de objetos ◦Visitor ◦AST decorada

7 Má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

8 Má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

9 Java Virtual Machine Ferramentas e utilitários

10 Assemblers Jasmin [http://jasmin.sourceforge.net/] ◦Java Assembler Interface ◦Biblioteca que converte texto para bytecodes Java Assembler Playground Java™ Bytecode Assembler Java Virtual Machine Assembler

11 Jasmin - Instruções dload - Double dstore - Double fload - Float fstore - Float iload - Int iinc Incrementa o inteiro Instruções da JVM dependem do tipo. integer, float, double etc. if_icmpeq if_icmpge if_icmpgt

12 Jasmin – If Then Else if(expr){ comm1; } else { comm2; } exprCode iconst_1 if_icmpeq else comm1Code goto endif else: comm2Code endIf:

13 Jasmin - While while(expr) { comm } startWhile: exprCode iconst_1 if_icmpeq endWhile commCode goto startWhile endWhile:

14 Jasmin - Métodos.method doubleLocals(DD)D.limit stack 4.limit locals 4 dload_1 dload_3 dadd dreturn.end method

15 Jasmin - Gerando executável java –jar jasmin.jar myfile.j O local de saída depende dos pacotes utilizados. ◦Pode ser indicado local alternativo

16 Máquina Virtual.NET Ferramentas

17 Assembler 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

18 ILAsm - Uso ilasm [Options] [Options] ◦Utiliza recursos do Próprio Framework ◦Seleção de arquitetura, dependencias, informações de debug, entre outras opções ◦Ilasm /?

19 Características do.NET Seu assembler não requer “linguagem intermediária” Assembler compõe o framework O código é independente do tipo de dado ◦Tipos básicos: int, double, float Boa documentação Especificação em: ◦http://www.cin.ufpe.br/~jfp/MonitoriaCompiladores/

20 Geraçã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


Carregar ppt "Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688."

Apresentações semelhantes


Anúncios Google