Como construir um compilador utilizando ferramentas Java



Documentos relacionados
JVM Máquina Virtual Java

Arquitectura de Computadores II. Máquinas Virtuais

file.j. a Baseado no Jasmin User Guide. (

Compiladores Tópicos de JVM

AULA Uma linguagem de programação orientada a objetos

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Linguagem de Programação Introdução a Linguagem Java

Programação de Computadores - I. Profª Beatriz Profº Israel

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

FBV - Linguagem de Programação II. Um pouco sobre Java

4-1. Parte2: A Arquitetura do Conjunto de Instruções

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Keeper of Knowledge. Capítulo 1 Conceitos Básicos do Java

PADI 2015/16. Aula 1 Introdução à Plataforma.NET

Introdução à Programação

Linguagens de. Aula 02. Profa Cristiane Koehler

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Programação por Objectos. Java

Linguagem de Montagem 2. Operações e Operandos

Introdução à Arquitetura de Computadores

3 Classes e instanciação de objectos (em Java)

Arquitetura da Máquina Virtual Java

Desenvolvimento OO com Java Orientação a objetos básica

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

JAVA VIRTUAL MACHINE (JVM)

2 Orientação a objetos na prática

Conceitos de Linguagens de Programação

Computadores de Programação (MAB353)

Arquitetura e Organização de Computadores

Introdução à Linguagem Java

Programação Orientada a Objetos

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Aula teórica 3. Tema 3.Computadores e linguagens Linguagens de Programação Compilação e linkagem LP Java. Preparado por eng.

Java. Marcio de Carvalho Victorino

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Linguagens de Programação

Orientação a Objetos

PROGRAMAÇÃO JAVA. Parte 1

Computação II Orientação a Objetos

Programação Orientada a Objetos

Universidade da Beira Interior. Sistemas Distribuídos

Análise de Programação

Introdução a POO. Introdução a Linguagem C++ e POO

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Programação por Objectos. Java

2. O gerador de código estende DepthFirstAdapter implementando a interpretação que gerará código Jasmin a partir de Smallpascal.

Conceitos Básicos sobre Programação Prática

Marco Aurélio Uma Visão Geral Sobre Plataforma Java

Prof. Marcelo Heitor Teixeira marceloheitor.com. Java Aula Introdutória. # História e Anatomia Java

Algoritmos e Programação

Edeyson Andrade Gomes

Capítulo 8. Software de Sistema

O programa abaixo exemplifica o uso da classe Image para carregar e mostrar uma imagem localizada em um arquivo.

1. SINTAXE DA LINGUAGEM ASSEMBLY

Algoritmos e Técnicas de

Módulo 06 Desenho de Classes

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Introdução a Java. Hélder Nunes

(Aula 17) Threads em Java

ÇÃO COM OBJECTOS PROGRAMAÇÃ. Programação com Objectos. Programação com Objectos TUDO É UM OBJECTO TUDO É UM OBJECTO ÍNDICE.

Desenvolvimento de um Simulador de Gerenciamento de Memória

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES

Universidade Federal de Uberlândia

Tipos agregados. Tipos estruturados

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

Nível da Microarquitetura

SISTEMAS OPERACIONAIS

POO Programação Orientada a Objetos. Classes em Java

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Sistemas Operacionais

Sistema Operacional Ex: Complexo Computador multiusuário com vários terminais Tem que administrar todos os pedidos de usuários e assegurar que eles

Algoritmos e Programação II. Sobrecarga

Programação de Computadores III

Computadores de Programação (MAB353)

INF 1620 P1-10/04/02 Questão 1 Nome:

Estrutura de Dados Básica

INF 1005 Programação I

Memória. Espaço de endereçamento de um programa Endereços reais e virtuais Recolocação dinâmica Segmentação

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

UNIVERSIDADE FEDERAL DO PARANÁ

JAVA. Fabrício de Sousa

Programação de Computadores II TCC

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Criar a classe Aula.java com o seguinte código: Compilar e Executar

Objetivos: Entender o funcionamento dos programas Java via linha de comando

Linguagem de Programação JAVA

ESQUEMA AULA PRÁTICA 0 Familiarização com o Ambiente de Desenvolvimento NetBeans Construção do primeiro programa em java.

Introdução a Linguagem

Transcrição:

Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula extra A Máquina Virtual Java Prof. Márcio Delamaro delamaro@icmc.usp.br

Como construir um compilador utilizando ferramentas Java p. 2/2 Processo de Compilação Normal Myfile1.c Myfile1.obj Myfile2.c Myfile2.obj Myfile.exe Myfile3.c Myfile3.obj Myfile4.c Myfile4.obj ~ ~ Compilacao, linkedicao,

Como construir um compilador utilizando ferramentas Java p. 3/2 Processo de Execução Normal c:> myfile FFFF:FFFF Myfile.exe S.O. (Load) 0 1 0 1 0 1 0 1 0 1 0 1 Myfile 0 1 0 1 0 1 0 1 S.O. 0000:0000

Como construir um compilador utilizando ferramentas Java p. 4/2 Processo de Compilação Java Myfile1.java Myfile1.class Classe Myfile1 Myfile2.java Myfile2.class Classe Myfile2 Myfile3.java Myfile3.class Classe Myfile3 Myfile4.java Myfile4.class Class Myfile4 Compilacao, ~

Como construir um compilador utilizando ferramentas Java p. 5/2 Processo de Execução Java c:> java Myfile1 FFFF:FFFF java.exe S.O. (Load) JVM S.O. 0000:0000

Como construir um compilador utilizando ferramentas Java p. 5/2 Processo de Execução Java c:> java Myfile1 FFFF:FFFF Myfile1.class java.exe JVM Load S.O. (Load) JVM S.O. 0000:0000

Como construir um compilador utilizando ferramentas Java p. 5/2 Processo de Execução Java c:> java Myfile1 FFFF:FFFF Myfile2.class Myfile1.class java.exe JVM Load S.O. (Load) JVM S.O. 0000:0000

Como construir um compilador utilizando ferramentas Java p. 5/2 Processo de Execução Java c:> java Myfile1 Myfile4.class FFFF:FFFF Myfile3.class Myfile2.class Myfile1.class java.exe JVM Load S.O. (Load) JVM S.O. 0000:0000

Código nativo X bytecode Programa C é transformado em código nativo que é executado diretamente pelo hardware MOV AX,[SI] ADD AX, 23 MOV SI, 0FDC MOV [SI], AX Programa JVM também possui operações parecidas com as de máquina mas estas são executadas pela JVM ILOAD_3 ICONST_23 IADD ISTORE_4 Como construir um compilador utilizando ferramentas Java p. 6/2

Como construir um compilador utilizando ferramentas Java p. 7/2 O que temos numa classe Descrição completa do que foi definido dentro da classe Variáveis Métodos Superclasses Interfaces Classes referenciadas

Como construir um compilador utilizando ferramentas Java p. 8/2 classvista http://home.earthlink.net/~gregstp/classvista.html

Como construir um compilador utilizando ferramentas Java p. 9/2 jclasslib http://www.ejtechnologies.com/products/jclasslib/overview.html

Como construir um compilador utilizando ferramentas Java p. 10/2 A JVM Veremos a seguir qual é a estrutura da JVM, quais os tipos de dados que suporta, como opera.

Como construir um compilador utilizando ferramentas Java p. 11/2 Tipos de dados A JVM reconhece diferentes tipos de dados

Como construir um compilador utilizando ferramentas Java p. 11/2 Tipos de dados A JVM reconhece diferentes tipos de dados Valores armazenados numa variável tem um tipo próprio e só pode ser utilizado em operações compatíveis

Como construir um compilador utilizando ferramentas Java p. 11/2 Tipos de dados A JVM reconhece diferentes tipos de dados Valores armazenados numa variável tem um tipo próprio e só pode ser utilizado em operações compatíveis Tipos primitivos: byte, short, int, long, char, float, double, returnaddress, (boolean)

Como construir um compilador utilizando ferramentas Java p. 11/2 Tipos de dados A JVM reconhece diferentes tipos de dados Valores armazenados numa variável tem um tipo próprio e só pode ser utilizado em operações compatíveis Tipos primitivos: byte, short, int, long, char, float, double, returnaddress, (boolean) Tipos referenciados: objetos e arrays

Como construir um compilador utilizando ferramentas Java p. 12/2 Área de Código A JVM possui uma área com as informações sobre as classes carregadas JVM Prog. Counter Cod. MyClass1 x, y main execute MyClass2 valor compare

Como construir um compilador utilizando ferramentas Java p. 13/2 Pilha Pilha mantém informação sobre métodos sendo executados JVM Prog. Counter Cod. Pilha FRAME 1 MyClass1.main

Como construir um compilador utilizando ferramentas Java p. 13/2 Pilha Pilha mantém informação sobre métodos sendo executados JVM Prog. Counter Cod. Pilha FRAME 2 MyClass1.execute FRAME 1 MyClass1.main

Como construir um compilador utilizando ferramentas Java p. 13/2 Pilha Pilha mantém informação sobre métodos sendo executados JVM Prog. Counter Cod. Pilha FRAME 3 MyClass2.compare FRAME 2 MyClass1.execute FRAME 1 MyClass1.main

Como construir um compilador utilizando ferramentas Java p. 14/2 Frame JVM Prog. Counter Cod. Locais Pilha Pilha n FRAME 2 MyClass1.execute FRAME 1 3 2 1 0 MyClass1.main

Como construir um compilador utilizando ferramentas Java p. 15/2 Frame: locais Cada variável local ocupa 1 (ou 2) posições do vetor de variáveis locais Os valores passados como argumentos ocupam as primeiras posições deste vetor public int soma(int x, int y) { int k; } k = x + y; return k;... u = t.soma(10,20);

Como construir um compilador utilizando ferramentas Java p. 16/2 Frame: locais main u = t.soma(10,20); t u

Como construir um compilador utilizando ferramentas Java p. 16/2 Frame: locais k y (20) x (10) u = t.soma(10,20); main this t u

Como construir um compilador utilizando ferramentas Java p. 17/2 Frame: pilha A pilha é utilizada para fazer qualquer tipo de operação

Como construir um compilador utilizando ferramentas Java p. 17/2 Frame: pilha A pilha é utilizada para fazer qualquer tipo de operação Instruções para colocar valor no topo da pilha

Como construir um compilador utilizando ferramentas Java p. 17/2 Frame: pilha A pilha é utilizada para fazer qualquer tipo de operação Instruções para colocar valor no topo da pilha Instruções para operar sobre os elementos no topo da pilha

Como construir um compilador utilizando ferramentas Java p. 17/2 Frame: pilha A pilha é utilizada para fazer qualquer tipo de operação Instruções para colocar valor no topo da pilha Instruções para operar sobre os elementos no topo da pilha Instruções para armazenar valores que estão no topo da pilha

Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; ILOAD_1 soma 0 20 10 this main 20 t u 10 t

Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; ILOAD_1 ILOAD_2 soma 0 20 10 this 10

Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; ILOAD_1 ILOAD_2 soma 0 20 IADD 20 10 this 10

Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; ILOAD_1 ILOAD_2 IADD ISTORE_3 soma 0 20 10 this 30

Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; return k; ILOAD_1 ILOAD_2 IADD ISTORE_3 soma 30 20 10 this ILOAD_3

Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; ILOAD_1 ILOAD_2 IADD soma 30 20 10 return k; this 30 ISTORE_3 main ILOAD_3 IRETURN t u 20 10 t

Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; return k; ILOAD_1 ILOAD_2 IADD ISTORE_3 main ILOAD_3 IRETURN t u 30

Como construir um compilador utilizando ferramentas Java p. 19/2 Heap JVM Prog. Counter Heap Cod. Pilha Obj Obj Obj Obj Obj Obj

Como construir um compilador utilizando ferramentas Java p. 20/2 Heap: alocação Existem instruções para alocar espaço par os objetos new MyClass2 HEAP 30 20 10 this 30

Como construir um compilador utilizando ferramentas Java p. 21/2 Concorrência na JVM Como é que se pode ter concorrência em Java? Troca de mensagens... JVM1 Prog. Counter Cod. JVM2 msg Prog. Counter Cod. Heap Pilha Heap Pilha msg Múltiplas threads

Como construir um compilador utilizando ferramentas Java p. 22/2 Múltiplas threads JVM Cod. Prog. Counter Heap Pilha

Como construir um compilador utilizando ferramentas Java p. 22/2 Múltiplas threads JVM Cod. Prog. Counter Thread 1 Prog. Counter Thread 2 Heap Pilha Pilha

Como construir um compilador utilizando ferramentas Java p. 23/2 Múltiplas threads Codigo PC Pilha PC Pilha HEAP

Como construir um compilador utilizando ferramentas Java p. 24/2 Jasmin: Assembler JVM.class public MyClass1.super java/lang/object.field x Lpackage2/MyClass2;.field y Lpackage2/MyClass2;.method public <init>()v.limit stack 1.limit locals 1 Label1: aload_0 invokespecial java/lang/object/<init>()v return.end method

Como construir um compilador utilizando ferramentas Java p. 25/2 Para visualizar prog.x prog.x.classea.jas ClassA.class Jasmin X++ prog.x.classeb.jas ClassB.class Jasmin

Como construir um compilador utilizando ferramentas Java p. 25/2 Para visualizar prog.x prog.x.classea.jas ClassA.class Jasmin X++ prog.x.classeb.jas ClassB.class Jasmin

Como construir um compilador utilizando ferramentas Java p. 26/2 Referências Jasmin: http://jasmin.sourceforge.net/ JVM e Jasmin: Jon Meyer, Troy Downing, Java Virtual Machine, O Reilly Tim Lindholm, Frank Yellin, The Java Virtual Machine Specification, The Java Series, Addison Wesley http://java.sun.com/docs/books/vmspec/