精品课程《编译原理》PPT课件第9章--符号表.ppt_第1页
精品课程《编译原理》PPT课件第9章--符号表.ppt_第2页
精品课程《编译原理》PPT课件第9章--符号表.ppt_第3页
精品课程《编译原理》PPT课件第9章--符号表.ppt_第4页
精品课程《编译原理》PPT课件第9章--符号表.ppt_第5页
免费预览已结束,剩余37页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9 1类型的语义表示 标识符的处理主要包括语义代码化 作用域处理 符号表构造 单元分配等工作 单词是最小的语义单位 一 符号表的作用 表格管理 错误处理 词法分析 中间代码生成 语法分析 中间代码优化 目标代码生成 源程序 目标程序 在整个编译阶段都离不开符号表 二 符号表的内容Pascal0有以下几种类型 整型 integer实型 real布尔型 boolean数组型 ARRAY N1 N2 OFT记录型 RECORDid1 T1 idn TnEND 类型表TYPEL结构形如 种类部分 指针 整型 实型 布尔型 数组型 记录型 TCLASS部分结构如下 数组信息表AINFL的结构形如 下界 上界 指针 类型的长度 记录信息表RINFL的表项结构形如 域名部分 区距部分 FTP是域类型部分 一个记录类型要占几个RINFL表项 不同记录类型所占表项个数不一 而在表项中没有链接部分 因此在不同记录的RINFL表之间可放置一条空项 以表示记录类型的RINFL表中的结束 综上所述 我们有 a array AINFL d record RINFL 设一记录类型的RINFL表为 假定integer real boolean为标准类型 其地址部分分别为itp rtp btp Leng itp Leng rtp Leng btp 1 例1 设有数组类型ARRAY 1 10 OFARRAY 1 5 OFinteger则其内部表示如下图所示 例2 记录类型RECORDu integer a ARRAY 1 10 OFboolean r RECORDx y realENDEND则表示如下图所示 atp TCLASS TPOINT AINFL表 110btp1 9 2标识符的语义表示 程序中标识符的出现分为定义性的和使用性的 标识符的定义部分确定标识符的语义 它主要包括种类 类型 地址等等内容 标识符语义的内部表示称为机内符 机器内部符号 或语义字 在我们的PASCAL0语言中 标识符的种类有 常量种类类型种类 变量种类 实在变量 赋值形参变量 引用形参变量 赋值形参变量 过函种类 实在变量 标识符语义字的一种结构 类型部分 种类部分 地址部分 ICLASS的具体结构如下 常量 类型 变量 过函 域名种类 形参 引用型形参 从实际实现的角度来说 ICLASS的上述结构是很不经济的 因为如果用编码方法 三个二进位就够了 但上述结构直观 便于描述 因此还是采用这种结构 IADDR部分的具体意义依赖于ICLASS内容 1 若ICLASS c 1 则IADDR是CONSL表地址 2 若ICLASS t 1 则IADDR是类型长度3 若ICLASS v 1 则IADDR是形如 的抽象地址 其中LEVEL是层数 OFF是区距部分 4 若ICLASS d 1 则是域类型长度5 若ICLASS p 1 则IADDR是过函信息表PFINFL的地址 该表的表项结构如下 层数 区距 DISSPLAY表的区距 参数个数 子程序入口地址 参数 处理完临时变量时的第一个可用OFF值 标识符的语义字内容如下图所示 常量 tp v loff 变量 过函 例子 设有PASCAL过程说明段 PROCEDUREp VARx real y boolean CONSTpai 3 14 TYPEarr ARRAY 1 10 OFinteger VARm integer a arr FUNCTIONf Z real FUNCTIONG U W real real K integer integer BEGIN ENDBEGIN END 各标识符的语义字分别如下图所示 实在过函标识符的OFF值为3 第一个形参的OFF值为4 ainfp表示AINFL表的一表项地址如下图 Pinfp1如所示 PFINFLPARINFL 其他的情况类似 9 3符号表的组织 一 符号表的结构符号表记为SYMBL 它是标识符的语义表 在语义学中 把这种表称为环境 SYMBL表项的结构如下 标识符部分 语义字部分 二 定义性标识符1 CONSTPi 3 142 TYPEA 3 VARA B C4 PROCEDUREX A B 5 FUNCINONX A B Tname6 RECORDX T XEND 三 标识符的作用域与处理程序段 PROGRAM END过程段 PROCEDURE END函数段 FUNCTION END记录类型 RECORD END 具体实现方法可分为两种 真删除法 加标记法 9 4抽象地址的处理 存储分配分为静态分配与动态分配 在编译时分配的称静态分配 在目标程序运行时分配的称动态分配 编译程序只能确定某种结构的形式地址 称之为抽象地址 抽象地址通常采用如下结构 层数部分 区距部分 主 p q 0层 1层 2层 每当一个过程说明的子程序被调用时 就要给其中的变量分配一串存贮单元 称这一串单元为该过程的一个活动区 从第3号单元开始分配给过函名 形参等 活动区的分配情况如下图所示 管理信息 形式参数2形式参数1过函名 DISPLAY表 局部变量 临时变量 l 1 0 2 4 5 3 l off l off l off l off l off l off l off l off size T l off l off l off l off 实在声明 抽象地址的变化规律可图示如下 varid T l off l 1 4 l off l 1 4 l off l 1 4 l off l 1 4 形参入口 procp funcp procP funcF l off l off Size T l off l off 1 l off l off 2 l off l off 2 形参声明 Id T Varid T funcF T procP 形参出口 l off l off l 1 其中小写字母的标识符表示实在标识符 大写字母的标识符则表示形参标识符 Size T 表示类型T的长度 在形参出口 off l 1中的l 1表示DISPLAY表的位置 例 在下面程序中 每个对偶 l i 表示此刻的LEVEL和OFF值 l 10 LABEL100 200 l 10 CONSTpai 3 14 l 10 TYPEarr ARRAY 1 10 OFinteger l 10 VARx integer l 11 a ARRAY 1 5 OFinteger l 16 FUNCTIONf l 1 4 VARx real l 1 5 a arr 传值 l 1 15 VARc arr 传地址 l 1 16 PROCEDUREG l 1 18 FUNCTIONF real l 1 20 real l 1 20 l 2 形参结束off l 1 1 BEGIN END l 16 9 5标识符的处理算法 例子 设有非形参过程首部 层数为l PROCEDUREP X Y integer VARZ real PROCEDUREG U real J integer FUNCTIONF VARW real FUNCTIONH M integer real bool

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论