• Nenhum resultado encontrado

Como construir um compilador utilizando ferramentas Java

N/A
N/A
Protected

Academic year: 2021

Share "Como construir um compilador utilizando ferramentas Java"

Copied!
46
0
0

Texto

(1)

Como construir um compilador utilizando

ferramentas Java

Aula extra – A Máquina Virtual Java

Prof. Márcio Delamaro

delamaro@icmc.usp.br

(2)

Processo de Compilação Normal

~

Myfile1.c

Myfile2.c

Myfile3.c

Myfile4.c

Myfile1.obj

Myfile2.obj

Myfile3.obj

Myfile4.obj

Myfile.exe

Compilacao

,

~

linkedicao

,

(3)

Processo de Execução Normal

c:> myfile

FFFF:FFFF

00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111 11111111111111

Myfile.exe

S.O. (Load)

S.O.

Myfile

0000:0000

(4)

Processo de Compilação Java

Compilacao

,

~

Myfile4.class

Myfile3.class

Myfile2.class

Myfile1.class

Myfile1.java

Myfile2.java

Myfile3.java

Myfile4.java

Classe Myfile1

Classe Myfile2

Classe Myfile3

Class Myfile4

(5)

Processo de Execução Java

c:> java Myfile1

java.exe

0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111

S.O.

JVM

0000:0000

FFFF:FFFF

S.O. (Load)

(6)

Processo de Execução Java

c:> java Myfile1

JVM Load

0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111

S.O.

JVM

0000:0000

FFFF:FFFF

S.O. (Load)

java.exe

Myfile1.class

(7)

Processo de Execução Java

c:> java Myfile1

0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111

S.O.

JVM

0000:0000

FFFF:FFFF

S.O. (Load)

java.exe

Myfile1.class

JVM Load

Myfile2.class

(8)

Processo de Execução Java

c:> java Myfile1

0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 0000000000000 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111 1111111111111

S.O.

JVM

0000:0000

FFFF:FFFF

S.O. (Load)

java.exe

Myfile1.class

JVM Load

Myfile2.class

Myfile3.class

Myfile4.class

(9)

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

(10)

O que temos numa classe

Descrição completa do que foi definido dentro da classe

Variáveis

Métodos

Superclasses

Interfaces

Classes referenciadas

(11)

classvista

http://home.earthlink.net/

~

gregstp/ClassVista.html

(12)

jclasslib

http://www.ej-technologies.com/products/jclasslib/overview.html

(13)

A JVM

Veremos a seguir qual é a estrutura da JVM, quais os tipos

de dados que suporta, como opera.

(14)

Tipos de dados

A JVM reconhece diferentes tipos de dados

(15)

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

(16)

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)

(17)

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

(18)

Área de Código

A JVM possui uma área com as informações sobre as

classes carregadas

JVM

Cod.

MyClass1

x, y

main

execute

MyClass2

valor

compare

Prog. Counter

(19)

Pilha

Pilha mantém informação sobre métodos sendo executados

JVM

Cod.

Prog. Counter

Pilha

FRAME 1

MyClass1.main

(20)

Pilha

Pilha mantém informação sobre métodos sendo executados

JVM

Cod.

Prog. Counter

Pilha

FRAME 1

FRAME 2

MyClass1.execute

MyClass1.main

(21)

Pilha

Pilha mantém informação sobre métodos sendo executados

JVM

Cod.

Prog. Counter

Pilha

FRAME 1

FRAME 2

FRAME 3

MyClass2.compare

MyClass1.execute

MyClass1.main

(22)

Frame

JVM

Cod.

Prog. Counter

Pilha

FRAME 1

FRAME 2

MyClass1.execute

MyClass1.main

Pilha

Locais

0

1

2

3

n

(23)

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

(24)

Frame: locais

u = t.soma(10,20);

u

main

t

(25)

Frame: locais

u = t.soma(10,20);

k

main

t

u

this

y (20)

x (10)

(26)

Frame: pilha

A pilha é utilizada para fazer qualquer tipo de operação

(27)

Frame: pilha

A pilha é utilizada para fazer qualquer tipo de operação

Instruções para colocar valor no topo da pilha

(28)

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

(29)

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

(30)

Frame: pilha

k = x + y;

ILOAD_1

0

soma

this

10

20

20

main

t

u

t

10

(31)

Frame: pilha

k = x + y;

ILOAD_1

ILOAD_2

10

soma

this

10

20

0

(32)

Frame: pilha

k = x + y;

ILOAD_1

ILOAD_2

IADD

20

soma

this

10

20

0

10

(33)

Frame: pilha

k = x + y;

ILOAD_1

ILOAD_2

IADD

ISTORE_3

30

soma

this

10

20

0

(34)

Frame: pilha

k = x + y;

ILOAD_1

ILOAD_2

IADD

ISTORE_3

30

soma

this

10

20

return k;

ILOAD_3

(35)

Frame: pilha

k = x + y;

ILOAD_1

ILOAD_2

IADD

ISTORE_3

30

soma

this

10

20

30

return k;

ILOAD_3

IRETURN

20

main

t

u

t

10

(36)

Frame: pilha

k = x + y;

ILOAD_1

ILOAD_2

IADD

ISTORE_3

return k;

ILOAD_3

IRETURN

30

main

t

u

(37)

Heap

JVM

Cod.

Prog. Counter

Pilha

Heap

Obj

Obj

Obj

Obj

Obj

Obj

(38)

Heap: alocação

Existem instruções para alocar espaço par os objetos

new MyClass2

this

10

20

30

30

HEAP

(39)

Concorrência na JVM

Como é que se pode ter concorrência em Java?

Troca de mensagens...

Cod.

Prog. Counter

Pilha

Heap

JVM1

JVM2

msg

msg

Cod.

Prog. Counter

Pilha

Heap

Múltiplas threads

(40)

Múltiplas threads

Cod.

Pilha

Prog. Counter

JVM

Heap

(41)

Múltiplas threads

Pilha

Prog. Counter

Thread 2

Heap

Cod.

JVM

Prog. Counter

Pilha

Thread 1

(42)

Múltiplas threads

PC

Codigo

HEAP

PC

Pilha

Pilha

(43)

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

(44)

Para visualizar

X++

prog.x

prog.x.ClasseA.jas

prog.x.ClasseB.jas

Jasmin

Jasmin

ClassA.class

ClassB.class

(45)

Para visualizar

X++

prog.x

prog.x.ClasseA.jas

prog.x.ClasseB.jas

Jasmin

Jasmin

ClassA.class

ClassB.class

(46)

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/

Referências

Documentos relacionados

Neste caso, embora possam existir nestes locais, forrageiras de alta qualidade, como o capim-de-capivara (Hymenachne amplexicaulis), a disponibilidade de recursos forrageiros vai

alimentares: de crianças menores de seis meses: Aleitamento Materno Exclusivo (AME): nenhum outro alimento é oferecido à criança, além do leite materno; Aleitamento Materno

Quando uma única força atua sobre um corpo que aponta para um ponto O fixo ou se afastando dele, dizemos se tratar de um movimento sob a ação de uma força central (figura

Somos uma organização cultural sem fins lucrativos e beneficiente, que congrega RADIOAMADORES de diversas faixas de ondas, promovendo contatos via éter entre

O sistema de aquisição de grandezas analógicas - SAGA, tem como objetivo obter, armazenar históricos, criticar, tratar, gerar curvas de previsão e tendência de

Transmissor (MASTER) e receptor (SLAVE) de áudio wireless com dois canais de entrada no MASTER e dois canais de saída no SLAVE.. Cada MASTER pode estabelecer um link de áudio

• PUSHW – Transfere um dado imediato do operador fonte (16 bits) para o topo da pilha..

A população idosa tem apresentado forte crescimento nas últimas décadas, porém muitos ambientes, produtos e serviços ainda não modificaram seu perfil para suprir