4个稳定版本

1.0.3 2024年3月19日
1.0.2 2024年3月6日
1.0.1 2024年3月5日

490编程语言 中排名

Download history 2/week @ 2024-03-24 16/week @ 2024-03-31 4/week @ 2024-05-26 1/week @ 2024-06-02

201 每月下载量
用于 sap-cli

MIT/Apache

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