19template <
class T>
class LexicalContext {
20 std::set<std::string> symbols;
21 std::unordered_map<std::string, T> symbols_to_t;
24 LexicalContext *parent_scope;
26 explicit LexicalContext() : symbols(), symbols_to_t(), parent_scope() {}
27 LexicalContext(LexicalContext *parent_scope)
28 : symbols(), symbols_to_t(), parent_scope(parent_scope) {}
30 void registerNameT(
const std::string &name, T l) {
32 symbols_to_t[name] = l;
35 return symbols.contains(name) ? nameFound : nameNotFound;
37 T get_from_name(
const std::string &name) {
return symbols_to_t.at(name); }
39 T recursive_get_from_name(
const std::string &name) {
40 if (symbols.find(name) != symbols.end())
41 return symbols_to_t[name];
42 else if (parent_scope ==
nullptr) {
43 sammine_util::abort(fmt::format(
"name {} not found", name));
45 return parent_scope->recursive_get_from_name(name);
49 if (symbols.find(name) != symbols.end())
51 else if (parent_scope ==
nullptr) {
54 return parent_scope->recursiveQueryName(name);
NameQueryResult
NameQueryResult enum.
Definition LexicalContext.h:13