feat: python
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
class SimpleVM:
|
||||
# 初始化方法
|
||||
def __init__(self):
|
||||
self.stack = []
|
||||
self.locals = {}
|
||||
self.globls = {}
|
||||
|
||||
def load_const(self, const):
|
||||
# 将常量推到栈中
|
||||
self.stack.append(const)
|
||||
print(f"加载常量: {const} -> 栈: {self.stack}")
|
||||
|
||||
def store_name(self, name):
|
||||
if not self.stack:
|
||||
raise RuntimeError("栈为空")
|
||||
# 取出值
|
||||
value = self.stack.pop()
|
||||
# 存储到字典中
|
||||
self.locals[name] = value
|
||||
print(f"存储变量: {name} = {value}")
|
||||
|
||||
def load_name(self, name):
|
||||
if name in self.locals:
|
||||
value = self.locals[name]
|
||||
elif name in self.globls:
|
||||
value = self.globls[name]
|
||||
else:
|
||||
raise RecursionError(f"name:{name} is not defined")
|
||||
self.stack.append(value)
|
||||
print(f"加载变量: {name} = {value} -> 栈: {self.stack}")
|
||||
|
||||
def binary_add(self):
|
||||
if len(self.stack) < 2:
|
||||
raise RecursionError("栈中元素不足")
|
||||
#
|
||||
a = self.stack.pop()
|
||||
b = self.stack.pop()
|
||||
result = a + b
|
||||
self.stack.append(result)
|
||||
print(f"加法: {a} + {b} = {result} -> 栈: {self.stack}")
|
||||
|
||||
def return_value(self):
|
||||
if not self.stack:
|
||||
return None
|
||||
value = self.stack.pop()
|
||||
print(f"返回: {value}")
|
||||
return value
|
||||
|
||||
|
||||
def vm_execution():
|
||||
vm = SimpleVM()
|
||||
# 输出即将执行的代码说明
|
||||
print("执行代码: a = 10; b = 20; c = a + b")
|
||||
# 构造指令序列
|
||||
instructions = [
|
||||
("LOAD_CONST", 10), # 加载常量10
|
||||
("STORE_NAME", "a"), # 存储到变量a
|
||||
("LOAD_CONST", 20), # 加载常量20
|
||||
("STORE_NAME", "b"), # 存储到变量b
|
||||
("LOAD_NAME", "a"), # 加载变量a
|
||||
("LOAD_NAME", "b"), # 加载变量b
|
||||
("BINARY_ADD",), # 执行加法
|
||||
("STORE_NAME", "c"), # 存储到变量c
|
||||
("LOAD_NAME", "c"), # 加载变量c
|
||||
("RETURN_VALUE",), # 返回值
|
||||
]
|
||||
|
||||
for instruction in instructions:
|
||||
# 获取操作嘛
|
||||
op = instruction[0]
|
||||
# 获取操作参数
|
||||
args = instruction[1:] if len(instruction) > 1 else []
|
||||
# 判断不同指令,来调用不同的方法
|
||||
if op == "LOAD_CONST":
|
||||
vm.load_const(args[0])
|
||||
elif op == "STORE_NAME":
|
||||
vm.store_name(args[0])
|
||||
elif op == "LOAD_NAME":
|
||||
vm.load_name(args[0])
|
||||
elif op == "BINARY_ADD":
|
||||
vm.binary_add()
|
||||
elif op == "RETURN_VALUE":
|
||||
result = vm.return_value()
|
||||
|
||||
print(f"最终打印结果c={result}")
|
||||
|
||||
|
||||
vm_execution()
|
||||
Reference in New Issue
Block a user