// 维护局部变量声明的注册与查找。 #include "sem/SymbolTable.h" void SymbolTable::EnterScope() { scopes_.emplace_back(); } void SymbolTable::ExitScope() { if (!scopes_.empty()) { scopes_.pop_back(); } } bool SymbolTable::ContainsInCurrentScope(const std::string& name) const { if (scopes_.empty()) { return false; } return scopes_.back().find(name) != scopes_.back().end(); } void SymbolTable::Add(const std::string& name, const SymbolEntry& entry) { if (scopes_.empty()) { EnterScope(); } scopes_.back()[name] = entry; } const SymbolEntry* SymbolTable::Lookup(const std::string& name) const { for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { auto found = it->find(name); if (found != it->end()) { return &found->second; } } return nullptr; }