Files
BH-Python-Interpreter-2023/docs/Design.md
2023-11-08 23:44:20 +08:00

2.3 KiB
Raw Blame History

python裂解器设计思路——ZYM

开发步骤

  1. 编写底层工具,并测试(函数调用相关的简单测试)。
  2. 在不考虑函数调用的情况下,以链为单位编写、调试自动机
  3. 测试函数相关的底层工具
  4. 增加考虑有函数调用时的情况,以链为单位编写、调试自动机

模块划分

  • libsgeneratedresources目录:libs目录存放第三方库其中int2048是我的上个大作业用以提供大整数运算支持json是提供json解析支持clipp是提供命令行参数解析支持。ANTLR框架存放于generatedresources目录中。
  • test目录存放测试相关有一个进程级测试调度核心及相关配置文件、数据点通过ctest_config接入CTest框架使得CTest可以调用进程级测试调度核心
  • include目录:裂解器直接相关的头文件
  • 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,用控制类型这个类型本身标明身份。

函数的定义与调用

变量的生效范围与作用域

关键细节

元组

函数传参