3.2 变量声明命令
var 命令,声明变量,向下增长栈的空间,将新增的空间分配(绑定)给刚声明的变量,并将变量名及分配给它的地址保存到变量表中。有以下用法:
- var a ; 栈顶向下增长 1 个单元,将新的栈顶单元分配(绑定)给 a
- var x, y, z ; 栈顶向下增长 3 个单元,将新的栈顶单元分配(绑定)给 x, y, z
“var a” 命令运行后栈及符号表的变化如下所示,其中左边为栈,右边为绑定的符号表,”<-” 指向栈顶,该命令运行后,栈顶向下增长1个单元,并将变量a绑定到新的栈顶单元上。斜杠 “/” 来表示此单元尚未赋初始值,如果此单元在被赋初值之前被使用(读取),则虚拟机将出错终止。
- ------------+----------- ------------+-----------
- stack | bind var stack | bind var
- ------------+----------- ------------+-----------
- ... | ... |
- ------------+----------- var a ------------+-----------
- ... | -------------> ... |
- ------------+----------- ------------+-----------
- ... |<- ... |
- ------------+----------- ------------+-----------
- / |<- a
- ------------+-----------
“var x, y, z” 命令运行后栈及符号表的变化所示,该命令运行后,栈顶向下增长 3 个单元,并将变量 x, y, z 绑定到新的栈顶单元上。
- ------------+----------- ------------+-----------
- stack | bind var stack | bind var
- ------------+----------- ------------+-----------
- ... | ... |
- ------------+----------- var x, y, z ------------+-----------
- ... | -------------> ... |
- ------------+----------- ------------+-----------
- ... |<- ... |
- ------------+----------- ------------+-----------
- / | x
- ------------+-----------
- / | y
- ------------+-----------
- / |<- z
- ------------+-----------
var 命令运行后, Pcode 虚拟机会将刚刚声明的变量及分配给它的地址记录在变量表中,在后面的命令中可以根据变量名称来引用其内容。
以上图示中,栈的增长方向都是向下,这是为了和大部分计算机系统架构和编译原理教材的惯例保持一致。