📄 6.6.4b.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.4.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.6.5.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content">
<P>
在线性表的情况下,为一个名字查找最近建立的表项,即用操作lookup,是从符号表的前端向着符号表的开始方向进行扫描的。这一点在这-节前面提到过。在链表的情况下也类似,如图6.30所示。-个前端指针front指向链表中最近建立的项。lookup的实现是通过从front指向的项开始扫描直到找到所要的名字,或到达了链表的始端为止。在图6.30中,块B<sub>2</sub>嵌套在块B<sub>0</sub>中,在块B<sub>2</sub>中和块B<sub>0</sub>中都有名字为a的说明的表项,而块B<sub>2</sub>中的a的表项距front较近。如果此时对名字a进行lookup操作的话,寻找到的将是块B<sub>2</sub>中的a的表项。操作insert的实现将花费一个固定的时间,因为一个新项总是被放在链表的前端。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
关于操作de1ete,首先要注意的是,“被删除的”表项仅仅是从活动符号表中移出,而仍然必须被保存下来。因为这些信息在运行时刻进行错误诊断时可能要用到。在线性表的情况下,对于最深层嵌套过程中说明的那些表项的出现的位置距线性表的前端是最近的。这样,我们不一定需要把过程的编号存放在每一个表项之中,譬如只要我们对于每个过程保留下来它的第一个表项的信息,则当我们处理完这个过程的作用域时可以把此过程的所有表项直到第一个表项从活动符号表中删除。
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
一个散列表由m个链表组成,通过一个数组进行访问。因为同一个名字总是存放在同一个链表中,单个链表的保持如图6.30所示。在散列表的情况下,为了实现delete操作一般可以假设每一表项有两个链:
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
1.一个散列链把表项与其它表项串起来,这些表项的名字具有相同的散列值;
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
2. 一个作用域链把所有在同一个作用域之内的表项串起来。这样就不难做到,当处理完一个过程的作用域时可以利用以上两个链表把该过程的所有表项从散列表中删除。
</p>
</td></tr></table>
<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.4.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.6.5.htm'"></img></td>
</tr>
</table>
</BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -