8-中间代码生成.ppt





《8-中间代码生成.ppt》由会员分享,可在线阅读,更多相关《8-中间代码生成.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、词法分析词法分析语法分析语法分析语义分析语义分析中间代码生成中间代码生成代码优化代码优化目标代码生成目标代码生成源程序源程序目标程序目标程序第第8 8章章 语法制导翻译和语法制导翻译和 中间代码生成中间代码生成1GE:EE+T|E-T|TTT*F|FF(E)|i例如,考虑:例如,考虑:EE+T符号意义?整个式子的意义?符号意义?整个式子的意义?2语义检查:语义检查:审查每个语法结构的审查每个语法结构的静态语义静态语义,即验证语法结构合,即验证语法结构合法的程序是否真正有意义。法的程序是否真正有意义。例:类型、运算、维数、越界例:类型、运算、维数、越界例:类型、运算、维数、越界例:类型、运算、维
2、数、越界语义分析的任务语义分析的任务语义处理:语义处理:执行真正的翻译,生成程序的中间代码目标代码。执行真正的翻译,生成程序的中间代码目标代码。例:变量的存储分配例:变量的存储分配例:变量的存储分配例:变量的存储分配例:表达式的求值例:表达式的求值例:表达式的求值例:表达式的求值例:语句的翻译(中间代码的生成)例:语句的翻译(中间代码的生成)例:语句的翻译(中间代码的生成)例:语句的翻译(中间代码的生成)38.1 8.1 属性文法属性文法语义分析的描述语义分析的描述描述语法规则的同时,编写相应的语义描述语法规则的同时,编写相应的语义动作和计算顺序动作和计算顺序语义的形式化描述语义的形式化描述操
3、作语义学、公理语义学、指称语义学操作语义学、公理语义学、指称语义学属性文法属性文法接近形式化的语义描述方法接近形式化的语义描述方法4属性文法属性文法(attributegrammar)的定的定义义属性文法属性文法属性文法属性文法是一个三元组:是一个三元组:是一个三元组:是一个三元组:A A(GG,V V,F F),),),),其中其中其中其中 GG:是一个上下文无关文法。是一个上下文无关文法。是一个上下文无关文法。是一个上下文无关文法。V V:有有有有穷穷穷穷的的的的属属属属性性性性集集集集,每每每每个个个个属属属属性性性性与与与与文文文文法法法法的的的的一一一一个个个个终终终终结结结结符符符
4、符或或或或非非非非终终终终结结结结符符符符关关关关联联联联,这这这这些些些些属属属属性性性性代代代代表表表表与与与与文文文文法法法法符符符符号号号号相相相相关关关关信信信信息息息息,比比比比如如如如它它它它的的的的类类类类型型型型、值值值值、代代代代码码码码序序序序列列列列、符符符符号号号号表表表表内内内内容容容容等等等等等等等等。属属属属性性性性与与与与变变变变量量量量一一一一样样样样,可可可可以以以以进进进进行行行行计计计计算算算算和和和和传传传传递递递递。属属属属性性性性加加加加工工工工的的的的过过过过程程程程即即即即是是是是语语语语义义义义处处处处理理理理的的的的过过过过程。程。程。程
5、。F F:关关关关于于于于属属属属性性性性的的的的属属属属性性性性断断断断言言言言或或或或一一一一组组组组属属属属性性性性的的的的计计计计算算算算规规规规则则则则(称称称称为为为为语语语语义义义义规规规规则则则则)。断断断断言言言言或或或或语语语语义义义义规规规规则则则则与与与与一一一一个个个个产产产产生生生生式式式式关关关关联联联联,只只只只引引引引用用用用该该该该产产产产生生生生式式式式左左左左端端端端或或或或右右右右端的终结符或非终结符关联的属性。端的终结符或非终结符关联的属性。端的终结符或非终结符关联的属性。端的终结符或非终结符关联的属性。关系语义信息作为终结符和非终结符的属性关系语义
6、信息作为终结符和非终结符的属性关系语义信息作为终结符和非终结符的属性关系语义信息作为终结符和非终结符的属性 语义分析定义为语义分析定义为语义分析定义为语义分析定义为规则规则规则规则式的断言和谓词式的断言和谓词式的断言和谓词式的断言和谓词5用用 法法第一步:第一步:针对语义,为文法符号设置针对语义,为文法符号设置属性属性终结符使用单词的属性终结符使用单词的属性第二步:第二步:为为每个产生式每个产生式设置相应的语义规则设置相应的语义规则描述各属性的关系描述各属性的关系什么是什么是“语法制导翻译语法制导翻译”:语法制导:语法制导:语法制导:语法制导:语义的抽象说明;语义的抽象说明;语义的抽象说明;语
7、义的抽象说明;翻译:翻译:翻译:翻译:方案设计,规定实现方法(计算次序)方案设计,规定实现方法(计算次序)方案设计,规定实现方法(计算次序)方案设计,规定实现方法(计算次序)6属性文法的书写格式属性文法的书写格式语义规则语义规则相关的属性等式相关的属性等式.相关的属性等式相关的属性等式文法规则文法规则产生式产生式1.产生式产生式n7例:例:用属性文法表示简单的无符号整数文法:用属性文法表示简单的无符号整数文法:numbernumberdigit|digitdigit0|1|2|3|4|5|6|7|8|91 1、文法规则、文法规则、文法规则、文法规则digit0digit0,表明表明表明表明di
8、gitdigit的值为的值为的值为的值为0 0。可以用属性。可以用属性。可以用属性。可以用属性等式等式等式等式digit.digit.valval:=0:=0 表示,将它和规则表示,将它和规则表示,将它和规则表示,将它和规则digit0digit0 联系起来。联系起来。联系起来。联系起来。2 2、文法规则、文法规则、文法规则、文法规则numberdigitnumberdigit,表明这个数就只包含了一表明这个数就只包含了一表明这个数就只包含了一表明这个数就只包含了一个数字,其值就是这个数字的值。用属性等式表示为个数字,其值就是这个数字的值。用属性等式表示为个数字,其值就是这个数字的值。用属性等
9、式表示为个数字,其值就是这个数字的值。用属性等式表示为 number.number.valval:=digit.:=digit.valval。分析分析分析分析 一个数最重要的属性是它的值,命名为一个数最重要的属性是它的值,命名为一个数最重要的属性是它的值,命名为一个数最重要的属性是它的值,命名为valval。显然,每个显然,每个显然,每个显然,每个数字都有一个值。可以用它表示的实际数直接计算。数字都有一个值。可以用它表示的实际数直接计算。数字都有一个值。可以用它表示的实际数直接计算。数字都有一个值。可以用它表示的实际数直接计算。83 3、文法规则文法规则文法规则文法规则numbernumber
10、digitnumbernumberdigit,表明文法符号表明文法符号表明文法符号表明文法符号的数目不止一个。必须表示出这个文法产生式的数目不止一个。必须表示出这个文法产生式的数目不止一个。必须表示出这个文法产生式的数目不止一个。必须表示出这个文法产生式两边符两边符两边符两边符号的值号的值号的值号的值之间的关系。之间的关系。之间的关系。之间的关系。借用下标进行区分,将文法写成如下形式:借用下标进行区分,将文法写成如下形式:借用下标进行区分,将文法写成如下形式:借用下标进行区分,将文法写成如下形式:number1number2digitnumber1number2digit 注意:注意:注意:注
11、意:此写法并不是说左右的此写法并不是说左右的此写法并不是说左右的此写法并不是说左右的numbernumber不同,仅仅为不同,仅仅为不同,仅仅为不同,仅仅为了阅读的方便。了阅读的方便。了阅读的方便。了阅读的方便。语义规则可表示为:语义规则可表示为:语义规则可表示为:语义规则可表示为:number1.val:=number2.val*10+digit.val9完整的属性文法:完整的属性文法:完整的属性文法:完整的属性文法:左部左部右部右部number1number2digitnumber1number2digit,number1.number1.valval:=:=number2.number2
12、.valval*10+digit.*10+digit.valvalnumberdigitnumberdigit,number.number.valval:=digit.:=digit.valvaldigit0|1|2|3|4|5|6|7|8|9,digit.digit.valval:=0,1,2,3,4,5,6,7,8,9:=0,1,2,3,4,5,6,7,8,910分析分析首先将类型信息作为文法符号的属性,首先将类型信息作为文法符号的属性,记为记为type。1、文法规则文法规则Tint,所对应的属性等式是所对应的属性等式是T.type:=integer2、文法规则文法规则DTL,L.type
13、:=T.type例:例:用属性文法表示标识符的类型信息用属性文法表示标识符的类型信息DTLTint|realLL1,idLid113、文法规则文法规则Lid,addtype(id.entry,L.type)4、文法规则文法规则LL1,id,L1.type:=L.type;addtype(id.entry,L.type)12例例8-1 8-1 计算器的设计计算器的设计编制算术表达式的文法编制算术表达式的文法引入属性表示语义信息引入属性表示语义信息将值将值 valval 作为表达式作为表达式 E E、项项 T T 和因子和因子 F F 的属性的属性用用语义规则语义规则描述表达式的求值描述表达式的求
14、值13属性文法属性文法(语法制导定义)(语法制导定义)LEprint(E.val)EE1+TE.val:=E1.val+T.valETE.val:=T.valTT1*FT.val:=T1.val*F.valTFT.val:=F.valF(E)F.val:=E.valFdigitF.val:=digit.lexvallexval是单词是单词digit的属性的属性例例例例8-38-314例例8-2 8-2 说明语句类型信息说明语句类型信息方法方法编写说明语句的文法编写说明语句的文法将将类型信息类型信息作为类型描述作为类型描述T的的属性属性type和变量表和变量表L的属性的属性in。目的目的分析说明
15、语句分析说明语句D,为变量指定类型为变量指定类型15语法制导定义语法制导定义DTLL.in:=T.typeTintT.type:=integerTrealT.type:=realLL1,id L1.in:=L.inaddtype(id.entry,L.in)Lidaddtype(id.entry,L.in)entry单词单词id的属性的属性addtype在在符号表中为变量添加类型信息符号表中为变量添加类型信息16属性分类属性分类综合属性综合属性从其子结点的属性值计算出来的;从其子结点的属性值计算出来的;如:如:E.val、T.type继承属性继承属性从其兄弟结点和父结点的属性值计算出来的从其兄
16、弟结点和父结点的属性值计算出来的如:如:L.in固有属性(单词属性)固有属性(单词属性)17属性的计算属性的计算语法制导翻译:作语法分析,构造语法制导翻译:作语法分析,构造语法制导翻译:作语法分析,构造语法制导翻译:作语法分析,构造语法树语法树语法树语法树,然,然,然,然后在树的每个后在树的每个后在树的每个后在树的每个结点结点结点结点上添加相应的上添加相应的上添加相应的上添加相应的语义规则语义规则语义规则语义规则综合属性综合属性综合属性综合属性自底向上自底向上自底向上自底向上按照语义规则来计算各结点的综合按照语义规则来计算各结点的综合按照语义规则来计算各结点的综合按照语义规则来计算各结点的综合
17、属性值属性值属性值属性值继承属性继承属性继承属性继承属性需要探讨计算次序需要探讨计算次序需要探讨计算次序需要探讨计算次序18digit.lexval=3F.val=3T.val=3dgit.lexval=5F.val=5T.val=15E.val=15digit.lexval=4F.val=4T.val=4E.val=19Print(19)例例8-33*5+4的的语法树与属性计算语法树与属性计算文法文法文法文法19例例8-4realid1,id2,id3的分析树和属性计算的分析树和属性计算realT.type=realT.type=realid1L.in=real,id2L.in=real,i
18、d3L.in=realD Daddtypeaddtypeaddtype20仅包括综合属性仅包括综合属性对于所有对于所有12n,的属性计算仅用的属性计算仅用1n的属性的属性如:算术表达式求值的属性文法如:算术表达式求值的属性文法-属性定义属性定义 21-属性定义属性定义 其属性可用深度优先的顺序从左至右计算其属性可用深度优先的顺序从左至右计算对于所有对于所有 1 1 2 2 n ni i 属性计算仅使用属性计算仅使用 1 1 2 2 i-i-1 1 的属性的属性如:说明语句的属性文法如:说明语句的属性文法22identidentREADREADENDEND;语句语句语句语句表达式表达式表达式表达
19、式:=:=BEGINBEGIN语句语句语句语句语句语句语句语句)(identident,复习:语法描述图复习:语法描述图23项项表达式表达式+-项项+-项项 因子因子 因子因子 */语法图语法图24DTLLL1,id例例8-5建立说明语句的翻译方案建立说明语句的翻译方案25语法制导定义:语法制导定义:DTLL.in:=T.typeTintT.type:=integerTrealT.type:=realLL1,idL1.in:=L.inaddtype(id.entry,L.in)Lidaddtype(id.entry,L.in)entry单词单词id的属性,在符号表的位置的属性,在符号表的位置a
20、ddtype在符号表中为变量添加类型信息在符号表中为变量添加类型信息26翻译方案的设计翻译方案的设计将语义动作中的计算向前移,使继承属性的将语义动作中的计算向前移,使继承属性的计算出现在其文法符号之前计算出现在其文法符号之前DTL.in:=T.typeLTintT.type:=integerTrealT.type:=realLL1.in:=L.inL1,idaddtype(id.entry,L.in)Lidaddtype(id.entry,L.in)278.2 8.2 中间语言中间语言用于编译程序用于编译程序源程序经过语义分析被译成中间代码源程序经过语义分析被译成中间代码序列序列(中间语言的语
21、句)(中间语言的语句)用中间语言过渡的好处用中间语言过渡的好处:便于编译系统的实现、移植、代码优便于编译系统的实现、移植、代码优化化28编译中的语义分析编译中的语义分析描述方法描述方法利用属性文法描述如何将各种语句和表利用属性文法描述如何将各种语句和表达式翻译成中间代码达式翻译成中间代码工作方式工作方式分析与综合并行进行分析与综合并行进行每识别出一个语言结构时,每识别出一个语言结构时,完成相应的语义检查与中间代码生成完成相应的语义检查与中间代码生成29常用的中间语言常用的中间语言三地址代码(四元式)三地址代码(四元式)语法结构树(三元式)语法结构树(三元式)后缀式后缀式特点特点形式简单、语义明
22、确、便于翻译形式简单、语义明确、便于翻译独立于目标语言独立于目标语言30后缀式(逆波兰表示)后缀式(逆波兰表示)操作数操作数1,操作数,操作数2,运算符,运算符例例8-8a:=b*(-c)+b*(-34)的后缀的后缀式:式:abc-*b34-*+:=31三元式三元式操作符操作符op,运算对象运算对象1arg1,运算对象运算对象2arg2例例:赋值语句:赋值语句a:=b*(-c)+b*(-34)的三元式:的三元式::=a+*b-c*b-3432例例 8-6 a:=b*(-c)+b*(-34)的语法结构树的语法结构树:=*-0+*-0id bnum34id bid cid aroot33语法结构树
23、的语法结构树的三元式表示三元式表示地址地址 算符算符 操作数操作数 操作数操作数 0 1 2 3 4 5 6 7 8 91034语法结构树语法结构树例例8-7表达式表达式(A-12)*B+6的语法结构树的语法结构树35将赋值语句变换为语法结构树将赋值语句变换为语法结构树设置属性:设置属性:E.p是语法结构树指针是语法结构树指针id.entry是名字的表项入口是名字的表项入口num.val是数值是数值树构造函数树构造函数mknode建中间结点建中间结点mkleaf建叶结点建叶结点36属性文法属性文法37生成后缀式的属性文法生成后缀式的属性文法38三地址代码三地址代码 一般形式一般形式 x :=y
24、 op z其中其中 x,y,z 为变量名、常数或编译产生为变量名、常数或编译产生的临时变量的临时变量四元式(四元式(op,x,y,z)种类:种类:x :=y op z 双目运算双目运算 x :=op y 单目运算单目运算 x :=y 赋值赋值 if x relop y goto L 条件转移条件转移39其他三地址代码其他三地址代码 gotogoto l l 无条件转移无条件转移 paramparam x x 实在参数实在参数 call p,n(ncall p,n(n是参数个数是参数个数)过程调用过程调用 return x return x 过程返回过程返回 x:=yix:=yi 数组运算数组运
25、算 xi:=yxi:=y x:=&y x:=&y 指针运算指针运算 x:=*yx:=*y *x:=y *x:=y 40例:赋值语句例:赋值语句a:=b*(-c)+b*(-34)的三地址代码的三地址代码(四元式四元式):(1)t1:=-c;(2)t2:=b*t1;(3)t3:=-34;(4)t4:=b*t3;(5)t5:=t2+t4;(6)a:=t5;418.38.3 赋值语句的翻译赋值语句的翻译翻译的需求翻译的需求充分了解各种语言现象的语义充分了解各种语言现象的语义包括:控制结构、数据结构、单词包括:控制结构、数据结构、单词充分了解它们的实现方法充分了解它们的实现方法目标语言的语义目标语言的语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中间 代码 生成

限制150内