微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

符号表中的“删除”策略作为具有“紧密嵌套范围规则”的语言的哈希表实现

如何解决符号表中的“删除”策略作为具有“紧密嵌套范围规则”的语言的哈希表实现

下面是红龙书的摘录。

最紧密嵌套的作用域规则可以通过对名称的以下操作来实现:

lookup:查找最近创建的条目

insert:创建一个新条目

delete删除最近创建的条目

figure

哈希表由通过数组访问的 m 列表组成。因为一个名字总是散列到同一个列表中,所以单个列表的维护如图 7.37 所示。但是,为了实现 delete 操作,我们宁愿不必扫描整个哈希表来查找包含要删除的条目的列表。可以使用以下方法。假设每个条目有两个链接

  1. 一个散列链接,将条目链接名称散列为相同值的其他条目和

  2. 一个作用域链接链接同一作用域内的所有条目。

如果从哈希表中删除条目时作用域链接不受干扰,那么由作用域链接形成的链将构成相关作用域的单独(非活动)符号表。

从哈希表中删除条目必须小心,因为删除条目会影响其列表中的前一个条目。回想一下,我们通过使 i lst 条目指向 i-1st 来删除i + 1 个条目。 因此,仅使用范围链接查找第 i 个条目是不够的。如果散列链接形成循环链表,其中最后一个条目指向第一个条目,则可以找到第 i — 1 个条目。或者,我们可以使用堆栈来跟踪包含要删除的条目的列表。扫描新程序时,会在堆栈中放置一个标记标记上方是包含此过程中声明的名称条目的列表编号。当我们处理完程序时,可以从堆栈中弹出列表编号,直到达到程序的标记为止。

12 点我可以理解如下,对于代码

   {
   .    int cp;
   .    char match;
   .    float last;
   .    int ws;
   B0   {
   .      B1 ....
   .    }
   }// B0,B1 represents blocks

Picture

蓝色链接对应于关于2的点编号scope links。(这是我从摘录中可以理解的)

但我无法理解他们在摘录的最后部分以粗体表示的 delete 问题。此外,可能的补救措施对我来说甚至不清楚,没有相同的图片解释。

请谁能帮帮我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。