29
(12)CHARACTER FUNCTION PRDUCE()
(13) CHARACTER * 80 BUFFER
(14) INTEGER NEXT
(15) SAVE BUFFER,NEXT
(16) DATA NEXT/81/
(17) IF(NEXT.GT.80)THEN
(18) READ(*,'(A)')BUFFER
15
environment
state
名字
存储单元
值
l-value
r-value
存储分配
程序运行
图6.5 从名字到值的两个阶段映射
16
静态概念 过程定义 名字说明 说明的作用域
动态对应 过程活动 名字的绑定 活动的生存期
17
6.1.6 提出的问题
编译程序组织存储分配所采用策略和方法主
要取决于对源程序中下面的问题的回答。
可能有几处说明,语言的作用域规则规定:
在语句序列中引用的一个名字是在何处说
明的名字。
3 . 编译时,处理说明把名字及其属性信息填
写进符号表(add(id.entry,id.vul)); 处理引用
名字时,查找这个名字的属性信息
(lookup(id)),符号表管理程序根据语 言的
作用域规则,使 lookup(id)返回id的作用域
3. 栈:Pascal,c 4. 堆: Pascal,c
21
6.2.2 活动记录 把过程的一个活动所需要的信息组织成一
块连续的存储单元,称为活动记录。 一个活动所需要的信息的每个数据项有相
同的生存期,因此,组织成一个活动记录是 很自然的。
对于pascal语言来说,运行过程中,当调用 一个过程时,在栈顶构筑它的活动记录;当 这个过程的活动执行完后,把它从栈顶弹出。