scope.cpp (1159B)
1 #include "scope.hpp" 2 3 Scope::Scope(std::string name, int level, std::unique_ptr<Scope> parent) : scope_name(name), scope_level(level), parent_scope(parent) {} 4 5 std::string Scope::getScopeName() { 6 return scope_name; 7 } 8 9 int Scope::getScopeLevel() { 10 return scope_level; 11 } 12 13 std::unique_ptr<Scope> Scope::getParentScope() { 14 return parent_scope; 15 } 16 17 void Scope::define(Symbol symbol) { 18 if (isDeclared(symbol->getName())) { 19 // error 20 } 21 22 else { 23 symobls.add(symbol->getName(), symbol); 24 } 25 } 26 27 std::unique_ptr<Symbol> Scope::lookup(std::string name) { 28 auto it = symbols.find(name); 29 if (it != symbols.end()) { 30 return &(it->second); 31 } 32 33 return nullptr; 34 } 35 36 bool Scope::isDeclared(std::string name) { 37 return lookup(name) != nullptr; 38 } 39 40 std::unordered_map<std::string, Symbol> Scope::getAllSymbols() { 41 return symbols; 42 } 43 44 std::string Scope::toString() { 45 std::string result = "Scope: " + scope_name + "(level " + std::to_string(scope_level) + ") \n"; 46 47 for (auto& pair : symbols) { 48 result += " " + pair.first + " : " + pair.second.getDataType() + "\n"; 49 } 50 51 return result; 52 }