




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
语义分析与中间代码生成,复习:编译程序的逻辑过程按照编译程序的逻辑工作过程,语法分析后,接下来就要进行语义分析了,语义分析后,再生成中间代码。实际应用中,往往在语法分析的同时,进行语义分析并生成中间代码,这就是语法制导翻译法。语法制导翻译过程中,需要借助于属性文法进行语义描述和语义处理。本章内容:属性文法有关概念;语法制导翻译基本思想;中间代码形式;简单算术表达式、布尔表达式、赋值语句、条件语句、循环语句的翻译。,属性文法,表达式文法ET+T|TorTTn|bET1+T2T1.type=intT2.type=T1.typeE.type=intET1orT2T1.type=boolT2.type=T1.typeE.type=boolTnT.type=intTbT.type=bool,属性文法,对于某个压缩了的文法,当把每个文法符号和一组属性相关联,并把产生式附加以语义规则的时候,就得到属性文法。语法制导的翻译过程:由于属性文法的规则和产生式是一一对应的关系,所以,由属性文法确定的语义分析可以在语法分析的过程中进行。这个过程称为语法制导的翻译。,属性文法(attributegrammar),A=(G,V,F),其中G:一个CFG,属性文法的基础。V:有穷的属性集每个属性与一个文法符号相关联这些属性代表与文法符号相关的语义信息如类型、地址、值、代码、符号表内容等等属性与变量一样,可以进行计算和传递属性加工的过程即是语义处理的过程属性加工与语法分析同时进行属性的表示:标识符(或数),写在相应文法的下边点记法:E.Val,E.Place,E.TypeF:关于属性的属性断言或一组属性的计算规则(称为语义规则).断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相关的属性.,语义规则描述的工作,属性计算静态语义检查符号表操作代码生成,继承属性和综合属性,两类属性:综合属性(SynthesizedAttribute):归约型属性用于“自下而上”传递信息继承属性(InheritedAttribute):推导型属性用于“自上而下”传递信息。属性的计算:AX1X2XnA的综合属性,计算S(A)=f(A(X1),A(Xn)Xj的继承属性,计算I(Xj)=f(A(A),.A(Xn)文法符号属性的说明:非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性.终结符只有综合属性.通常规定:文法符号的综合属性与继承属性无交。,综合属性的例子,非终结符E、T及F都有一个综合属性val,符号digit有一个综合属性,它的值由词法分析器提供。与产生式LE对应的语义规则仅仅是打印由E产生的算术表达式的值的一个过程,可认为这条规则定义了L的一个虚属性。某些非终结符加上标是为了区分一个产生式中同一非终结符多次出现,综合属性的自下而上定值,设表达式为35+4,则语义动作打印数值19,继承属性的例子,继承属性L.in,继承属性的自上而下定值,D,L.in=real,L.in=real,L.in=real,T.type=real,real,id2,id1,id3,Realid1,id2,id3,,,,,语法制导翻译的基本思想,为每条产生式配上一个翻译子程序(称为语义动作或语义子程序);语义动作的工作指明符号串的意义;按照这种意义规定了对应的动作:查添各种表格改变变量之值诊察与报告源程序错误产生中间代码在语法分析的同时,当一个产生式获得匹配(对于自上而下分析)或用于归约(对于自下而上分析)时,就执行相应产生式的语义子程序。,中间代码,中间代码(Intermediatecode):源程序的一种内部表示,不依赖目标机的结构,易于机械生成目标代码的中间表示。几种中间语言后缀式(逆波兰表示法)三地址代码四元式三元式间接三元式树,后缀式,表达式的一种表示形式运算符直接跟在运算量后面又称为逆波兰表示法定义:设E是表达式,那么如果E是变量或者常量,E的逆波兰表示为EE1OPE2=E1E2OP,其中E1,E2为E1,E2的逆波兰表示。(E)=E,其中E为E的逆波兰表示。,后缀式的生成设置一个操作符栈,当扫描到操作数时,输出该操作数。当遇到操作符时,与栈顶操作符比较优先级,若栈顶操作符优先级高于栈外操作符,则输出该栈顶操作符;反之,则栈外操作符入栈。后缀表达式的计值自左向右扫描表达式,每遇到运算量就把它推进栈,每遇到k目算符就把它作用于栈顶的k个项,并把运算结果来代替这k个项,逆波兰表示的例子,A+B*(C-D)+E/(C-D)N=ABCD-*+ECDN/+a+b*c/(d+e)=abc*de+/+,逆波兰表示方法的扩充,赋值语句:V=e=Ve=例子:t=(a+b)*c/(d-e)=tab+c*de-/=转向语句:goto=jump条件语句:Ifthenelse=jumpfjump,三地址代码,一般形式:X=yopz例子x+y*z可表示为T1=y*zT2=x+T1T1、T2为编译时产生的临时变量三地址语句的种类三地址代码的具体实现四元式三元式间接三元式,四元式,一般形式:例子:a+b*c*bct1+at1t2单目运算的处理:为空。一般来讲,四元式的运算符都有对应的机器指令,或者对应的子程序,因此从四元式生成指令代码是容易的。四元式之间的联系是通过临时变量实现的,便于进行代码优化。,四元式表示的例子,A+B*(C-D)+E/(C-D)N(1)(-CDT1)(2)(*BT1T2)(3)(+AT2T3)(4)(-CDT4)(5)(T4NT5)(6)(/ET5T6)(7)(+T3T6T7),三元式,如果我们不明显给出四元式的结果部分,而是用四元式的编号来表示结果,那么我们可以得到三元式。形式如下:例子:a+b*c=*bc+a三元式的出现顺序与表达式的计值顺序一致。和四元式的比较:无须临时变量;占用存储空间少;相互引用太多,使得难以进行代码优化。,三元式表示的例子,A+B*(C-D)+E/(C-D)N(1)(-CD)(2)(*B(1)(3)(+A(2)(4)(-CD)(5)(4)N)(6)(/E(5)(7)(+(3)(6),间接三元式,间接三元式:为了便于代码优化处理,用一张间接码表辅以三元式表的办法来表示中间代码。间接码表是一张指示器表,它将按运算的先后顺序列出有关三元式在三元式表中的位置。当在代码优化过程中需要调整运算顺序时,只需重新安排间接码表即可。例子:X=(A+B)*CY=D(A+B),间接三元式表示的例子,A+B*(C-D)+E/(C-D)N(1)(-CD)(1)(2)(*B(1)(2)(3)(+A(2)(3)(4)(1)N)(1)(5)(/E(4)(4)(6)(+(3)(5)(5)(6),树形表示(抽象语法树AST),采用树形表示作为一种中间代码形式,有助于代码的产生和优化。树形表示的定义:简单变量或常数的树就是该变量或常数自身;如果表示e1和e2的树为T1和T2,那么,e1+e2,e1*e2,-e1的树分别是:显然,树形表示是三元式表示的翻版。抽象语法树(AbstractSyntaxTree)在语法树中去掉那些对翻译不必要的信息,获得更有效的源程序中间表示AST可以拓广,用来表示数组元素、过程调用、控制结构、说明等。,由语法树到AST,步骤:去掉单非产生式子树,上提终结符结点;运算符上提,取代其父结点;去掉括号,运算符上提。例子:a*(a+a),简单算术表达式和赋值句的翻译,文法:Ai:=EEE+E|E*E|-E|(E)|i引入的语义属性:E.place与非终结符E相联系,表示存放E值的变量名在符号表的入口或整数码(对临时变量)语义过程:newtemp():函数过程。每次调用,回送一个代表新临时变量名的整数码作为函数值。lookup():函数过程。对i所代表标识符查找符号表以获知它在符号表中位置(入口)。emit():语义过程。产生一个三地址代码并填入中间代码表中。,产生式的语义描述,(1)Ai:=Ep=lookup();if(p=NULL)error();elseemit(p=E.place)(2)EE(1)+E(2)E.place=newtemp();emit(E.place=E(1).place+E(2).place)(3)EE(1)*E(2)E.place=newtemp();emit(E.place=E(1).place*E(2).place)(4)E-E(1)E.place=newtemp();emit(E.place=uminusE(1).place)(5)E(E(1)E.place=E(1).place(6)Eip=lookup();if(p=NULL)error();elseE.place=p,布尔表达式的翻译,布尔表达式基本作用:用作计算逻辑值;用作控制条件。布尔表达式文法:EEE|EE|E|(E)|idrelopid|id结合性和优先级:relop;左结合。,布尔表达式的翻译,计算布尔表达式的值:逐步计算;利用布尔表达式的性质采取优化措施:ABifAthentrueelseBABifAthenBelsefalseBifBthenfalseelsetrue,布尔表达式的翻译,逐步计算的例子:ABC=D(=,C,D,T1)(,B,T1,T2)(,A,T2,T3),布尔表达式的翻译,优化计算引入的三地址代码:(ifi.placegotol):若i为真,转向第l个三地址代码(ifi(1).placerelop.opi(2).placegotol):若i(1)relop.opi(2)为真,转向第l个三地址代码(gotol):无条件转向第l个三地址代码,布尔表达式的翻译,逻辑计值EE(1)orE(2)E.place=newtemp();emit(E.place=E(1).placeorE(2).place)EE(1)andE(2)E.place=newtemp();emit(E.place=E(1).placeandE(2).place)EnotE(1)E.place=newtemp();emit(E.place=notE(1).place)E(E(1)E.place=E(1).placeEi(1)relopi(2)E.place=newtemp();emit(ifi(1)relop.opi(2)gotonextquad+3);emit(E.place=0);emit(gotonextquad+2);emit(E.place=1)EiE.place=i.place,布尔表达式的翻译,作为控制条件EiE.truelist=nextquad;E.falselist=nextquad+1;E.bcode=nextquad;emit(ifi.placegoto0);emit(goto0)Ei(1)relopi(2)E.truelist=nextquad;E.falselist=nextquad+1;E.bcode=nextquad;emit(ifi(1).placerelop.opi(2).placegoto0);emit(goto0)E(E(1)E.truelist=E(1).truelist;E.falselist=E(1).falselist;E.bcode=E(1).bcode,布尔表达式的翻译,作为控制条件EnotE(1)E.truelist=E(1).falselist;E.falselist=E(1).truelist;E.bcode=E(1).bcodeEE(1)orE(2)backpatch(E(1).falselist,E(2).bcode);E.truelist=merge(E(1).truelist,E(2).truelist);E.falselist=E(2).falselist;E.bcode=E(1).bcodeEE(1)andE(2)backpatch(E(1).truelist,E(2).bcode);E.truelist=E(2).truelist;E.falselist=merge(E(1).falselist,E(2).falselist);E.bcode=E(1).bcode,条件语句的翻译,CifEthenbackpatch(E.truelist,nextquad);C.chain=E.falselistSCS(1)S.chain=merge(C.chain,S(1).chain)TPCS(1)elseq=nextquad;emit(goto0);backpatch(C.chain,nextquad);TP.chain=merge(S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卸车岗位安全培训课件
- 2025河南驻马店市正阳县县管国有企业招聘20人(第二批)笔试参考题库附带答案详解
- 2025数字重庆大数据应用发展有限公司校园招聘10人笔试参考题库附带答案详解
- 2025年陕西农业发展集团有限公司(陕西省土地工程建设集团)招聘(200人)笔试参考题库附带答案详解
- 2025年度安徽中国人民健康保险股份有限公司芜湖中心支公司二季度招聘2人笔试参考题库附带答案详解
- 2025年国家能源集团广西电力有限公司高校毕业生春季招聘34人笔试参考题库附带答案详解
- 2025年中国大唐集团科技创新有限公司招聘14人笔试参考题库附带答案详解
- 2025山东万创智能装备科技有限公司招聘17人笔试参考题库附带答案详解
- 2025国网物资有限公司招聘高校毕业生约3人(第二批)笔试参考题库附带答案详解
- 2025四川经准特种设备检验有限公司招聘50人笔试参考题库附带答案详解
- 人教版 2024 版历史八年级上册第五单元 第 13 课《国共合作与北伐战争》检测卷
- 小学数学教师新课标考试试题(含答案)
- 厂房搬迁管理办法
- 保险学考试题(附答案)
- 中药处方点评管理办法
- 国企纪法教育实施路径
- 药品发放登记管理制度
- 临床科室科研管理制度
- 铁艺围栏采购合同
- 中国皮肤基底细胞癌诊疗指南2023
- 卫星通信技术在电力行业中的应用场景分析
评论
0/150
提交评论