使用JavaScript实现一个“字节码解释器”,并用它重新实现JS科学计算器的后端(待续)

为简化问题,

1、科学计算器不包含用户自定义函数,也就是说,“字节码解释器”不考虑嵌套调用栈的问题;
2、需要把表达式转换为序列化的基于“寄存器”(假设R0~R15)和“局部变量”(像LLVM那样%1~无限)的微指令字节码序列,这里面最重要的是一个CPS转换
3、需要定义字节码调用原语函数(PrimitiveFunction)的ABI规范,目前简化为:最多2个参数,用R0、R1传递,结果用R0返回
    +-*/,sin cos都映射为原语函数,为此可定义指令CallPrimitiveFunction
4、关于Value,不需要考虑int、long、float、double,只有一个number类型(!!),由于是表达式求值,不需要考虑string类型
5、字节码指令设计参考RISC,Load/Store、CallPrimitiveFunction,局部变量直接引用,不需要LLVM里面的alloca

这个项目主要是为了考察考察对解释器、以及CPS/SSA的理解。


 6、下一步工作就是允许表达式中的自定义函数,以及为此增加的嵌套调用栈,CallStack实际上就是一个有向上反向引用的“局部变量”链,不过这里变量存在一个根据名字的作用域查找问题,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值