19template <
class T,
class Scope>
class LexicalContext {
20 std::set<std::string> symbols;
21 std::unordered_map<std::string, T> symbols_to_t;
24 LexicalContext *parent_scope;
25 std::optional<Scope> s;
27 explicit LexicalContext() : symbols(), symbols_to_t(), parent_scope() {}
28 LexicalContext(LexicalContext *parent_scope)
29 : symbols(), symbols_to_t(), parent_scope(parent_scope) {}
31 void setScope(Scope s) { this->s = s; }
33 void registerNameT(
const std::string &name, T l) {
35 symbols_to_t[name] = l;
38 return symbols.contains(name) ? nameFound : nameNotFound;
40 T get_from_name(
const std::string &name)
const {
41 return symbols_to_t.at(name);
44 T recursive_get_from_name(
const std::string &name)
const {
45 if (symbols.find(name) != symbols.end())
46 return symbols_to_t.at(name);
47 else if (parent_scope ==
nullptr) {
48 sammine_util::abort(fmt::format(
"name {} not found", name));
50 return parent_scope->recursive_get_from_name(name);
54 if (symbols.find(name) != symbols.end())
56 else if (parent_scope ==
nullptr) {
59 return parent_scope->recursiveQueryName(name);
NameQueryResult
NameQueryResult enum.
Definition LexicalContext.h:13