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

Slides:



Advertisements
Apresentações semelhantes
Tópicos em Compiladores
Advertisements

Introdução à Ciência da Computação Linguagens de Programação.
Compiladores Claudio Benossi
Compiladores I Cristiano Damiani Vasconcellos
Linguagem de Montagem Visão geral.
Histórico do Java 1990 James Gosling (Sun Microsystems)
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Arquitetura da Máquina Virtual Java
Programação Lógica: PROLOG
Linguagens de programação
Alexandre Parra Site: Linguagem Java Alexandre Parra Site:
Ferramentas Programação
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Tradutores de Linguagens
Prof. Msc. Raul Paradeda Aula 2 Introdução
Introdução a Programação Orientada a Objetos
Conhecendo o Visual Studio.NET
Construção de Compiladores para MSIL usando Microsoft Phoenix
Paradigmas de programação
JAVA: Conceitos Iniciais
PROGRAMAÇÃO I UNIDADE 1.
Análise léxica e sintática
Aula prática – geração de código (.NET)
Análise léxica e sintática
Aula prática - análise contextual
JAVA Linguagem Ambiente de Desenvolvimento
Conceitos de Linguagem de Programação
MANUEL M. SERRANO ARIMUYA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO
Curso de ISI (Implantação de Sistemas de Informação)
Teoria e Implementação de Linguagens Computacionais – IF688
Análises léxica e sintática
SableCC José Francisco Pereira Equipe de Monitores
Configuração do Ambiente de Desenvolvimento
Augusto Sampaio e Paulo Borba Centro de Informática
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva
Análise léxica e sintática
Conceitos de J2EE para a WEB
XIV Jornada de Cursos .NET com C# Antônio Júnior Bruno Inojosa.
Java Bytecode Software Básico Mitsuo Takaki.
Execução de programas Cap. VIII.
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
3/4/2015 Prof. Msc George Cabral Bacharelado em Sistema de Informação Ambientes de Desenvolvimento de Software.
Análises léxica e sintática
Analisador Léxico Prof. Alexandre Monteiro
Projeto de Linguagens de Programação
Processadores de Linguagens
Módulo I Capítulo 1: Introdução ao curso
Diagrama de Componentes
Back-End Compilação aula-11-back-end.pdf.
Linguagens de Programação II
AST no ANTLR Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza
Algoritmos e Programação I
Aula de SableCC Teoria e Implementação de Linguagens Computacionais (Compiladores) - IF688 – Artur Ribeiro de Aquino – ara Allan Jefferson – ajss.
Semântica de Linguagens de Programação
Compiladores – IF688 Professor: André Santos
Introdução a Programação Orientada a Objetos
Java Disciplina: Programação II Professora: Mai-Ly Vanessa.
.NET Por: Pablo Diego vulgo “El Tigre”. O que é.NET? É uma plataforma de desenvolvimento. Com o.NET é possível de desenvolver vários tipos de aplicação.
CloudSim Um framework para modelagem e simulação de infraestrutura e serviços de Computação em Nuvem.
Geração de Código Difícil de generalizar, devido à variedade de características das máquinas-destino: –Conjunto de registradores (se houver) –Pilha –Instruções.
PLP – JavaCC Java Compiler Compiler
 é uma iniciativa da Microsoft, que visa uma plataforma única para desenvolvimento e execução de sistemas e aplicações.  Todo e qualquer código gerado.
Módulo II Capítulo 2: Bibliotecas
Influencias sobre o Projeto da Linguagem
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Análise Contextual Mauro Araújo Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal de Pernambuco.
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Equipe de Monitores.
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 José Francisco Pereira Jobson Ronan
Transcrição da apresentação:

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

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

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

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

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

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

Java Virtual Machine Ferramentas e utilitários

Assemblers Jasmin [ ◦Java Assembler Interface ◦Biblioteca que converte texto para bytecodes Java Assembler Playground Java™ Bytecode Assembler Java Virtual Machine Assembler

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

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

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

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

Jasmin - 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.NET Ferramentas

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

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

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: ◦

Geração de Código José Francisco Pereira Jobson Ronan Teoria e Implementação de Linguagens Computacionais – IF688