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