Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouYasmin Vento Alterado mais de 9 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.