- 1、本文档共55页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * 数组中每个元素是等长度的,结构体中的分量不等长度,所以需要存储偏移量。 * * 8.7.1 简单说明语句的翻译 8.7 说明语句的翻译 说明语句的作用: 就是说明类型等属性信息,在翻译时对每个局部变量在符号表填写相应的内容,如类型、层次、相对地址、内情向量。 说明语句分多种,举两种说明语句的翻译: 变量说明语句的翻译 常量说明语句的翻译 变量说明语句的翻译 1. 变量说明语句的文法描述 2. 变量说明语句的翻译 var exam, b: integer; (1) VARDCL→var IDS |? (2) IDS→id,IDS(1) (3) IDS→id: integer (4) IDS→id: char (5) IDS→id: bool (6) IDS→id: real Name TYPE KIND VAL ADDR exam 4 integer b 1 integer 在符号表中插入两条记录: 长度 编号 产生式 语义动作 (4) IDS→id:char { fill(entry(id),char); IDS·type=char } (3) IDS→id:integer { fill(entry(id),integer); IDS·type=integer } (2) IDS→id,IDS(1) { fill(entry(id), IDS(1)·type); IDS·type=IDS(1)·type } (1) VARDCL→var IDS|? { nop } 3. 翻译的语义动作 FILL(entry(id),Type)表示将类型Type填入符号表中 entry(id) 表示变量名id在符号表中的入口 常量说明语句的翻译 1. 常量说明语句的文法描述 2. 常量说明语句的翻译 策略:和变量说明一样,先翻译后面的产生式,再翻译前面的产生式,以便在归约时,执行语义动作,将常量的值、类型、种属填入符号表。 例:const A = 123;K= ‘ABC’ (1)CONSTDCL → constCONSTDEF (2) → ? (3)CONSTDEF → CONSTDEF;id=INT (4) → CONSTDEF;id=STR (5) CONSTDEF → id=INT (6) → id=STR 产生式 语义处理 (5) CONSTDEF→id=INT { entry(id).val= entry(INT)·val; entry(id).type=integer; entry(id).kind=数值常数; } (6) CONSTDEF→id=STR { entry(id).val= entry(STR).val; entry(id).type=char; entry(id).kind=字符常数; } const A=123;K=‘abc’ 3. 翻译的语义动作 将常量INT在符号表中的入口或值直接填入符号id所指符号表的VAL栏 将常数的类型填入符号表的Type栏 3,4产生式的翻译与5,6产生式的翻译相同 1,2产生式没有语义动作 将常数的种属填入符号表的Kind栏 Name Type Kind Val Addr A 1 integer 数值常数 123 K 1 char 字符常数 abc * 同一个标识符在不同的过程中中可能表示不同的对象,具有不同的性质,要求分配不同的存储空间。 8.7.2 过程中的说明 如何组织符号表,使得同一个标识符在不同的作用域中得到正确的引用而不产生混乱。一个子程序一个符号表,一个类一个符号表。 * 处理嵌套过程中的说明语句翻译方案 P→MD {addwidth(top(tblptr),top(offset)); ① pop();pop(offset)} M→ε {t:=mktable(nil); ② push(t,tblptr);push(0,offset)} D→D1;D2 D→proc id; N D1;S {t:=top(tblptr); addwidth(t,top(offset)); pop(tblptr);pop(offset); ③ enterproc(top(tblptr),id.name,t)} * D→ id: T {enter(top(tblptr),id.name,T.type, top
您可能关注的文档
- CAN总线的时间触发调度方法设计和实验研究.pdf
- 微机原理和应用ch4-stu.pptx
- CAN总线的特点和J1939协议通信原理.doc
- CAN总线简介和其特点.doc
- 微机原理和应用第3章.ppt
- can总线与无线数据收发.doc
- CG第3篇-图形生成算法.ppt
- CH0背景与安排.pdf
- ch01_第一节 线性规划问题和数学模型.pdf
- ch2 基本数据结构和其运算.ppt
- 五位一体教案教学教案设计.docx
- 思修与法基-教学教案分享.pptx
- 大学军事之《中国国防》题库分享.docx
- 2023版毛泽东思想和中国特色社会主义理论体系概论第五章-中国特色社会主义理论体系的形成发展.pdf
- 思修与法基 教学全案分享.docx
- 大学军事之《军事思想》题库分享.docx
- 《经济思想史》全套课件-国家级精品课程教案课件讲义分享.pdf
- 厦门大学国际金融全套资料(国家级精品课程)--全套课件.pdf
- 2023版毛泽东思想和中国特色社会主义理论体系概论第五章-中国特色社会主义理论体系的形成发展.docx
- 2023版毛泽东思想和中国特色社会主义理论体系概论第五章中国特色社会主义理论体系的形成发展分享.pdf
文档评论(0)