// 基于语法树的语义检查与名称绑定。 #pragma once #include #include "SysYParser.h" class SemanticContext { public: void BindVarUse(SysYParser::PrimaryContext* use, SysYParser::VarDeclContext* decl) { var_uses_[use] = decl; } SysYParser::VarDeclContext* ResolveVarUse( const SysYParser::PrimaryContext* use) const { auto it = var_uses_.find(use); return it == var_uses_.end() ? nullptr : it->second; } private: std::unordered_map var_uses_; }; // 目前仅检查: // - 变量先声明后使用 // - 局部变量不允许重复定义 SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit);