




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章符号表 在编译程序工作的过程中 需要不断收集 记录和使用源程序中一些语法符号的类型和特征等相关信息 这些住处一般以表格形式存储于系统中 如常数表 变量名表 数组名表 过程名表 标号表等等 统称为符号表 对于符号表组织 构造和管理方法的好坏会直接影响编译系统的运行效率 6 1符号表的组织 符号表的组织涉及数据结构方面知识 略 对符号表的访问常见操作有 1 判定一给定的名字是否在表中 2 在表中填入一个新名字 3 访问与给定名字相关的信息 4 为给定的名字填入或更新其某些信息 5 从表中删除一个或一组名字须指出 在很多程序设计语言中 对名字的作用域有相应的规定 即同一名字的标识符 在不同的作用域里标识了不同的对象 且占用了不同的存储空间 因此 在组织符号表时 应能反映各个标识符的作用域 6 2分程序结构语言符号表的建立 分程序结构语言用其所写的程序单元 programunit 中 可以再包含嵌套的程序单元 且其中每个程序单元均可定义属于自己的一组局部变量 如PASCAL中的过程说明 C中花用括 号括起来的分程序或复合语句等 程序单元的嵌套导致了变量作用域的嵌套 故把允许名字作用域嵌套的语言称为具有 的语言 PASCAL是典型的 之一 虽然C不是 的语言 但其函数定义中的函数体可以是一个嵌套的分程序 因而也涉及到各个局部变量的作用域 对于嵌套的作用域 同名变量在不同处代表了不同的实体 因此 需采用分层建立和处理符号表的方式 PASCAL语言符号表的构造 在PASCAL程序中 标识符的作用域是包含说明 定义 该标识符的最小分程序 即 若一标识符在某分程序首部已作说明 则它在整个分程序内均有定义 除非它在某内层分程序被再次定义 即它的作用域是整个分程序 是本层分程序及内层分程序的全局量 程序中的标号局限于定义该标号的最小分程序 我们可将PASCAL的每个过程视为分程序 其参数总是局限于相应的过程体内 查填表方案 为了表征一PASCAL程序中各个分程序的嵌套层次关系 我们可将分程序按其开始符号出现的顺序编号 在扫描源程序时亦可按这一顺序进行处理 方法是当在一分程序首部某说明中扫描到一个标识符时 以此标识符查相应于本层分程序的符号表 若表中已有此项 则它被重复说明 出错 否则 在表中新登记一项 将该符号及其相关信息填入 在分程序执行语句中遇一标识符时 首先查本层表 若找不到 则查直接外层的符号表 如此等等 若在某层查到 则可使用相关信息 若遍查所有外层均未找到 则无定义 出错 符号表组织方式 为实现上述方案 应这样组织符号表 分层组织符号表的登记项 使各分程序的符号表登记项连续存放 而不被内层分程序的符号表分割 建立一个 分程序表 用来记录各层分程序符号表的有关信息 该表有三个域 OUTERN指明该分程序的直接外层分程序的编号 ECOUNT记录该分程序在符号表登记项个数 POINTER指向该分程序在符号表中的起始位置 PROCEDUREB1 VARA B C D REAL PROCEDUREB2 LABELL1 VARE F REAL BEGIN END PROCEDUREB3 LABELL2 L3 VARG H REAL FUNTIONB4 VARA INTEGER BEGIN END BEGIN END BEGIN END 在前图中 各分程序符号表是按B2 B4 B3 B1的顺序 即各分程序的END出现顺序 排列的 为使各分程序的符号表登记项连续地排列 利用嵌套结构的特点 可使用一栈存放临时符号表 当遇到一分程序的END时 它的所有符号已出现在栈顶 可将其移至正式表中 我们可将表本身的空白区用作栈 并用整型变量TOPENT及LASENT指明临时栈的栈顶及符号表的当前最末项 设符号表区可容纳n个登记项S 1 n 其中S n S n 1 用作栈 B 1 m 为分程序表 用CURRBL LASTBL指明当前正在处理的分程序编号及已处理完的最高层分程序的编号 构造符号表的算法 1 初始化 CURRBL 0 LASENT 0 LASTBL 0 TOPENT 0 注 以上各量在下面的程序中分别简记为CB LE LT TE 2 1 当进入分程序的首符号或过程时 B LT OUTERN CB B LT ECOUNT 0 B LT POINTER TE CB LT 2 遇到分程序中的定义性出现时 TP S TE 相关信息 B CR ECOUTN B CR POINTER TE 3 遇到END时 B CB POINTER LE 1 for k 1 k B CB EC k S LE S TE CB B CB OUTERN 3 重复2 直到扫描结束 对于前面的程序结构 其构造符号表的过程见教材中P266图6 5 6 3非分程序结构语言符号表的建立 我们以FORTRAN语言为例 介绍其符号表的构造 FORTRAN是块结构语言 FORTRAN程序由一或多个相对独立的程序段组成 其中有唯一的主程序段 其余为子程序段 FUNTION SUBROUTINE BLOCKDATA 程序段间的信息传递是由形实结合及公共数据区实现的 因此 程序段名及公共区名是全局量 而各段中定义的变量均是局部量 FORTRAN语言的编译一般是把每个段视为独立程序单元进行的 为各段产生相应的代码 再连接装配成一完整的目标程序 因此 当一程序段编译完毕 该段的局部量已完成使命 可从表中删除 但全局量仍需保留 我们可为其建立两个表 全局符号表及局部符号表 其中局部表是可重复使用的 较灵活的方法是 将表数据区从两头使用 用指针AVAIL1及AVAIL2分别指向局部名表空白区和全局名表空白区 用法见P268图6 6需指出 有时为实现程序全局优化 局部名表要保留到优化结束才释放 本章结束语 符号表管理是编译程序很重要的组成部分 在整个编译过程都要使用 因此 应考虑如何设置表信息栏的内容这一因素 对常见程序设计语言而言 变量表信息
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年老年人健康管理考核试题及答案
- 2025年高年龄测试题及答案
- 慢性膀胱炎合并膀胱黏膜白斑护理查房
- 阿图什市2025-2026学年八年级上学期语文期中模拟试卷
- 安徽省2025年高二学业水平合格性考试数学试卷及答案
- 2025 年小升初福州市初一新生分班考试英语试卷(带答案解析)-(外研版)
- 湖北省2025年一级建筑师建筑材料与构造辅导:喷射混凝土试题
- 山东省日照市莒县第三中学2024-2025学年七年级下学期第三次月考生物试题(含答案)
- 北师大版五年级上册数学第五单元 分数的意义 检测卷(无答案)
- 购买公司的合同范本
- 知识题库-人社练兵比武竞赛测试题及答案(七)
- 陆上石油天然气开采安全管理人员复习题
- 孔子的美学思想对现代设计的启示
- 回弹法测试原始记录表
- 《热力发电厂》热力发电厂全面性热力系统
- 新教师岗前培训讲座中小学教学常规PPT
- 2023年国家电网公司电力安全工作规程(变电部分)2023年6月修订
- 大概念教学的实践与探索
- DB15-T 3015-2023地理标志产品 俄体粉条
- 卡拉贝利110千伏线路吊车跨越G3013高速公路施工方案
- 闸调器介绍讲解
评论
0/150
提交评论