- 1、本文档共141页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
※回顾※ 语义分析是干什么的? 其任务是对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译。 包括两个方面的工作。 首先是对各种语法范畴进行静态语义检查,例如,变量是否定义、类型是否正确等等。 如果语义正确,则进行中间代码的翻译。 为什么我们需要属性文法? 因为语义分析依循的是语言的语义规则,通常使用属性文法描述语义规则。 8.1 属性文法的基本概念 强调 终结符只有综合属性,它们由词法分析器提供; 非终结符既可以有综合属性也可有继承属性,文法开始符号的所有继承属性作为属性计算前的初始值 对出现在产生式右边的继承属性和出现在产生式左边的综合属性都必须提供一个计算规则 出现在产生式左边的继承属性和出现在产生式右边的综合属性不由所给的产生式的属性计算规则进行计算,它们由其他产生式的属性计算规则或者由属性计算器的参数提供 ※例一※ 综合属性 ※例二※ 注: 语法制导翻译仅对每一产生式定义了相应的语义,而未对如何使用产生式进行限定,所以这种翻译的模式,既可用于自上而下的分析,也可用于自下而上的分析,不依赖于实现语法分析的具体方法。 给出下列表达式的逆波兰式: 1. –a+b*c 2. a*(-b+c) 写出下列表达式的三元式 1. a:=b*c+b+b*d 2. a+b*(c-d)+e/(c-d) 100 (j,A,B,102) 101 (j,_,_,104 ) 102 (+,x,1,x ) 103 (j,_,_,107 ) 104 (j=,c,0,107) 105 (+,y,z,x) 106 (j,_,_,104) 107 1 设计属性文法,讨论翻译的一般语义规则。 1 产生标志,被转目标,在S.code中出现 S.Begin := newlabel E.True := newlabel 如 S? while E do S1 的语义规则包含四部分: E.CODE S1.CODE Goto S.begin … S.begin E.t E.f 2 “内部的”/可隐藏标志用 S.Next及两标志表示。 /S.next构成 E.F := S.next S1.next := S.begin 3 S.code 的组成 S.code := gen(S.begin ‘:’)|| E.code|| gen(S.true ‘:’)|| S1.code || gen (‘goto’ S.begin) 4 对1,2归纳,可知转移目标有两类:一类在S.code和S.next中;另一类是可隐藏的,内部的。 2 一遍扫描产生代码,翻译模式。 S? while M1 E do M2 S2 M ? ξ { M.quad := nextquad } S? if E then M1 S1 N else M2 S2 { b(E.truelist, M1.q); b(E.falselist,M2.q); S.nextlist := merg(S1.nextlist,N.nextlist, S2.nextlist)} N ? ξ { N.n := nakelist(nextquad); } M ? ξ { M.q := nextquad } C ? if E then b(e.tc, NXQ) C.C := E.FC TP ? C S1 ELSE q: (j, _,_,_) b(c.c,NXQ) TP.C := merg(S1.c,q); S ? TP S2 S.C := merg(TP.C, S2.C) 形式: case E of C1: S1 C2: S2 … Cn-1: Sn-1 otherwise : Sn end 语义: E是一个表达式,称为选择子。通常是一个整型表达式或者字符(char)型变量。每个Ci的值为常数,Si是语句。 若E的值等于某个Ci,则执行Si(i= 1,2…,n-1),否则执行Sn。当某个Si执行完之后,整个case语句也就执行完了。 1 分叉只有10个左右时,翻译成条件转移语句。 T := E; L1: IF T≠C1 GOTO L2 S1; GOTO NEXT L2: IF T≠C2 GOTO L3 S2; GOTO NEXT; L3: ...... Ln-1: IF T≠Cn-1 GOTO Ln Sn-1; GOTO NEXT; Ln: Sn;
您可能关注的文档
- 石河子大学师范学院中国教育史课件第一章 绪论.ppt
- 石河子大学水利建筑工程学院房地产开发与投资分析课件第八章 房地产开发合同.ppt
- 石河子大学水利建筑工程学院房地产开发与投资分析课件第二章 房地产开发项目可行性研究.ppt
- 石河子大学水利建筑工程学院房地产开发与投资分析课件第九章 房地产开发项目的工程建设管理.ppt
- 石河子大学水利建筑工程学院房地产开发与投资分析课件第六章 房地产开发项目规划设计及其评价.ppt
- 石河子大学水利建筑工程学院房地产开发与投资分析课件第七章 房地产开发工程招标与投标.ppt
- 石河子大学水利建筑工程学院房地产开发与投资分析课件第三章 房地产开发用地的取得.ppt
- 石河子大学水利建筑工程学院房地产开发与投资分析课件第十二章 物业管理.ppt
- 石河子大学水利建筑工程学院房地产开发与投资分析课件第十三章 房地产开发项目策划.ppt
- 石河子大学水利建筑工程学院房地产开发与投资分析课件第十一章 房地产销售.ppt
文档评论(0)