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

字节码设计:第一版(仅仅用于表达式计算)

PushImm 123
Push R2
Pop R0
Mov src, dst #寄存器到寄存器
MovImm imm, reg #加载立即数到寄存器
CallPrimitiveFunction ‘+’ #ABI: 最多2个输入参数,R0,R1,输出结果在R0

核心JS代码(部分,优快云博客不支持上传附件):

Assembler.prototype = {
  emitInstruction: function(inst) {
    //应用窥孔优化:如果当前指令是Pop,并且前一条指令是Push,且寄存器参数相同,则去除这一对指令
    if (inst.type=="Pop") {
      if (this.code_buffer.length>0) {
        var last_inst = this.code_buffer[this.code_buffer.length-1];
        if (last_inst.type=="Push" && inst.arg==last_inst.arg) {
          this.code_buffer.pop();
          return;
        }
      }
    }
    this.code_buffer.push(inst);
  },


  getResult: function() {
    return this.code_buffer;
  },


  toString: function() {
    function inst2str(inst) {
      return inst.type + " " + inst.arg
         + (!!inst.arg1 ? " "+inst.arg1 : "");
      //当前,由于设计简化的缘故,每个字节码指令最多只有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值