3.2 变量声明命令

var 命令,声明变量,向下增长栈的空间,将新增的空间分配(绑定)给刚声明的变量,并将变量名及分配给它的地址保存到变量表中。有以下用法:

  1. var a ; 栈顶向下增长 1 个单元,将新的栈顶单元分配(绑定)给 a
  2. var x, y, z ; 栈顶向下增长 3 个单元,将新的栈顶单元分配(绑定)给 x, y, z

“var a” 命令运行后栈及符号表的变化如下所示,其中左边为栈,右边为绑定的符号表,”<-” 指向栈顶,该命令运行后,栈顶向下增长1个单元,并将变量a绑定到新的栈顶单元上。斜杠 “/” 来表示此单元尚未赋初始值,如果此单元在被赋初值之前被使用(读取),则虚拟机将出错终止。

  1. ------------+----------- ------------+-----------
  2. stack | bind var stack | bind var
  3. ------------+----------- ------------+-----------
  4. ... | ... |
  5. ------------+----------- var a ------------+-----------
  6. ... | -------------> ... |
  7. ------------+----------- ------------+-----------
  8. ... |<- ... |
  9. ------------+----------- ------------+-----------
  10. / |<- a
  11. ------------+-----------

“var x, y, z” 命令运行后栈及符号表的变化所示,该命令运行后,栈顶向下增长 3 个单元,并将变量 x, y, z 绑定到新的栈顶单元上。

  1. ------------+----------- ------------+-----------
  2. stack | bind var stack | bind var
  3. ------------+----------- ------------+-----------
  4. ... | ... |
  5. ------------+----------- var x, y, z ------------+-----------
  6. ... | -------------> ... |
  7. ------------+----------- ------------+-----------
  8. ... |<- ... |
  9. ------------+----------- ------------+-----------
  10. / | x
  11. ------------+-----------
  12. / | y
  13. ------------+-----------
  14. / |<- z
  15. ------------+-----------

var 命令运行后, Pcode 虚拟机会将刚刚声明的变量及分配给它的地址记录在变量表中,在后面的命令中可以根据变量名称来引用其内容。

以上图示中,栈的增长方向都是向下,这是为了和大部分计算机系统架构和编译原理教材的惯例保持一致。