programming-languages - 如何在解释性编程语言中实现函数调用?
问题描述
我正在创建一种解释性编程语言,并且我想支持函数调用。
我试图按如下方式实现这一点。当解释器遇到:
- 函数声明,将其推送到环境中。
- 函数调用,获取环境中的函数声明并执行其主体。
我对使用这种方法犹豫不决,因为它不是线性的,而且似乎使用了太多资源。
在编译型编程语言中,标签和 goto 用于实现调用函数。它是线性的,只存储函数体的引用。
例如,此 C 代码将生成该汇编代码:
C代码:
int sum (int x, int y) {
return x + y;
}
sum(2, 3);
汇编代码:
sum:
push ebp
mov ebp, esp
mov eax, [ebp + 8]
mov edx, [ebp + 12]
add eax, edx
pop ebp
ret
push 3
push 2
call sum
add esp, 8
我想实现一种类似于编译编程语言使用的方法。
解决方案
推荐阅读
- reactjs - 了解传播如何对减速器作用起作用
- vba - 更改图表 X 轴上刻度线标签之间的类别数
- corda - 我如何获得线性状态的历史
- reactjs - Shopify 应用代理 - 如何在请求响应中包含我的资产文件 | 反应 / JS / Heroku
- qemu - QEMU “-bios” vs. “-kernel” vs. “-device loader,file=...”
- mysql - 为什么与 MariaDB 10.2 RAND() 函数发生如此多的冲突?
- scala - 尝试在 Spark Scala 中导入 Array._ 和导入 org.apache.spark.sql.functions._ 时出错
- javascript - 使用循环从父节点中删除元素
- sql - SQL change a table into another format
- javascript - axios 和响应数据集拆分为多个数组