- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.9 说明语句的翻译 说明语句的作用是指明被说明的量的一些具体属性,如类型、种属、存储分配特点及其它属性等等。 编译程序对说明语句进行处理的主要任务是把有关属性填入符号表相应登记项中。 说明语句主要有变量定义(也称类型说明)语句、数组说明语句及类型定义语句等 5.9.1 类型说明语句的翻译 类型说明语句的常见形式为 类型名 变量名表 其中,类型名可以是程序设计语言提供的简单数据类型名(如integer、real、boolean等)或是程序员自己定义的数据类型(如结构、联合类型等)的名字。 变量名表是以逗号隔开的变量或数组名。为了叙述方便,我们假定简单类型名只有int、real、boolean三种(其它简单类型的处理与其类似),而自定义数据类型名的处理将在5.9.2节中讨论。 我们假定数组名具有形式 name[l1..u1 , l2..u2 , … , ln..un] ,其中, li ,ui (i=1,2,…,n)为整型常数,且满足li ui 。 类型说明的属性翻译文法 为了区分一般变量与指针,我们在符号表中引入一个标志域IsPointer,当其为真(=1)时表示该变量为指针,否则(=0)为一般变量。另外,我们假定指针变量的定义形式与C语言相同。 5.9.2 数据类型定义语句的翻译 一般说来,常用的高级语言(如PASCAL、C、JAVA等)都支持复杂的数据类型,这些数据类型除了系统提供的常用类型外,还允许用户自定义复杂的数据类型,如PASCAL中的RECORD语句、C语言中的 struct定义语句等等。 要实现这类语句的翻译,首先应有合理的数据结构来存储复杂数据类型的各种信息。其次,由于复杂数据类型实际上是由多层次、复合使用简单数据类型定义和变量(分量)定义而建立的,所以,处理好数据类型分量定义与变量定义的关系,以及分量为复杂类型时的递归、嵌套问题是实现数据类型定义语句翻译的关键。 由于处理上述问题的方法极其复杂,本节仅概要地介绍翻译这类语句的基本思想,有兴趣的读者可参阅有关文献。 本章结束语 至此,我们已对常见程序设计语言的一些语法结构讨论了语法制导翻译方法。 当然,所讨论的范围不可能包罗程序设计语言的一切语法结构,也不能涉及语义处理的全部细节. 我们仅希望大家通过对前面所介绍内容的学习,能够得到一点带规律性的启示,以便在今后的工作中有所借鉴。 Varable → iden {$$=Entry($1);/*变量在符号表中序号*/ VarList[$$].CAT=SimVar;/*种属为简单变量*/ VarList[$$].IsPointer=0;/*指针标志*/ VarList[$$].ADDR=NULL;/*尚未分配内存空间,下同*/} | ‘*’ iden /*指针*/ {$$=Entry($1);/*变量在符号表中序号*/ VarList[$$].CAT=SimVar;/*种属为简单变量*/ VarList[$$].IsPointer=1;/*指针标志*/ VarList[$$].ADDR=NULL; } | ArrayVar{$$=$1;} ArrayMSG → iden [ number .. number { $$=Entry($1); VarList[$$].CAT=Array;/*种属为数组*/ VarLIst[$$].IsPointer=0; VarList[$$].ADDR-DIM=1; /*记录维数;下面为内情向量申请空间,并填入第一维下标信息,其中,前两个单元(下标为[0]和[1])用来存放a、C之值 (此时暂不填写),n值可由DIM保存,因此不必另存。*/ VarList[$$].ADDR-Vector=malloc(5*sizeof(int)); VarList[$$].ADDR-Vector[2]=$3;/*第一维下界*/ VarList[$$].ADDR-Vector[3]=$5;/*第一维上界*/ VarList[$$].ADDR-Vector[4]=$5-$3+1/*第一维界差*/ } | *iden [ number .. number /*指针数组*/ { $$=Entry($1); VarList[$$].CAT=Array;/*种属为数组*/ VarList[$$].IsPointer=1; VarList[$$].ADDR-DIM=1;/*记录维数. 下面的填写工作与上 一产生式相同,注释略*/ VarList[$$].ADDR-Vector=malloc(5*sizeof(int)); VarList[$$].ADDR-Vector[2]=$4;/*第一维下界*/ V
您可能关注的文档
- 西北大学城市设计课件 第五章 城市总体层面的设计.ppt
- 西北大学城市设计课件 第一章 城市与城市设计.ppt
- 西北大学电影作品读解课件 暗恋桃花源.ppt
- 西北大学电影作品读解课件 邦妮和克莱德.ppt
- 西北大学电影作品读解课件 纯真年代.ppt
- 西北大学电影作品读解课件 大 话西游.ppt
- 西北大学电影作品读解课件 低俗小 说.ppt
- 西北大学电影作品读解课件 红色沙漠.ppt
- 西北大学电影作品读解课件 蝴蝶梦.ppt
- 西北大学电影作品读解课件 滑动门.ppt
- 西北工业大学编译原理课件第一章 绪论.ppt
- 西北工业大学可编程计算机控制器原理与应用课件1.1 可编程控制器的产生.ppt
- 西北工业大学可编程计算机控制器原理与应用课件1.2 可编程控制器的定义.ppt
- 西北工业大学可编程计算机控制器原理与应用课件1.3 可编程控制器的主要功能.ppt
- 西北工业大学可编程计算机控制器原理与应用课件1.4 PCC的特点.ppt
- 西北工业大学可编程计算机控制器原理与应用课件1.5 PCC与其他工业控制装置的比较.ppt
- 西北工业大学可编程计算机控制器原理与应用课件1.6 PCC的发展趋势.ppt
- 西北工业大学可编程计算机控制器原理与应用课件2.1 可编程控制器的组成及其各部分的功能.ppt
- 西北工业大学可编程计算机控制器原理与应用课件2.3 可编程控制器的工作过程.ppt
- 西北工业大学可编程计算机控制器原理与应用课件2.4 B&R 2000 PCC硬件简介.ppt
文档评论(0)