🛰️航天仿真算法库 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
34class AST_SCRIPT_API ISymbolScope
35{
36public:
37 virtual ~ISymbolScope() = default;
38
43 virtual errc_t addSymbol(StringView name, Expr* expr) = 0;
44
49 virtual Expr* findSymbol(StringView name, bool searchParent = true) const = 0;
50
54 virtual Expr* resolveSymbol(StringView name) = 0;
55};
56
57
62class AST_SCRIPT_API SymbolScope: public ISymbolScope{
63public:
64 using SymbolMap = std::unordered_map<std::string, SharedPtr<Expr>>;
65 using SymbolPair = std::pair<std::string, SharedPtr<Expr>>;
66 using SymbolList = std::vector<SymbolPair>;
67
69 SymbolScope() = default;
70
73 explicit SymbolScope(SymbolScope* parent)
74 : parent_(parent)
75 {}
76
77 ~SymbolScope() = default;
78
79public:
80 errc_t addSymbol(StringView name, Expr* expr) override;
81
82 Expr* findSymbol(StringView name, bool searchParent = true) const override;
83
84 Expr* resolveSymbol(StringView name) override;
85
86public:
90 void setSymbol(StringView name, Expr* expr);
91
95 errc_t removeSymbol(StringView name);
96
101 bool hasSymbol(StringView name, bool searchParent = true) const;
102
105 SymbolList getSymbols() const;
106
109 SymbolScope* parent() const;
110
113 void setParent(SymbolScope* parent);
114
115protected:
116 SymbolMap symbols_;
117 SymbolScope* parent_ = nullptr;
118};
119
120AST_NAMESPACE_END
表达式基类
定义 Expr.hpp:40
定义 SymbolScope.hpp:35
virtual Expr * findSymbol(StringView name, bool searchParent=true) const =0
查找符号作用域中的符号
virtual Expr * resolveSymbol(StringView name)=0
解析符号作用域中的符号,如果不存在则创建一个新的变量
virtual errc_t addSymbol(StringView name, Expr *expr)=0
添加符号到符号作用域
符号作用域
定义 SymbolScope.hpp:62
SymbolMap symbols_
符号作用域中的符号
定义 SymbolScope.hpp:116
SymbolScope(SymbolScope *parent)
构造函数,指定父符号作用域
定义 SymbolScope.hpp:73
SymbolScope()=default
默认构造函数