🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
SymbolScope.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include <unordered_map>
25#include <string>
26#include <vector>
27#include "AstUtil/SharedPtr.hpp"
28#include "AstScript/Expr.hpp"
29
30AST_NAMESPACE_BEGIN
31
32
33
39public:
40 using SymbolMap = std::unordered_map<std::string, SharedPtr<Expr>>;
41 using SymbolPair = std::pair<std::string, SharedPtr<Expr>>;
42 using SymbolList = std::vector<SymbolPair>;
43
45 SymbolScope() = default;
46
49 explicit SymbolScope(SymbolScope* parent)
50 : parent_(parent)
51 {}
52
53 ~SymbolScope() = default;
54
59 bool addSymbol(StringView name, Expr* expr);
60
64 void setSymbol(StringView name, Expr* expr);
65
70 Expr* findSymbol(StringView name, bool searchParent = true) const;
71
75 Expr* resolveSymbol(StringView name);
76
80 bool removeSymbol(StringView name);
81
86 bool hasSymbol(StringView name, bool searchParent = true) const;
87
90 SymbolList getSymbols() const;
91
94 SymbolScope* parent() const;
95
98 void setParent(SymbolScope* parent);
99
100protected:
101 SymbolMap symbols_;
102 SymbolScope* parent_ = nullptr;
103};
104
105AST_NAMESPACE_END
表达式基类
定义 Expr.hpp:39
符号作用域
定义 SymbolScope.hpp:38
SymbolMap symbols_
符号作用域中的符号
定义 SymbolScope.hpp:101
SymbolScope(SymbolScope *parent)
构造函数,指定父符号作用域
定义 SymbolScope.hpp:49
SymbolScope()=default
默认构造函数