diff --git a/docs/Design.md b/docs/Design.md index c469581..dfda423 100644 --- a/docs/Design.md +++ b/docs/Design.md @@ -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`,传递时打包成any统一传递。**注意:函数参数列表要特殊处理** +- `None`:底层实现为自定义`NoneType`,传递时打包成any统一传递。 + +#### 特殊处理 +数值流在出现赋值时如何兼容左右值。 +法一:将变量区分引用状态(通过一个专门的类来实现)和值状态,懒求解 + ### 控制流 控制流:在数值(包括None)返回值的基础上,新增一个控制类型的范围值,不添加任何不必要的封装直接存入`std::any`,用控制类型这个类型本身标明身份。 @@ -21,5 +34,4 @@ ## 关键细节 ### 元组 -### 左值和右值 ### 函数传参 \ No newline at end of file diff --git a/include/utils.h b/include/utils.h index 5995fb2..f173268 100644 --- a/include/utils.h +++ b/include/utils.h @@ -36,4 +36,6 @@ struct FlowType { FlowType(FlowControlStatusType Status, std::vector ReturnValueLists) : Status(Status), ReturnValueLists(ReturnValueLists) {} }; + +struct NoneType {}; #endif \ No newline at end of file