5.2 变量声明、赋值语句、函数调用语句
变量声明直接将 TinyC 的 int 改成 var 就可以了。
赋值语句的左边为变量名,右边为表达式,先将表达式转换成后缀表达式,再按顺序翻译相应的 Pcode ,最后在加一个 pop var_name:
赋值语句:
- a = 1 + 2 * b / sum (5, 8);
逆波兰表达式:
- 1 2 b * 5 8 sum / +
Pcode:
- push 1
- push 2
- push b
- mul
- push 5
- push 8
- $sum
- div
- add
- pop a
注意对于自定义的函数,需在函数名前面加 $ 。
可以看出对于复杂一点的表达式,人工将其转化成正确的后缀表达式是很困难的,必须借助计算机程序来做这件事了,这个就留给我们的 TinyC 编译器吧。
函数调用语句其实在上面的表达式转换中就有了,先从左向右将参数入栈,再调用函数,若参数是一个表达式,则先将这个表达式翻译成 Pcode 。
TinyC:
- foo(1, a, sum(b, 5));
Pcode:
- push 1
- push a
- push b
- push 5
- $sum
- $foo
- pop
注意最后的 pop 是为了将 foo 函数的返回值出栈的,因为这个值以后都不会再被使用到。如果函数调用是在表达式的内部,则不需要使用 pop 。