- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
18th Ch7 语义分析和中间代码产生 III 2009Spring
* * 本节讨论无条件和条件语句的翻译,只讨论四元式的产生。 本节内容 标号和转移语句 条件语句 分叉语句 标号的两种使用方法 L: S Goto L 语言中允许标号先定义后使用,也允许先使用后定义。 (1) 先定义 L1 : S1 Goto L1 … 遇到L1 : S1 P1 定义 … 标号 L1 符号表 遇到Goto L1 (j, _, _, P1) 地址 定义否 … 类型 名字 P1 ( ) … (2) 先使用 goto L2 … Goto L2 L2 : S2 q1 未 … 标号 L2 地址 定义 … 类型 名字 遇到goto L2, 填符号表,“未定义”,把NXQ填入L2的地址部分,作为链头。产生( j, _, _, 0) q1 (j, _, _, 0 ) 遇到goto L2, 查到未定义,取符号表中L2的地址q1填入四元式q2:(j, _, _,q1),将q2填入符号表。 … … q2 (j, _, _, q1 ) q2 遇到L2:S2,就可以回填。(假设S2对应的第一个四元式标号是P3。) q3 q3 q3 已 一般而言,带标号语句产生式为 S ? label S label ? i: Label ? i: 的语义动作 1. 若i所指的标识符(假定为L)不在符号表中,则把它填入,置类型为“标号”,“定义否”为“已”,地址为NXQ。 2, 若 L已在符号表中,但“类型”不为“标号”或者“定义否”为“已”,则报告出错。 3. 若L已在符号表中,则把标志“未”改为“已”;然后,把地址栏中的链头(记为q)取出,同时把NXQ填在其中;最后,执行BACKPATCH(q,NXQ)。 1 较为复杂的程序控制语句常常是嵌套的。 S1后有一条无条件转移指令,跳转到本语句之后。这里,与上一节不同的是,在S2翻译之后,也不能确定其跳转地址,它要跨越S2和S3。 所以,转移地址的确定与语句所处的环境有关。 if E1 THEN if E2 then S1 else S2 ELSE S3 解决办法 令每个非终结符S附带一项语义值S.CHAIN,它指出一条链的头,该链由所有期待翻译完S后回填目标的四元式所组成。 注意 回填值可能是{S}的下一条四元式,也可能不是。真正的回填,要在处理完S的外层后进行。 考虑语句 WHILE E(1) DO S(1) 译为代码结构 E(1)的代码 S(1)的代码 假出口 真出口 由于语句的嵌套,WHILE翻译完了也未必知道假出口的转移目标,所以作为S(1).CHAIN保留下来,以便伺机回填。 While E(1) do S(1) E(1).TC E(1).FC IF E THEN ELSE S 示例 由于语句的嵌套,WHILE翻译完了也未必知道假出口的转移目标,所以作为S(1).CHAIN保留下来,以便伺机回填。 S ? if E then S |if E then S else S |while E do S |begin L end |A L ? L; S |S (7.5) S—语句 L—语句串 A—赋值句 E—布尔表达式 为了能及时回填有关四元式的转移目标,如同处理布尔表达式一样,需要对文法(7.5)进行改写。 S ? C S | TP S | Wd S | begin L end | A L ? LS S | S C ? if E then TP ? C S else Wd ? W E do W ? while LS ? L; (7.6) 语义动作 C ? if E then { BACKPATCH (E.TC, NXQ); C.CHAIN := E.FC } S ? C S(1) { S.CHAIN := MERG(C.CHAIN, S(1).CHAIN} TP ? C S(1) else { q := NXQ; GEN(j, _, _, 0); BACKPATCH(C.CHAIN,NXQ); TP.CHAIN := MERGE(S(1).CHAIN,q)} S ? TP S(2) { S.CHIAN := MERG(TP.CHAIN, S(2).CHAIN} 语义动作 (续) W ? while { W.QUAD := NXQ } Wd ? W E do { BACKPATCH (E.TC,NXQ); Wd.CHAIN := E.FC; Wd.QU
您可能关注的文档
最近下载
- 工程施工资源配置计划施工资源配置计划.docx VIP
- DB65T 4254-2019机关办公楼(区)物业管理规范 保洁服务.docx VIP
- 《中国高血压防治指南(2024年修订版)》解读及临床实践题库答案-2025年华医网继续教育答案.docx VIP
- 开题报告_(某化工降压变电所电气设计)_图文.docx VIP
- 香精香料废水污染控制与治理技术规范.pdf
- 2025年软件定义汽车:SOA和中间件行业研究报告.pdf VIP
- 中华护理学会团体标准(最新版).pdf VIP
- 2025年老旧小区改造工程进度管理与施工安全风险报告.docx
- 2025年学宪法、讲宪法知识竞赛题库及答案.pdf VIP
- 2022年贵州省遵义市八年级竞赛数学试卷.doc VIP
文档评论(0)