第09章 语义分析及代码生成_第1页
第09章 语义分析及代码生成_第2页
第09章 语义分析及代码生成_第3页
第09章 语义分析及代码生成_第4页
第09章 语义分析及代码生成_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1S.PO.P语义分析及生成中间代码程序语义分析及生成中间代码程序代码生成程序代码生成程序代码优化程序代码优化程序语法分析程序语法分析程序词法分析程序词法分析程序错错误误处处理理符符号号表表管管理理2教学目标教学目标 明确语义分析的任务明确语义分析的任务 了解中间代码的几种形式了解中间代码的几种形式 掌握波兰后缀表示法、常用语句的四元式掌握波兰后缀表示法、常用语句的四元式表示、抽象机代码表示表示、抽象机代码表示39.1 9.1 语义分析的概念语义分析的概念 9.2 9.2 中间代码中间代码9.3 9.3 声明的处理声明的处理 9.4 9.4 表达式语句表达式语句9.5 if9.5 if语句语句

2、 9.6 while9.6 while语句语句9.7 for9.7 for循环语句循环语句 9.8 write9.8 write语句语句9.9 read9.9 read语句语句 9.10 9.10 过程调用和返回过程调用和返回9.11 9.11 语义分析及代码生成实现语义分析及代码生成实现9.12 9.12 错误处理错误处理教学内容教学内容4程序语言中间代码目标代码程序语言中间代码目标代码翻译翻译翻译翻译源代码源代码词法分析词法分析识别单词识别单词语法分析语法分析单词单词识别句子识别句子5考虑下段程序:考虑下段程序: int a; int b; char a,c; d=a+b;1. 错误提示(

3、错误提示(VC6编译):编译):(5) : error C2371: a : redefinition; different basic types(3) : see declaration of a(6) : error C2065: d : undeclared identifier第第3 3行语句行语句char a,c;char a,c;为声明语句,为声明语句,单看这一行没有语法错误,但和单看这一行没有语法错误,但和上一行语句比较,发现变量上一行语句比较,发现变量a a属于属于重复定义。重复定义。第第4 4行语句为表达式语句,单看这行语句为表达式语句,单看这一行也没有错误,但查询前面的一

4、行也没有错误,但查询前面的声明语句,发现变量声明语句,发现变量d d没有声明。没有声明。6p语义分析主要借助符号表记录的信息来实现语义语义分析主要借助符号表记录的信息来实现语义分析动作。分析动作。常见的语义分析动作有:常见的语义分析动作有:1) 对表达式中的操作数进行类型的一致性检查。对表达式中的操作数进行类型的一致性检查。2) 分析由语法分析所识别出来的语句的意义并作分析由语法分析所识别出来的语句的意义并作相应的语义处理。相应的语义处理。如:(如:(1)int a;char b;a=a+b; (2)int *p;p=(int *)malloc(2); 如:(如:(1)int a;char b

5、;a=a+b;7p中间代码:一种介于中间代码:一种介于源语言和目标语言之间源语言和目标语言之间的中的中间语言形式间语言形式生成中间代码的生成中间代码的目的目的 (1)便于优化便于优化(2)便于移植便于移植语言语言1 1语言语言2 2语言语言N N机器机器1 1机器机器2 2机器机器M M中间代码中间代码89波兰后缀表示(逆波兰式)多应用于表达式类的语言结波兰后缀表示(逆波兰式)多应用于表达式类的语言结构,也能够通过操作符的扩充来表示其他的语言结构。构,也能够通过操作符的扩充来表示其他的语言结构。1011121314T1=A+BT2=C+DT3=T1*T2T4=T3-E15*, C, D, T1

6、=, T1, , F*, C , D , T1/, T1, E , T2+, B , T2, T3=, T3, , A16171819例如,有下段程序:例如,有下段程序:int a,b;a=10;b=20*a;假设记录假设记录a、b属性信息符属性信息符号表为:号表为: 则相对应的抽象机汇编则相对应的抽象机汇编程序如下:程序如下:LOADI 10STO 0LOADI 20LOAD 0MULTSTO 2 202122常量声明的处理流程如下:常量声明的处理流程如下:1) 首先识别常量的名字,将其赋给属性首先识别常量的名字,将其赋给属性n;2) 识别综合常量表达式,将其放在识别综合常量表达式,将其放在

7、c中,并将表达式的类型赋中,并将表达式的类型赋给属性给属性s。3) 调用动作程序调用动作程序插入,其功能是调用符号表管理程序,将名插入,其功能是调用符号表管理程序,将名字字n、类型、类型s及表达式的值及表达式的值c填入符号表中。填入符号表中。232425:=;|;:=|:=|(|=|=|=|!=):=(|):=(*|/):=()|E:=T|E+T|E-TT:=F|T*F|T/FF:=(E)|i2627+, a , 10, T1=, T1, , a则相对应的抽象机汇编则相对应的抽象机汇编程序如下:程序如下:LOAD 0LOADI 10ADDSTO 0 2829例如,有例如,有TEST程序语句:程

8、序语句:if (a5) a=1; else a=2;按照按照IF语句翻译文法,设语句翻译文法,设LABELP=0,则应产生下列,则应产生下列目标代码:目标代码:LOAD 0 /表达式表达式a5的代码的代码LOADI 5GTBRF LABEL0 /执行动作符号执行动作符号BRFlabel1所产生的所产生的LOADI 1 / a=1;的代码的代码STO 0BR LABEL1 /执行动作符号执行动作符号BRlabel2所产生的所产生的LABEL0: /执行动作符执行动作符SETlabellabel1设置标号设置标号label1LOADI 2STO 0LABEL1: /执行动作符执行动作符SETlab

9、ellabel2设置标号设置标号label2 30TEST的的WHILE文法为:文法为::= while () 当表达式成立时,执行语句。其属性翻译文法为:当表达式成立时,执行语句。其属性翻译文法为::= while SETlabellabel1 () BRFlabel2BRlabel1 SETlabellabel2动作解释如下:动作解释如下:SETlabellabel i:设置标号:设置标号label iBRFlabel2 :输出:输出 BRF label2BRlabel1:输出:输出 BR label131属性翻译文法应产生代码:属性翻译文法应产生代码:Label2: /label1LOA

10、D 0LOADI 3LEBRF label3 /label2LOAD 0LOADI 2ADDSTO 0BR label2Label3: 32FOR语句的属性翻译文法如下:语句的属性翻译文法如下::=for (;SETlabellabel1BRFlabel2BRlabel3;SETlabellabel4 BRlabel1) SETlabellabel3 BRlabel4SETlabellabel2 动作解释:动作解释:1. SETlabellabel i:设置标号:设置标号label i2. BRFlabel2 :输出:输出 BRF label23. BRlabel i:输出:输出 BR lab

11、el i33例如,有例如,有TEST语句:语句: For(i=1;i3;i=i+1)a=a+10;假设目前的标号记数的假设目前的标号记数的当前值为:当前值为: labelp=6则属性翻译文法应产生则属性翻译文法应产生下列代码:下列代码:LOAD 2 /i的地址是的地址是2LOADI 1STO 2Label6: /label1LOAD 2LOADI 3LEBRF label7: /label2BR label8 /label3Label9: /label4LOAD 2LOADI 1ADDSTO 2BR label6 /label1Label8: /label3LOAD 0 /a的地址是的地址是0LOADI 10ADDSTO 0BR label9 /label4Label7: 34一个好的编译程序对错误的处理应包含下面几点:一个好的编译程序对错误的处理应包含下面几点:1)1)错误改正错误改正: :根据语法规则对程序的意图进行猜测,根据语法规则对程序的意图进行猜测,试图改正错误,难以实现。试图改正错误,难以实现。2)2)错误局部化处理错误局部化处理: :尽可能将错误限制在一个局部范尽可能将错误限制在一个局部范围围( (语法单位语法单位) )。发现错

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论