编译原理语义分析与中间代码生成

编译原理语义分析与中间代码生成

ID:42329409

大小:300.01 KB

页数:37页

时间:2019-09-12

编译原理语义分析与中间代码生成_第1页
编译原理语义分析与中间代码生成_第2页
编译原理语义分析与中间代码生成_第3页
编译原理语义分析与中间代码生成_第4页
编译原理语义分析与中间代码生成_第5页
资源描述:

《编译原理语义分析与中间代码生成》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、语义分析与中间代码生成复习:编译程序的逻辑过程按照编译程序的逻辑工作过程,语法分析后,接下来就要进行语义分析了,语义分析后,再生成中间代码。实际应用中,往往在语法分析的同时,进行语义分析并生成中间代码,这就是语法制导翻译法。语法制导翻译过程中,需要借助于属性文法进行语义描述和语义处理。本章内容:属性文法有关概念;语法制导翻译基本思想;中间代码形式;简单算术表达式、布尔表达式、赋值语句、条件语句、循环语句的翻译。属性文法表达式文法E—>T+T

2、TorT T—>n

3、bET1+T2{T1.type=intT2.type=T1.typeE.type=int}ET1orT2

4、{T1.type=boolT2.type=T1.typeE.type=bool}Tn{T.type=int}Tb{T.type=bool}属性文法对于某个压缩了的文法,当把每个文法符号和一组属性相关联,并把产生式附加以语义规则的时候,就得到属性文法。语法制导的翻译过程:由于属性文法的规则和产生式是一一对应的关系,所以,由属性文法确定的语义分析可以在语法分析的过程中进行。这个过程称为语法制导的翻译。属性文法(attributegrammar)A=(G,V,F),其中G:一个CFG,属性文法的基础。V:有穷的属性集每个属性与一个文法符号相关联这些属性代表与文法符号相关

5、的语义信息如类型、地址、值、代码、符号表内容等等属性与变量一样,可以进行计算和传递属性加工的过程即是语义处理的过程属性加工与语法分析同时进行属性的表示:标识符(或数),写在相应文法的下边点记法:E.Val,E.Place,E.Type…F:关于属性的属性断言或一组属性的计算规则(称为语义规则).断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相关的属性.语义规则描述的工作属性计算静态语义检查符号表操作代码生成继承属性和综合属性两类属性:综合属性(SynthesizedAttribute):归约型属性用于“自下而上”传递信息继承属性(Inher

6、itedAttribute):推导型属性用于“自上而下”传递信息。属性的计算:AX1X2…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.valF.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产生式语义规则DTLTintTrealLL1,idLidL.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是表达式,那么如果

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。