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
    的问题。此外,如果没有图片上的解释,我甚至不清楚可能给出的补救措施

    谁能帮我一下吗