// 符号表:记录局部变量/常量/参数定义。 #pragma once #include #include #include #include #include "SysYParser.h" enum class BaseTypeKind { Int, Float, Void }; struct TypeDesc { BaseTypeKind base = BaseTypeKind::Int; std::vector dims; // 为空表示标量;数组维度允许首维为 -1 表示形参不定长 bool is_const = false; }; enum class SymbolKind { Var, Const, Param }; struct SymbolEntry { SymbolKind kind = SymbolKind::Var; SysYParser::VarDefContext* var_decl = nullptr; SysYParser::ConstDefContext* const_decl = nullptr; SysYParser::FuncFParamContext* param_decl = nullptr; TypeDesc type; // 记录类型信息 bool is_const = false; std::optional const_value; }; class SymbolTable { public: void EnterScope(); void ExitScope(); bool ContainsInCurrentScope(const std::string& name) const; void Add(const std::string& name, const SymbolEntry& entry); const SymbolEntry* Lookup(const std::string& name) const; private: std::vector> scopes_; };