- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                chp8
                    (3)属性文法一般表示方法: 例8.2:无符号整数的属性文法 8.2.4一遍扫描的处理办法      在语法分析的同时计算属性值,无需构造实际的语法树;这种方法同下面两个因素有关:  使用继承属性构造a-4+5的语法树 静态语义审查    (1)类型检查。根据类型相容性要求,验证程序中执行的每个操作是否遵守语言的类型系统的过程,编译程序必须报告不符合类型系统的信息。   (2)控制流检查。控制流语句必须使控制转移到合法的地方。例如,在C语言中break语句使控制跳离包括该语句的最小while、for或switch语句。如果不存在包括它的这样的语句,则就报错。   (3)一致性检查。在很多场合要求对象只能被定义一次。例如Pascal语言规定同一标识符在一个分程序中只能被说明一次,同一case语句的标号不能相同,枚举类型的元素不能重复出现等等。   (4)上下文相关性检查。比如,变量名字必须先声明后引用;而有时,同一名字必须出现两次或多次,例如,Ada  语言程序中,循环或程序块可以有一个名字,出现在这些结构的开头和结尾,编译程序必须检查这两个地方用的名字是相同的。    (5)名字的作用域分析  翻译为中间语言的好处      (1)便于进行与机器无关的代码优化;      (2)使编译程序改变目标机更容易;      (3)使编译程序的结构在逻辑上更为简单明确,以中间语言为界面,编译前端和后端的接口更清晰。 产生赋值语句三地址代码的语法制导定义 例:根据上面的翻译模式,将布尔表达式:ab or cd and ef翻译成三地址代码 8.5.3 用作控制流语句的布尔表达式的翻译 布尔表达式在控制流语句中的作用:用于对语句的选择,其中间值无须保留。 如:if  E  then S1  else  S2:如果E为真,转向S1,否则转向S2。因此需要给出E的“真”出口和“假”出口。 产生布尔表达式三地址代码的语义规则 产生布尔表达式三地址代码的语义规则(续) 使用翻译模式,实现一遍扫描完成布尔表达式作为条件转移的翻译 基本思路:           由于在生成某些跳转语句时,语句标号可能还是未知,因此需要采用回填技术来解决这个问题。           在生成跳转指令时,对于未知的目标,可以先建立一个链表,将这些具有相同的跳转目标的语句串起来,然后在确定了目标后,再进行回填。 跳转指令的三地址代码: (jnz,a,-,p)  : if  a  goto   p (jrop,x,y,p):if x rop y goto p     rop:、=、、… (j,-,-,p)         :goto  p 布尔表达式的文法: (1)E→E1 or M E2  (2)      |E1 and M E2  (3)      |not E1  (4)      |(E1)  (5)      |id1 relop id2  (6)      |id  (7)M→ε //M用来产生下一条语句的标号 翻译模式用到如下三个函数:     1.makelist(i):创建一个仅包含i的新表,i是四元式数组的一个下标(标号)。      2.merge(p1,p2):将由指针p1和p2指向的两个表合并,且返回一个指向连接后的表的指针。      3.backpatch(p,i):把i作为目标标号回填到p所指向的表中的每一个转移指令中的第四区段。 此处的“表”都是为“反填”所拉的链 8.6.2控制流语句的属性文法 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 使用一遍扫描的布尔表达式的翻译模式 E?E1 or ME2          {backpatch(E1.falselist,M.quad);         E.truelist:=merge(E1.truelist,E2.truelist);         E.falselist:=E2.falselist     } E?E1 and ME2       {backpatch(E1.truelist,M.quad);         E.truelist:=E2.truelist;         E.falselist:=merge(E1.falselist,E2.falselist);} E?not E1   {  E.truelist:=E1.falselist;                         E.falselist:=E1.truelist   } E ?( E )     { 
                您可能关注的文档
最近下载
- HG/T 2431-2018- 水处理剂_阻垢缓蚀剂Ⅲ.pdf VIP
- 上海市青浦XX中学高三下学期期中考试历史试卷.docx VIP
- 关于进一步加强“安全生产基础台账”管理工作的通知.pdf VIP
- 2024-2025学年湖南机电职业技术学院单招《职业适应性测试》复习提分资料(培优)附答案详解.docx VIP
- 2025下半年浙江绍兴市公安局警务辅助人员招聘55人笔试备考题库及答案解析.docx VIP
- 山宇SY8000变频器说明书用户手册.pdf
- 贝加莱(B&R)PLC_CF卡烧写说明PVI.docx VIP
- 电子信息工程应届生工作简历模板PPT.pptx VIP
- 上海市进才中学2024-2025学年高三上英语9月月考(含答案).docx VIP
- 年处理2000吨桑叶提取车间布置设计常晓利.docx VIP
 原创力文档
原创力文档 
                        

文档评论(0)