📄 6.6.4.htm
字号:
<html>
<head>
<title>编译原理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link type="text/css" rel="stylesheet" href="../css/specification.css">
</head>
<body>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.6.3c.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.6.4b.htm'"></img></td>
</tr>
</table>
<br><br>
<font class="title2"><b>6.6.4 表示作用域的信息</b></font>
<table><tr><td>    </td>
<td class="content">
<P>
我们知道,在许多程序语言中,名字往往有一个确定的作用域。即在一个程序里,同一个标识符在不同的地方可能被说明为标识不同的对象,也就是说,同一标识符,具有不同的性质,要求分配不同的存储空间。于是便产生了这样的问题,如何组织符号表,使得同一个标识符在不同的作用域中能得到正确的引用.
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
一个简单的解决办法是为每一个作用域都保持一个单独的符号表。实际上,在编译时刻的这样一个为过程或说为作用域建立的符号表,恰与在运行时刻的活动记录相对应。一个过程的局部信息都可以在本过程的符号表内查到。一个过程的非局部名字的信息则可通过扫描外围过程的符号表而得到,这里提到的外围过程是指遵循有关语言作用域规则的那些外围过程。
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
最近嵌套规则可以通过改写本节中前面所提到的数据结构来实现。我们把每个过程按一定顺序进行编号。当我们言及某个名字时必需同时联系到它所属的过程的编号。如果语言是块结构(分程序结构)的,块也必须编号,因此,该编号也被看成是名字的一个组成部分。于是,一个名字可看成是一个二元式,这个二元式包含名字及过程编号。但在某些情况下,如下面所讨论的,过程编号并不需要实际出现,因为它可以从表项在符号表中的位置推导出来。
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
当我们查看一个新的被扫描到的名字时,只有当名字的每一个字符都与表项中的名字的字符相匹配,并且在此符号表表项中的相应编号是正在处理的过程的编号时才算是匹配的。最近嵌套的作用域规则可以通过在一个名字上的如下三种操作来实现:
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
lookup :为一个名字查找最近建立的表项
insert :为一个名字建立一个新的表项
delete :删除最近建立的表项
</p>
</td></tr></table>
<center><img src="images/6_30.gif"></center>
<p align=center>图6.30 a的最新表项是靠近front的</p>
<br>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.6.3c.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.6.4b.htm'"></img></td>
</tr>
</table>
</BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -