5.2 变量声明、赋值语句、函数调用语句

变量声明直接将 TinyC 的 int 改成 var 就可以了。

赋值语句的左边为变量名,右边为表达式,先将表达式转换成后缀表达式,再按顺序翻译相应的 Pcode ,最后在加一个 pop var_name:

赋值语句:

  1. a = 1 + 2 * b / sum (5, 8);

逆波兰表达式:

  1. 1 2 b * 5 8 sum / +

Pcode:

  1. push 1
  2. push 2
  3. push b
  4. mul
  5. push 5
  6. push 8
  7. $sum
  8. div
  9. add
  10. pop a

注意对于自定义的函数,需在函数名前面加 $ 。

可以看出对于复杂一点的表达式,人工将其转化成正确的后缀表达式是很困难的,必须借助计算机程序来做这件事了,这个就留给我们的 TinyC 编译器吧。

函数调用语句其实在上面的表达式转换中就有了,先从左向右将参数入栈,再调用函数,若参数是一个表达式,则先将这个表达式翻译成 Pcode 。

TinyC:

  1. foo(1, a, sum(b, 5));

Pcode:

  1. push 1
  2. push a
  3. push b
  4. push 5
  5. $sum
  6. $foo
  7. pop

注意最后的 pop 是为了将 foo 函数的返回值出栈的,因为这个值以后都不会再被使用到。如果函数调用是在表达式的内部,则不需要使用 pop 。