资源描述:
《编译原理语义分析与中间代码生成》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、语义分析与中间代码生成复习:编译程序的逻辑过程按照编译程序的逻辑工作过程,语法分析后,接下来就要进行语义分析了,语义分析后,再生成中间代码。实际应用中,往往在语法分析的同时,进行语义分析并生成中间代码,这就是语法制导翻译法。语法制导翻译过程中,需要借助于属性文法进行语义描述和语义处理。本章内容:属性文法有关概念;语法制导翻译基本思想;中间代码形式;简单算术表达式、布尔表达式、赋值语句、条件语句、循环语句的翻译。属性文法表达式文法E—>T+T
2、TorTT—>n
3、bET1+T2{T1.type=intT2.type=T1.typeE.type=int}ET1orT2
4、{T1.type=boolT2.type=T1.typeE.type=bool}Tn{T.type=int}Tb{T.type=bool}属性文法对于某个压缩了的文法,当把每个文法符号和一组属性相关联,并把产生式附加以语义规则的时候,就得到属性文法。语法制导的翻译过程:由于属性文法的规则和产生式是一一对应的关系,所以,由属性文法确定的语义分析可以在语法分析的过程中进行。这个过程称为语法制导的翻译。属性文法(attributegrammar)A=(G,V,F),其中G:一个CFG,属性文法的基础。V:有穷的属性集每个属性与一个文法符号相关联这些属性代表与文法符号相关
5、的语义信息如类型、地址、值、代码、符号表内容等等属性与变量一样,可以进行计算和传递属性加工的过程即是语义处理的过程属性加工与语法分析同时进行属性的表示:标识符(或数),写在相应文法的下边点记法:E.Val,E.Place,E.Type…F:关于属性的属性断言或一组属性的计算规则(称为语义规则).断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相关的属性.语义规则描述的工作属性计算静态语义检查符号表操作代码生成继承属性和综合属性两类属性:综合属性(SynthesizedAttribute):归约型属性用于“自下而上”传递信息继承属性(Inher
6、itedAttribute):推导型属性用于“自上而下”传递信息。属性的计算:AX1X2…XnA的综合属性,计算S(A)=f(A(X1),…A(Xn))Xj的继承属性,计算I(Xj)=f(A(A),...A(Xn))文法符号属性的说明:非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性.终结符只有综合属性.通常规定:文法符号的综合属性与继承属性无交。综合属性的例子非终结符E、T及F都有一个综合属性val,符号digit有一个综合属性,它的值由词法分析器提供。与产生式L→E对应的语义规则仅仅是打印由E产生的算术表达式的值的一个过程,可认为这条规则定义了L
7、的一个虚属性。某些非终结符加上标是为了区分一个产生式中同一非终结符多次出现语义规则L→EE→E1+TE→TT→T1*FT→FF→(E)F→digitPrint(E.val)E.val=E1.val+T.valE.val=T.valT.val=T1.valF.valT.val=F.valF.val=E.valF.val=digit.lexval产生式综合属性的自下而上定值LE.val=19E.val=15T.val=4T.val=15F.val=4T.val=3F.val=3F.val=5digit.lexval=4digit.lexval=5digit.lexval
8、=3+*3*5+4的带注释的分析树设表达式为3*5+4,则语义动作打印数值19继承属性的例子继承属性L.in产生式语义规则DTLTintTrealLL1,idLidL.in=T.typeT.type=integerT.type=realL1.in=L.inaddtype(id.entry,L.in)addtype(id.entry,L.in)继承属性的自上而下定值DL.in=realL.in=realL.in=realT.type=realrealid2id1id3Realid1,id2,id3,,语法制导翻译的基本思想为每条产生式配上一个翻译子程序(称为语
9、义动作或语义子程序);语义动作的工作指明符号串的意义;按照这种意义规定了对应的动作:查添各种表格改变变量之值诊察与报告源程序错误产生中间代码…在语法分析的同时,当一个产生式获得匹配(对于自上而下分析)或用于归约(对于自下而上分析)时,就执行相应产生式的语义子程序。中间代码中间代码(Intermediatecode):源程序的一种内部表示,不依赖目标机的结构,易于机械生成目标代码的中间表示。几种中间语言后缀式(逆波兰表示法)三地址代码四元式三元式间接三元式树后缀式表达式的一种表示形式运算符直接跟在运算量后面又称为逆波兰表示法定义:设E是表达式,那么如果