4个稳定版本
| 1.0.3 | 2024年3月19日 |
|---|---|
| 1.0.2 | 2024年3月6日 |
| 1.0.1 | 2024年3月5日 |
490 在 编程语言 中排名
201 每月下载量
用于 sap-cli
165KB
3K SLoC
解释器模块
解释器模块负责SAP程序的执行和运行时管理。通过 [eval_program()] 函数,遍历AST,并应用每个节点的实际运行时逻辑。例如,如果遇到一个 Binary 节点,它将转换为其实际值(即 1+2 变为 3)。
值
Value 表示为枚举。相同的模块还包含所有操作值的逻辑,例如比较、加法、减法等...
环境
在运行时,不在AST中直接存储的值(即变量)存储在 Environment 中。环境由两部分组成:将变量名绑定到它们存储的数据的哈希表,以及对外部/父环境的引用。
执行
如前所述,SAP程序通过遍历其AST并应用每个节点的运行时逻辑来执行。这可以评估数值表达式,检索/存储变量,重复或显示到控制台。
在理解遍历中断之前,需要注意的是调用栈反映了代码在树中的遍历位置,因为每个AST节点都有自己的专用函数。
有两件事可以中断树的遍历
- 运行时错误
- 返回语句
遇到运行时错误时,遍历完全停止,并将错误返回给 [eval_program()] 函数的调用者。
遇到返回语句时,代码回溯到树中,直到到达 FunctionCall 节点或根 (Program) 节点。如果达到根节点,这表明返回语句在函数外部使用,这被视为错误。
当遇到FunctionCall节点时,这表示在函数内部使用了返回语句,该函数是通过此函数调用调用的。返回值被展开为普通值,并可以在函数调用的位置正常使用。
例如,考虑表达式set x = 1+add(1, 3),函数add(1, 3)可能会生成一个Return(Value(4)),然后展开为Value(4)。结果语句现在看起来像set x = 1+4。
依赖项
~0.6–1.5MB
~33K SLoC