upd: finish major design

This commit is contained in:
2023-11-08 23:44:20 +08:00
parent 3e1f314f83
commit a2a8c45af1
2 changed files with 15 additions and 1 deletions

View File

@ -12,6 +12,19 @@
- `src`目录:裂解器直接相关的实现文件。`main`负责解析命令行参数,解析代码,并访问根节点,同时处理异常;`utils`负责执行类型转换、数据解析等底层工作,保证`Evalvisitor`的简洁性;`names`负责维护变量和函数的注册和调用。
## 主要重难点
### 数值流
#### 数据存储与传递方式
- `bool`底层实现为内置bool传递时打包成any统一传递。只在输出时输出`"True"`或者`"False"`
- `int`底层实现为int2048传递时打包成any统一传递
- `float`底层实现为内置double传递时打包成any统一传递
- `str`底层实现为STL传递时打包成any统一传递
- 元组:底层实现为`std::vector<std::any>`传递时打包成any统一传递。**注意:函数参数列表要特殊处理**
- `None`:底层实现为自定义`NoneType`传递时打包成any统一传递。
#### 特殊处理
数值流在出现赋值时如何兼容左右值。
法一:将变量区分引用状态(通过一个专门的类来实现)和值状态,懒求解
### 控制流
控制流在数值包括None返回值的基础上新增一个控制类型的范围值不添加任何不必要的封装直接存入`std::any`,用控制类型这个类型本身标明身份。
@ -21,5 +34,4 @@
## 关键细节
### 元组
### 左值和右值
### 函数传参

View File

@ -36,4 +36,6 @@ struct FlowType {
FlowType(FlowControlStatusType Status, std::vector<std::any> ReturnValueLists)
: Status(Status), ReturnValueLists(ReturnValueLists) {}
};
struct NoneType {};
#endif