- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oracle第10讲
编译原理第10讲 语义分析(3) 贾西平 Email: jiaxp@126.com 内容提纲 条件语句if的翻译 循环语句while的翻译 三种基本控制结构的翻译 内容提纲 条件语句if的翻译 循环语句while的翻译 三种基本控制结构的翻译 控制语句的翻译 控制语句用于实现程序流程的控制。 程序流程控制可分为三种基本结构: (1) 顺序结构,一般用复合语句实现; (2) 选择结构,用if和case等语句实现; (3) 循环结构,用for、while、do(即repeat)等语句实现。 条件语句if的翻译 条件语句if的代码结构如下: if(E)S1;else S2布尔表达式E仅用于控制对S1和S2的选择,作为转移条件,对E赋予两种“出口”: “真”出口,出向S1 “假”出口,出向S2 条件语句if的文法 条件语句if的语义子程序 根据程序语言的处理顺序 (1)用产生式(2) C→if(E)进行归约 E的真出口为E所生成四元式序列后的下一个地址,将“)”后的第一个四元式地址回填至E的真出口 E的假出口地址则作为待填信息放在C的语义变量C.chain中;C→if(E) { Backpatch(E.tc, nxq); C.chain=E.fc; } 条件语句if的语义子程序 (2)用产生式(1) S→CS(1)继续向上归约 处理到S→if(E) S(1),E的真出口已处理,E的假出口(即语句S的出口)也是语句S(1)的出口,地址未定,故将C.chain和S(1).chain一起作为S的待填信息链用函数merge链在一起保留在S的语义值S.chain中,即有S→ CS(1) {S.chain=merge(C.chain, S(1).chain)} 如果条件语句不含else部分,则在产生式(1)、(2)归约为S后,用下一个将要产生的四元式地址回填S的出口地址链S.chain; 如果条件语句为if-else形式,则用产生式(4) TP→CS(1);else 进行归约; 条件语句if的语义子程序 (3)用Tp→CS(1);else 归约。首先在S(1)语句序列后产生一个无条件转移四元式,跳过S(2),该四元式的地址保留在q中. (i) (S(1)的第一个四元式) /*E的真出口*/ 条件语句if的语义子程序 条件语句if的语义子程序 (4) 用产生式(3) S→TpS(2)归约。 S→TpS(2) {S.chain=merge(Tp.chain, S(2).chain);} 内容提纲 条件语句if的翻译 循环语句while的翻译 三种基本控制结构的翻译 条件循环语句while的代码结构 条件循环语句while (E) S(1)常被翻译成如图所示的代码结构。 while的文法和语义子程序设计 条件循环语句while的文法G[S]如下: G[S]:(1) ?S→WdS(1) (2) ?Wd→W(E) (3) ?W→while while的文法和语义子程序设计 条件循环语句while的文法G[S]如下: G[S]:(1) ?S→WdS(1) (2) ?Wd→W(E) (3) ?W→while while的文法和语义子程序设计 条件循环语句while的文法G[S]如下: G[S]:(1) ?S→WdS(1) (2) ?Wd→W(E) (3) ?W→while while的文法和语义子程序设计 文法G[S]对应的语义加工子程序如下: (1) ?W→while {W.quad=nxq;} (2) ?Wd→W(E) {Backpatch(E.tc,nxq); Wd.chain=E.fc; Wd.quad= W.quad;} (3) ?S→Wd S(1) {Backpatch(S(1).chain,Wd.quad); emit((j,_,_,Wd.quad); S.chain= Wd.chain;} 内容提纲 条件语句if的翻译 循环语句while的翻译 三种基本控制结构的翻译 画代码结构图 画代码结构图 100 (jnz,a,_,102) 101 (j,_,_,113) 102 (jnz,b,_,104) 103 (j,_,_,113) 104 (j,x,y,106) 105 (j,_,_,112) 106 (j≠,
文档评论(0)