#pragma once #include "ir.h" #include #include #include #include #include #include class IRInterpreter { public: void runUntil(const std::vector& quads, int breakLine); void runStepByStep(const std::vector& quads); void execute(const Quad& q, const std::vector& quads, const std::unordered_map& labelToIndex); std::string findLastSource(const std::vector& quads, const std::string& target); using Value = std::variant; struct CallFrame { int return_pc; std::unordered_map locals; }; Value getOrZero(const std::string& name); std::unordered_map memory_; std::unordered_map types_; int pc_ = 0; std::unordered_set breakpoints_; int lastBreakpointPC = -1; // 在类中记录 int asInt(const std::string& s); std::string asStr(const std::string& s); Value evalBinary(const std::string& op, const Value& a, const Value& b); void dumpVariables(int breakLine); std::stack callStack_; std::vector paramStack_; std::unordered_map labelToIndex_; std::vector quads_; };