- 10
- 0
- 约1.18万字
- 约 81页
- 2018-02-05 发布于浙江
- 举报
南开大学编译原理第章课件
7.5.4 传名方式(call-by-name) Algol,拷贝规则,copy-rule 过程像宏一样处理 被调用——用过程体程序文本替换过程名 实参的程序文本替换形参 宏扩展,marco-expansion内联扩展,in-line expansion 被调用过程内的局部名字保证与调用过程中的名字不混淆——可认为这些局部名字在宏扩展前改名为独一无二的名字 实参可能被加以括号,以保证完整性 例7.8 … swap(i, a[i]); … 在传名方式下,实际上相当于如下代码 … temp := i; i := a[i]; a[i] := temp; … 结果与传值、传地址均不相同! 设I0=1,a[1]=0,I0?temp?1?temp a[I0]?i——0?i I0?a[a[I0]]——1?a[0] 而期望的是I0?a[I0]——1?a[1] 原因:x:=temp,x的地址此时才计算, 而传地址方式确定x地址的位置 例7.9 内联函数 x := f(A) + f(B); ? t1 := A; t2 := B; t3 := f(t1); t4 := f(t2); x := t3 + t4; 7.6 符号表 保存作用域和绑定信息 基本操作 添加新标识符——insert 查找标识符——lookup 符号表表项——记录 一致性 某些信息保存在外部,用指针指向 两个主要组成部分 名字
原创力文档

文档评论(0)