-
Notifications
You must be signed in to change notification settings - Fork 1
/
LEIAME.txt
97 lines (49 loc) · 3.25 KB
/
LEIAME.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
UnB - Software Básico 2/2015 - Leitor/Exibidor
======
Autores:
- Abilio E. C. de Oliveira 10/0006132
- Marcus da Silva Ferreira 10/0056881
- Michael Rodrigues 09/0126432
Compilação
======
É provido uma makefile para geração dos binários. Pelo terminal, acesse a pasta referente a este LEIAME.txt e execute ‘make’.
Dois binários serão gerados
- LeitorExibidor.exe (aplicação que lê e exibe o .class)
- JVM.exe (o interpretador de bytecode - não implementado ainda)
Caso não deseje utilizar o makefile, será exigido executar a seguinte linha de comando:
gcc -std=c99 src/Common/common.c src/Util/util.c src/ClassLoader/Class/class.c src/ClassLoader/Class/AttributeInfo/attributeinfo.c src/ClassLoader/Class/ConstantPool/constantpool.c src/ClassLoader/Class/FieldInfo/fieldinfo.c src/ClassLoader/Class/MethodInfo/methodinfo.c src/ClassLoader/classloader.c src/JVM/maquina/maquina.c src/JVM/main.c
Execução
======
Para executar a JVM, se dirija ao terminal e execute './JVM.exe <ClassName> [opcoes]'
As opções de linhas de comando disponíveis para a execução da JVM podem ser acessadas executando:
./JVM.exe <ClassName> [--help]
Organização
=======
Segue a estrutura de pastas e seus significados
./ -> pasta que contem os arquivos do projeto (aqui serão postos os executáveis)
./documentação -> documentacao doxygen
./html -> arquivos html da documentação doxygen
./testes -> contem nossos arquivos java para testes
./src -> codigos fonte
./Common -> Modulo com estruturas comuns a todos os modulos e variaveis globais
./Util -> Modulo com funcoes e estruturas para lidar com rotinas de I/O
./JVM -> Modulo contendo o 'int main(int argc, char** argv)' do interpretador Java (JVM)
./maquina -> Submodulo contendo as entidades responsáveis por administrar a execução da JVM
./ClassLoader -> Modulo que lida com o carregamento em memoria de um '.class' de forma estruturada
./Class -> Modulo que define a estrutura de um ponto class e fornece a funcionalidade necessaria para carregar um .class para memoria
./AttributeInfo -> Modulo que define a estrutura de um AttributeInfo e as funcoes para tratar tal estrutura
./ConstantPool -> Modulo que define a estrutura de um ConstantPool e as funcoes para tratar tal estrutura
./FieldInfo -> Modulo que define a estrutura de um FieldInfo e as funcoes para tratar tal estrutura
./MethodInfo -> Modulo que define a estrutura de um MethodInfo e as funcoes para tratat tal estrutura
Observacoes
=======
Tentamos organizar este projeto num padrão orientado a objetos. Cada módulo deve possuir um variado numero de pastas, e ao menos dois arquivos que indiquem suas estruturas e funcoes relacionadas. Geralmente:
- X.h -> define as estruturas de tal modulo
- X.c -> funcoes visiveis a outros modulos,
porem somente acessiveis via uma variavel do tipo do modulo
que tenha sido inicializada pela funcao initX()
- private.c -> funcoes somente visiveis ao modulo X
- subpastas -> submodulos
Utilizando ponteiros para funcoes em estruturas, nos possibilitou simular uma falsa orientacao objeto visando facilitar a manutenibilidade da aplicacao e tambem visando uma melhor escalabilidade.
--
(c)