- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
09第9章 语义解析和代码生成
第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
您可能关注的文档
最近下载
- 2023版思想道德与法治全册课件.pptx
- 2021-2023年上海二模分类汇编:现代文二-上海市十六区近三年(2021-2023)高考语文一模、二模试题分类汇编(解析版).docx VIP
- DB41T2071连阴雨预警信号等级划分.pdf VIP
- 2025至2030中国存储卡行业市场深度分析及发展预测与投资策略报告.docx VIP
- 统编版八年级上册语文课内全部古诗词赏析(注音、注释、译文、赏析).pdf VIP
- 中西医结合加速康复外科共识.pptx VIP
- 特色中药材产业园项目可行性研究报告模板-立项备案.doc
- 基于PLC控制防盗门报警器设计.doc VIP
- 抗战胜利八十周年主题教育.pptx VIP
- 猪场拆除工程方案.pdf VIP
文档评论(0)