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