哈尔滨工业大学《编译原理》Lab2:杨文昊的符号表与散列表实现

需积分: 0 0 下载量 64 浏览量 更新于2024-08-05 收藏 417KB PDF 举报
本篇实验报告是哈尔滨工业大学计算学部春季学期《编译原理》课程中关于Lab2语义分析的作业,作者杨文昊(学号1190303027)完成了部分内容。实验的核心知识点集中在符号表的设计和实现上。 首先,亮点一涉及符号表的实现,采用散列表数据结构。散列表构建算法利用哈希函数计算键值,将符号(如变量或函数名)映射到内存的特定位置,提高了查找和插入操作的效率。如果遇到哈希冲突,通过链表解决,确保了数据的正确存储。 亮点二进一步细化了符号表的设计,将变量和函数分开存储,以varTable和funcTable两个表进行管理。变量存储在varTable中,每个变量的结构体还包含一个额外的FieldList_链接,用于记录其相关的类型信息。而函数表funcTable同样通过FieldList_链接处理参数。这种分离设计有助于优化存储空间并方便维护。 亮点三展示了选做部分的完成情况,包括函数不仅可以定义,还可以声明,以及对结构类型的等价性检查。结构体类型的处理与实验指导略有不同,不仅存储基本类型和数组的基本信息,还包括结构体的名字和FieldList,这些信息通过链接结构体单元来组织。 编译与运行阶段,重点再次强调了符号表的散列表实现,确保了程序的高效执行。同时,通过一系列接口函数如initTable、insertTable、insertFunc、insertParam等,实现了符号表的创建、更新和查询功能。 在结构体的处理上,与指导书中不同的是,除了基本的name和FieldList,还包含了结构体的内部域定义,如基本类型、数组类型信息和结构体类型。此外,还提到一个名为hashEqual的辅助函数,用于在符号表中处理结构体类型的链接。 这篇实验报告展示了作者对编译原理中符号表管理技术的深入理解和应用,特别是通过散列表优化存储和查找,以及对不同类型数据的有效组织。这是一份实用且理论与实践相结合的优秀学习成果。