编译原理语义分析与中间代码生成.ppt
《编译原理语义分析与中间代码生成.ppt》由会员分享,可在线阅读,更多相关《编译原理语义分析与中间代码生成.ppt(37页珍藏版)》请在三一办公上搜索。
1、语义分析与中间代码生成,复习:编译程序的逻辑过程按照编译程序的逻辑工作过程,语法分析后,接下来就要进行语义分析了,语义分析后,再生成中间代码。实际应用中,往往在语法分析的同时,进行语义分析并生成中间代码,这就是语法制导翻译法。语法制导翻译过程中,需要借助于属性文法进行语义描述和语义处理。本章内容:属性文法有关概念;语法制导翻译基本思想;中间代码形式;简单算术表达式、布尔表达式、赋值语句、条件语句、循环语句的翻译。,属性文法,表达式文法 ET+T|T or T Tn|b ET1+T2 T1.type=int T2.type=T1.type E.type=int E T1 or T2 T1.typ
2、e=bool T2.type=T1.type E.type=bool T n T.type=int T b T.type=bool,属性文法,对于某个压缩了的文法,当把每个文法符号和一组属性相关联,并把产生式附加以语义规则的时候,就得到属性文法。语法制导的翻译过程:由于属性文法的规则和产生式是一一对应的关系,所以,由属性文法确定的语义分析可以在语法分析的过程中进行。这个过程称为语法制导的翻译。,属性文法(attribute grammar),A=(G,V,F),其中 G:一个CFG,属性文法的基础。V:有穷的属性集每个属性与一个文法符号相关联这些属性代表与文法符号相关的语义信息如类型、地址、值
3、、代码、符号表内容等等属性与变量一样,可以进行计算和传递属性加工的过程即是语义处理的过程属性加工与语法分析同时进行属性的表示:标识符(或数),写在相应文法的下边点记法:E.Val,E.Place,E.TypeF:关于属性的属性断言或一组属性的计算规则(称为语义规则).断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相关的属性.,语义规则描述的工作,属性计算静态语义检查符号表操作代码生成,继承属性和综合属性,两类属性:综合属性(Synthesized Attribute):归约型属性用于“自下而上”传递信息继承属性(Inherited Attribute):推导型属性用
4、于“自上而下”传递信息。属性的计算:AX1 X2 XnA的综合属性,计算 S(A)=f(A(X1),A(Xn)Xj的继承属性,计算 I(Xj)=f(A(A),.A(Xn)文法符号属性的说明:非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性.终结符只有综合属性.通常规定:文法符号的综合属性与继承属性无交。,综合属性的例子,非终结符E、T及F都有一个综合属性val,符号digit有一个综合属性,它的值由词法分析器提供。与产生式LE对应的语义规则仅仅是打印由E产生的算术表达式的值的一个过程,可认为这条规则定义了L的一个虚属性。某些非终结符加上标是为了区分一个产生式中同一非终结符多次出
5、现,综合属性的自下而上定值,设表达式为35+4,则语义动作打印数值19,继承属性的例子,继承属性L.in,继承属性的自上而下定值,D,L.in=real,L.in=real,L.in=real,T.type=real,real,id2,id1,id3,Real id1,id2,id3,,,,,语法制导翻译的基本思想,为每条产生式配上一个翻译子程序(称为语义动作或语义子程序);语义动作的工作指明符号串的意义;按照这种意义规定了对应的动作:查添各种表格改变变量之值诊察与报告源程序错误产生中间代码在语法分析的同时,当一个产生式获得匹配(对于自上而下分析)或用于归约(对于自下而上分析)时,就执行相应产
6、生式的语义子程序。,中间代码,中间代码(Intermediate code):源程序的一种内部表示,不依赖目标机的结构,易于机械生成目标代码的中间表示。几种中间语言后缀式(逆波兰表示法)三地址代码 四元式 三元式 间接三元式树,后缀式,表达式的一种表示形式运算符直接跟在运算量后面又称为逆波兰表示法定义:设E是表达式,那么如果E是变量或者常量,E的逆波兰表示为EE1 OP E2=E1 E2 OP,其中E1,E2 为 E1,E2的逆波兰表示。(E)=E,其中E为E 的逆波兰表示。,后缀式的生成设置一个操作符栈,当扫描到操作数时,输出该操作数。当遇到操作符时,与栈顶操作符比较优先级,若栈顶操作符优先
7、级高于栈外操作符,则输出该栈顶操作符;反之,则栈外操作符入栈。后缀表达式的计值自左向右扫描表达式,每遇到运算量就把它推进栈,每遇到k目算符就把它作用于栈顶的k个项,并把运算结果来代替这k个项,逆波兰表示的例子,A+B*(C-D)+E/(C-D)N=A B C D-*+E C D N/+a+b*c/(d+e)=abc*de+/+,逆波兰表示方法的扩充,赋值语句:V=e=Ve=例子:t=(a+b)*c/(d-e)=tab+c*de-/=转向语句:goto=jump条件语句:If then else=jumpfjump,三地址代码,一般形式:X=y op z例子 x+y*z 可表示为 T1=y*z
8、T2=x+T1 T1、T2为编译时产生的临时变量三地址语句的种类三地址代码的具体实现四元式三元式间接三元式,四元式,一般形式:例子:a+b*c*bct1+a t1t2单目运算的处理:为空。一般来讲,四元式的运算符都有对应的机器指令,或者对应的子程序,因此从四元式生成指令代码是容易的。四元式之间的联系是通过临时变量实现的,便于进行代码优化。,四元式表示的例子,A+B*(C-D)+E/(C-D)N(1)(-C D T1)(2)(*B T1 T2)(3)(+A T2 T3)(4)(-C D T4)(5)(T4 N T5)(6)(/E T5 T6)(7)(+T3 T6 T7),三元式,如果我们不明显给
9、出四元式的结果部分,而是用四元式的编号来表示结果,那么我们可以得到三元式。形式如下:例子:a+b*c=*b c+a 三元式的出现顺序与表达式的计值顺序一致。和四元式的比较:无须临时变量;占用存储空间少;相互引用太多,使得难以进行代码优化。,三元式表示的例子,A+B*(C-D)+E/(C-D)N(1)(-C D)(2)(*B(1)(3)(+A(2)(4)(-C D)(5)(4)N)(6)(/E(5)(7)(+(3)(6),间接三元式,间接三元式:为了便于代码优化处理,用一张间接码表辅以三元式表的办法来表示中间代码。间接码表是一张指示器表,它将按运算的先后顺序列出有关三元式在三元式表中的位置。当在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 语义 分析 中间 代码 生成
链接地址:https://www.31ppt.com/p-6016582.html