- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理简明教程(第2版)[冯秀芳,崔冬华,段富][电子教案]第10章
《编译原理简明教程》 普通高等教育“十二五”规划计算机教材 ---太原理工大学 ---计算机科学与技术学院 ---冯秀芳、崔冬华、段富等 第一章 引言 第二章 形式语言理论基础 第三章 自动机理论基础 第四章 词法分析 第五章 语法分析—自顶向下分析方法 第六章 语法分析—自底向上分析方法 第七章 语义分析及中间代码的生成 第八章 代码优化 第九章 目标代码的生成 第十章 符号表 第十一章 目标程序运行时的存储组织与分配 第十二章 出错处理 第十三章 编译程序自动生成工具简介 第十四章 面向对象语言的编译 第十五章 并行编译技术 目 录 第10章 符号表 学习目标 符号表在整个编译期间的作用主要有两条: 一是辅助语义的(即上下文有关的)正确性检 查;二是辅助代码生成。 着重需要掌握以下内容 符号表的作用 符号表中的内容 嵌套结构语言的栈式符号表 符号表 :用表格形式存储源程序中的 各种信息。 作用 : 辅助语义的正确性检查。 辅助目标代码的生成。 目 录 10.1 符号表的组织与内容 10.2 符号表的结构与存放 10.3 符号表的管理 10.1 符号表的组织与内容 符号表是一个包含程序中的变量、子程序 、常量、过程定义、数组信息等内容的数据库。 一般地,符号表由一些表项组成二维表格。 名字域 — 存放符号或其内部码 每个表项 属性域 — 存放属性和特征 例如 : 名字域 属性域 名字1 属性1 . . . . . . 名字n 属性n 符号表的组织方式: 最简单:固定名字域和属性域的长度。如 FORTRAN语言标识符长度不超过6 个字符,可定为6位。 间接方式:在符号表的名字域中存放一个指针 或一个指针和一个整数,把标识 符存放到一个字符串数组中。见图10.2 符号表的内容 属性域的内容因符号表名字域内容不同而不同。 例如 数组:维数、下标界偶、存储区域等信息 数组信息向量表 如图10.3 静态表(编译前事先构造好):保留 符号表 字表、标准函数名表等。 动态表(编译过程中根据需要构造的 表):变量名表、数组信息 表、过程信息表等。 变量表 如图10.4 10.2 符号表的结构和存放 10.2.1 线性符号表 线性表(无序符号表) : 按程序中符号出现的先后 次序建立的表。如图 10.5 查找 : 只能线性查找,(查找效率低),结构简 单,节省空间,适合于比较小的表。 10.2.2 有序符号表 按一定顺序(如字典顺序)排列符号。 如图 10.6 、10.7 查找 : 折半查找法 , 查找效率较高。 但填入表时会增加移动开销。 10.2.3 散列符号表(哈希符号表) 利用哈希函数值确定符号在表中的位置。 hash函数性质: · 函数值只依赖于对应符号 · 函数计算简单、高效 · 函数值能较均匀分布 如: 除法散列函数、乘法散列函数、多项式 除法散列函数、平方取中散列函数等。 “质数除余法” 见图10.8 查询效率较高,但要解决散列冲突问题。 10.2.4 栈式符号表 设计一个栈,新符号出现从栈顶压入。 查找时从栈顶 → 栈底 例 PASCAL语言分程序嵌套结构 例10-1 程序的栈式符号表如图10.9、10.10、10.11 查找时,最新加入的符号总是最先查找。 适合嵌套结构的程序设计语言,但表太大时,查找速度较慢。
文档评论(0)