为简化问题,
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
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实际上就是一个有向上反向引用的“局部变量”链,不过这里变量存在一个根据名字的作用域查找问题,