- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 语义分析和代码生成 第9章 语义分析和代码生成 9.2 中间代码 9.2.1波兰后缀表示 9.2.1波兰后缀表示 9.2.2 N-元表示 9.2.2 N-元表示 9.2.2 N-元表示 9.2.2 N-元表示 9.2.2 N-元表示 9.2.3 栈式抽象机及其汇编指令 9.2.3 栈式抽象机及其汇编指令 9.2 栈式抽象机及其汇编指令 9.3 声明的处理 9.3 声明的处理 9.3.1 符号常量 9.3.1 符号常量 9.3.2 简单变量 9.3.2 简单变量 9.3.2 简单变量 9.3.2 简单变量 9.3.2 简单变量 9.3.3 数组 9.3.3 数组 9.3.3 数组 9.3.3 数组 9.3.3 数组 9.3.4 过程声明 9.4 表达式语句 9.4 表达式语句 9.4 表达式语句 9.5 if 语句 9.5 if 语句 9.6 while语句 9.7 for循环语句 9.7 for循环语句 9.8 write_语句 9.9 read_语句 9.10 过程调用和返回 9.10.1 参数的基本传递形式 9.10.1 参数的基本传递形式 9.10.2 过程调用 9.10.2 过程调用 9.10.3 过程定义的处理 9.10.3 过程定义的处理 9.10.4 返回语句和过程终止 9.11 语义分析及代码生成实现 9.12 错误处理 习题 多数语言的IF语句文法为: IF语句::=if 表达式 THEN 语句 [ else 语句 ] 而TEST的IF语句文法为: if_stat::= if (expression ) statement [else statement ] IF语句的处理思路是处理表达式所生成的目标代码是计算该表达式的值(真或假),并将结果置于操作数栈栈顶。如果表达式的值是假,则抽象机指令“BRF labA”将控制转到labA;否则控制传给所生成的抽象机指令序列中的下一条指令。BR指令是抽象机的无条件转移指令。 TEST的IF语句属性翻译文法为: if_stat::=if (expression )@BRF↑label1 statement @BR↑label2 @SETlabel↓label1 [ else statement ] @SETlabel↓label2 @BRF↑label1 :输出 BRF label1 @BR↑label2:输出 BR label2 @SETlabel↓label1:设置标号label1 @SETlabel↓label2:设置标号label2 IF语句的处理程序 例如,有TEST程序语句: If (a5) a=1; else a=2; 按照IF语句翻译文法,设LABELP=0,则应产生下列目标代码: LOAD 0 //表达式a5的代码 LOADI 5 GT BRF LABEL0 //执行动作符号@BRF↑label1所产生的 LOADI 1 // a=1;的代码 STO 0 BR LABEL1 //执行动作符号@BR↑label2所产生的 LABEL0: //执行动作符@SETlabel↓label1设置标号label1 LOADI 2 STO 0 LABEL1: //执行动作符@SETlabel↓label2设置标号label2 TEST的WHILE文法为: while_stat::= while (expression ) statement 当表达式成立时,执行语句。其属性翻译文法为: while_stat::= while @SETlabel↑label1 (expr ) @BRF↑label2 statement @BR↓label1 @SETlabel↓label2 动作解释如下: @SETlabel↓label1:设置标号label1 @BRF↑label2 :输出 BRF label2 @BR↑label1:输出 BR label1 @SETlabel↓label2:设置标号label2 while语句的处理程序 例如,有TEST语句: While (a3)a=a+2; 假设目前的标号记数的当前值为:labelp=2,则属性翻译文法应产生代码: Label2: //label1 LOAD 0 LOADI 3 LE BRF label3 //label2 LOAD 0 LOADI 2 ADD STO 0 BR label2 Labe
您可能关注的文档
- 農學電子資源利用課程.ppt
- 女性衛生用品產品定位與行銷策略之研究-以康乃馨衛生棉為例.ppt
- 浅谈我的读书感受-洛阳商报数字报刊平台.pdf
- 禽流感的预防与控制.ppt
- 青藏高原冰川冻土变化对区域生态环境影响评估与对策.doc
- 情绪与压力的管理.ppt
- 染料敏化太阳电池的制作与性能测试.ppt
- 乳房保健与疾病防治.ppt
- 噻托溴铵改善肺功能临床研究.ppt
- 三相电路功率的测量.doc
- 国家安全教育大学生读本高教2024版课件第二章在党的领导下走好中国特色国家安全道路.pptx
- 国家安全教育大学生读本高教2024版课件第三章更好统筹发展和安全.pptx
- 国家安全教育大学生读本高教2024版课件第二章在党的领导下走好中国特色国家安全道路.pdf
- 国家安全教育大学生读本导论三个微视频高教社2024年8月版.pptx
- 国家安全教育大学生读本电子版教材导论高教社2024年8月版.docx
- 国家安全教育大学生读本电子版教材导论高教社2024年8月版.pdf
- 国家安全教育大学生读本高教2024版电子版教材第五章坚持以政治安全为根本.pdf
- 国家安全教育大学生读本高教2024版课件第九章筑牢其他各领域国家安全屏障 - 副本.pptx
- “优秀支部工作法”—市疾控中心行政党支部 2018.06.04.docx
- 廉政建设课件(褚进前).pptx
文档评论(0)