过程的中间代码
本节使用术语“函数”来表示带有返回值的过程。
- 函数的文法示例
D -> define T id(F) { S } //函数声明
F -> ε | T id, F //形参
S -> return E //S的产生式新增一条返回语句
E -> id(A) //E的产生式新增一条函数调用
A -> ε | E, A //实参
- 函数类型
一个函数类型必须包含返回值类型和形式参数类型。令void是一个表示没有参数或没有返回值的特殊类型。
- 符号表
当编译器处理到一个函数定义时,函数名被放入最上层的符号表,以便在程序其他部分使用。(CRE:形参也要加入到符号表)
在声明的产生式中,当看到define和函数名之后,我们需要把旧的符号表压栈并建立新的符号表。
- 类型检查
在表达式中,一个函数和运算符的处理方法相同。适用于自动类型转换等类型检查规则。
- 函数调用
为每个表达式参数生成一条param指令。可以逐个参数生成求值指令和param指令,也可以先翻译求值指令,再统一生成param指令。
(END)