Pointers 策略;删除“;在符号表中实现为带“的语言的哈希表”;紧密嵌套的范围规则“;
下面是红龙书的摘录 最紧密嵌套的范围规则可以通过对名称执行以下操作来实现:Pointers 策略;删除“;在符号表中实现为带“的语言的哈希表”;紧密嵌套的范围规则“;,pointers,hash,linked-list,compiler-construction,symbol-table,Pointers,Hash,Linked List,Compiler Construction,Symbol Table,下面是红龙书的摘录 最紧密嵌套的范围规则可以通过对名称执行以下操作来实现: 查找:查找最近创建的条目 插入:创建新条目 删除:删除最近创建的条目 哈希表由通过数组访问的m列表组成。由于一个名称总是散列到同一个列表中,各个列表如图7.37所示进行维护。然而,为了实现delete操作,我们不必扫描整个哈希表来查找包含要删除的条目的列表。可以使用以下方法。假设每个条目有两个链接: 一种散列链接,将该条目链接到名称散列到相同值和值的其他条目 一种作用域链接,用于链接同一作用域中的所有条目 如果从哈
查找
:查找最近创建的条目
插入
:创建新条目
删除
:删除最近创建的条目
哈希表由通过数组访问的m
列表组成。由于一个名称总是散列到同一个列表中,各个列表如图7.37所示进行维护。然而,为了实现delete
操作,我们不必扫描整个哈希表来查找包含要删除的条目的列表。可以使用以下方法。假设每个条目有两个链接:
i-1
lst入口点设置为i+1
st来删除i
th条目。因此,仅使用范围链接查找i
th条目是不够的。如果散列链接形成一个循环链表,其中最后一个条目指向第一个条目,则可以找到i-1
st条目。或者,我们可以使用堆栈跟踪包含要删除的条目的列表。扫描新程序时,将在堆栈中放置一个标记。标记上方是包含此过程中声明的名称条目的列表编号。当我们完成处理该过程时,可以从堆栈中弹出列表编号,直到到达该过程的标记。
从1
和2
这两个方面,我可以理解如下代码:
{
.int cp;
.字符匹配;
.最后浮动;
.int-ws;
B0{
.B1。。。。
. }
}//B0,B1表示块
蓝色链接对应于关于范围链接的点编号2
(这是我从摘录中可以理解的)
但我无法理解他们在摘录最后一部分用粗体表示的delete
的问题。此外,如果没有图片上的解释,我甚至不清楚可能给出的补救措施
谁能帮我一下吗