- Статус
- Оффлайн
- Регистрация
- 4 Авг 2024
- Сообщения
- 132
- Реакции
- 4
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я это делал за 5 минут.
Custom JVM:
#include <iostream>
#include <stack>
#include <map>
#include <vector>
#include <string>
#include <stdexcept>
class ClassObject {
private:
std::string name;
std::map<std::string, std::vector<int>> methods;
public:
ClassObject(const std::string& name) : name(name) {}
void addMethod(const std::string& methodName, const std::vector<int>& bytecode) {
methods[methodName] = bytecode;
}
std::vector<int> getMethod(const std::string& methodName) {
return methods[methodName];
}
};
class SimpleJVM {
private:
std::stack<int> stack;
std::map<std::string, ClassObject*> classLoader;
public:
SimpleJVM() {}
~SimpleJVM() {
for (auto& entry : classLoader) {
delete entry.second;
}
}
ClassObject* loadClass(const std::string& className) {
if (classLoader.find(className) != classLoader.end()) {
return classLoader[className];
}
ClassObject* cls = new ClassObject(className);
cls->addMethod("main", {0x10, 0x01, 0x15, 0x00});
classLoader[className] = cls;
return cls;
}
void execute(const std::string& className) {
ClassObject* cls = loadClass(className);
std::vector<int> method = cls->getMethod("main");
for (int instr : method) {
switch(instr) {
case 0x10:
stack.push(42);
break;
case 0x01:
std::cout << stack.top() << std::endl;
stack.pop();
break;
case 0x15:
stack.push(100);
break;
case 0x00:
return;
default:
throw std::runtime_error("Unknown instruction");
}
}
}
};
int main() {
SimpleJVM jvm;
jvm.execute("MyClass");
}
Код: