语法制导翻译技术和中间代码生成幻灯片.ppt
《语法制导翻译技术和中间代码生成幻灯片.ppt》由会员分享,可在线阅读,更多相关《语法制导翻译技术和中间代码生成幻灯片.ppt(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、语法制导翻译技术和中间代码生成第1页,共83页,编辑于2022年,星期二第第5 5章章语法制导翻译技术和中间代码生成语法制导翻译技术和中间代码生成1.1.要求明确语义分析的要求明确语义分析的任务任务2.2.明确明确属性文法属性文法和和语法制导翻译语法制导翻译的含义的含义3.3.明确明确自底向上和自顶向下自底向上和自顶向下语法制导翻译的区语法制导翻译的区别和特点别和特点4.明确明确生成中间代码的目的,中间代码的几种生成中间代码的目的,中间代码的几种形式形式教学目标教学目标第2页,共83页,编辑于2022年,星期二属性文法属性文法语法制导翻译法的基本思想语法制导翻译法的基本思想常见的中间代码常见的
2、中间代码各种不同语法结构的语法制导翻译技术各种不同语法结构的语法制导翻译技术教学内容教学内容第3页,共83页,编辑于2022年,星期二词法分析,语法分析词法分析,语法分析:解决单词和语言成分的识别及词:解决单词和语言成分的识别及词法和语法结构的检查。语法结构可形式化地用一组产生式法和语法结构的检查。语法结构可形式化地用一组产生式来描述。给定一组产生式,我们能够很容易地将其分析器来描述。给定一组产生式,我们能够很容易地将其分析器构造出来。构造出来。本章要介绍的是本章要介绍的是语义分析和中间代码生成技术语义分析和中间代码生成技术。程序语言中间代码目标代码程序语言中间代码目标代码翻译翻译翻译翻译第4
3、页,共83页,编辑于2022年,星期二根据语义规则对识别出的各种语法成分析其含义,进行根据语义规则对识别出的各种语法成分析其含义,进行初步翻译,生成相应的中间代码或直接生成目标代码。初步翻译,生成相应的中间代码或直接生成目标代码。第一,审查每个语法结构的静态语义,即检查语法结构合法的程序第一,审查每个语法结构的静态语义,即检查语法结构合法的程序是否真正有意义。也称静态语义检查。是否真正有意义。也称静态语义检查。(类型检查、控制流的检查、(类型检查、控制流的检查、一致性检查、相关名字的检查)一致性检查、相关名字的检查)第二,如果静态语义正确,语义处理则要执行真正的翻译,要第二,如果静态语义正确,
4、语义处理则要执行真正的翻译,要么生成中间代码,要么生成实际的目标代码。(么生成中间代码,要么生成实际的目标代码。(说明性语句:说明性语句:填符号表;可执行性语句:生成中间代码)填符号表;可执行性语句:生成中间代码)语义分析的任务语义分析的任务第5页,共83页,编辑于2022年,星期二类型检查类型检查。控制流检查控制流检查,确保控制语句有合法的转向点。例如,确保控制语句有合法的转向点。例如,C语言中的语言中的break语句使控制跳离包括该语句的最小的语句使控制跳离包括该语句的最小的switch,while或或for语句。如果不存在包括它的这样的语语句。如果不存在包括它的这样的语句,则应报错。句,
5、则应报错。静态语义检查静态语义检查第6页,共83页,编辑于2022年,星期二静态语义检查静态语义检查一致性检查一致性检查。很多情况下要求对象只能被定义一次。很多情况下要求对象只能被定义一次。例如,语言中规定一个标识符在同一作用域中只能被例如,语言中规定一个标识符在同一作用域中只能被说明一次,同一说明一次,同一case语句的标号不能相同,枚举类型的语句的标号不能相同,枚举类型的元素不能重复出现等。元素不能重复出现等。相关名字检查相关名字检查。有的语言中有时规定,同一名字必须。有的语言中有时规定,同一名字必须出现两次或多次。例如,出现两次或多次。例如,Ada语言中,循环或程序块可以语言中,循环或程
6、序块可以有一个名字,它出现在这些结构的开头和结尾,如同语句有一个名字,它出现在这些结构的开头和结尾,如同语句括号一般,编译程序必须检查它们的配对情况。括号一般,编译程序必须检查它们的配对情况。第7页,共83页,编辑于2022年,星期二附加了一组附加了一组属性属性和和运算(语义)规则运算(语义)规则的的文法文法 5.2 属性文法属性文法文法符号文法符号X的属性的属性t常用常用X.t来表示来表示 语义规则是根据产生式所语义规则是根据产生式所蕴涵的语义蕴涵的语义操作建立起来的,并与操作建立起来的,并与语义分析的目标语义分析的目标有关有关不同的不同的产生式产生式对应不同的语义规则对应不同的语义规则不同
7、的不同的分析目标分析目标也对应不同的语义规则也对应不同的语义规则 1.属性的表示属性的表示2.语义规则语义规则的表示的表示语义信息语义信息语义之间的关系语义之间的关系静态语义检查、符号表操作、静态语义检查、符号表操作、代码生成及打印各种错误信代码生成及打印各种错误信息息 第8页,共83页,编辑于2022年,星期二属性文法属性文法属性文法的形式定义:AG:AG=(G,V,E)G:上下文无关文法;V:属性的有穷集合;每一个属性与某一个文法符号相关联;用文法符号属性表示E:表示属性的断言或谓词的有穷集合(语义规则);每一个断言与文法的某个产生式相关联)属性:综合属性(自下而上传递信息)、继承属性(自
8、上而下传递信息)第9页,共83页,编辑于2022年,星期二 非终结符非终结符E E、T T及及F F都有一个综合属性都有一个综合属性val,val,符号符号i i有一有一个综合属性。个综合属性。某些非终结符加下标是为了区分一个产生式中同一非某些非终结符加下标是为了区分一个产生式中同一非终结符多次出现终结符多次出现语语 义义 规规 则则E E1+TE T T T1*FT FF (E)F i E.val=E1.val+T.valE.val=T.val T.val=T1.val F.valT.val=F.valF.val=E.val F.val=i.lexval产生式产生式例例5.15.1第10页,
9、共83页,编辑于2022年,星期二语法制导翻译的过程语法制导翻译的过程语法制导翻译:语法制导翻译:将将语义规则语义规则与与语法规则语法规则相结合,在相结合,在语法语法分析分析的过程中通过执行的过程中通过执行语义动作语义动作,计算语义属性值,从而,计算语义属性值,从而完成预定的翻译工作。完成预定的翻译工作。第11页,共83页,编辑于2022年,星期二自底向上语法自底向上语法制导翻译制导翻译自顶向下语法自顶向下语法制导翻译制导翻译语法制导翻译的实现语法制导翻译的实现第12页,共83页,编辑于2022年,星期二语法制导翻译分为两种语法制导翻译分为两种处理方法处理方法:(1)语法制导定义(自底向上):
10、)语法制导定义(自底向上):对每个产生式编制一个语义子程序,在进行语法分析的过程中,对每个产生式编制一个语义子程序,在进行语法分析的过程中,当一个产生式获得匹配时当一个产生式获得匹配时,就调用相应的语义子程序实现语义检查,就调用相应的语义子程序实现语义检查与翻译。这种实现方案隐藏了其中语义规则的计算次序等实现细节,与翻译。这种实现方案隐藏了其中语义规则的计算次序等实现细节,不必规定翻译顺序。不必规定翻译顺序。(2)翻译方案(自顶向下):)翻译方案(自顶向下):在产生式右部的适当位置,插入相应的语义动作,按照分析在产生式右部的适当位置,插入相应的语义动作,按照分析的进程,执行遇到的语义动作。这是
11、一种的进程,执行遇到的语义动作。这是一种动作与分析交错动作与分析交错的实的实现方案。现方案。第13页,共83页,编辑于2022年,星期二输入符号串输入符号串 分析树分析树执行执行语义规则语义规则 翻译结果翻译结果翻译步骤翻译步骤()从分析树得到描述结点属性间依赖关系的()从分析树得到描述结点属性间依赖关系的依赖图依赖图,由依赖图得,由依赖图得到语义规则的到语义规则的计算次序计算次序(1)分析输入符号串,建立)分析输入符号串,建立分析语法树分析语法树()进行语义规则的计算,得到翻译结果()进行语义规则的计算,得到翻译结果 第14页,共83页,编辑于2022年,星期二语法制导定义语法制导定义对每个
12、产生式编制一个对每个产生式编制一个语义子程序语义子程序在进行语法分析的过程中,在进行语法分析的过程中,当一个产生式获得匹配时当一个产生式获得匹配时,就调用相应,就调用相应的语义子程序实现语义检查与翻译的语义子程序实现语义检查与翻译综合属性综合属性继承属性继承属性自底向上自底向上传传递信息递信息自顶向下(自左向自顶向下(自左向右)右)传递信息传递信息第15页,共83页,编辑于2022年,星期二 print(E.val)print(E.val)打印由打印由E E产生的算术表达式的值,产生的算术表达式的值,可认为这条规则定义了可认为这条规则定义了L L的一个的一个虚属性虚属性。L EE E1+TE
13、T T T1*FT FF (E)F iprint(E.val)E.val=E1.val+T.valE.val=T.val T.val=T1.val F.val T.val=F.valF.val=E.valF.val=i.lexval例例5.5.综合属性综合属性语语 义义 规规 则则产生式产生式第16页,共83页,编辑于2022年,星期二一个结点的综合属性值是一个结点的综合属性值是其其子结点子结点的某些属性来的某些属性来决定的决定的+3*4+3*4的注释分析树的注释分析树通常使用通常使用自底向上自底向上的分析方法的分析方法在在每个结点每个结点处使用语义规则来计处使用语义规则来计算综合属性值算综合
14、属性值当一个当一个产生式获得匹配产生式获得匹配时,就时,就调用相应的语义子程序调用相应的语义子程序从从叶结点到根结点叶结点到根结点进行计算进行计算 只含有只含有综合属性综合属性的语法制导定的语法制导定义称为义称为S S属性定义属性定义第17页,共83页,编辑于2022年,星期二S属性定义与自底向上翻译属性定义与自底向上翻译 LRLR分分析析器器可可以以改改造造为为一一个个翻翻译译器器,在在对对输输入入串串进进行语法分析的同时对属性进行计算行语法分析的同时对属性进行计算LRLR分析器增加分析器增加属性值(语义)栈属性值(语义)栈 首先,为文法的每条规则设计相应的语义子程序;首先,为文法的每条规则
15、设计相应的语义子程序;增加一个语义信息栈;增加一个语义信息栈;在语法分析的同时做语义处理:即在用某一个产生式在语法分析的同时做语义处理:即在用某一个产生式进行规约的同时,调用相应的语义子程序完成所用规进行规约的同时,调用相应的语义子程序完成所用规则的语义动作,并将每次动作后的值保存在语义栈中则的语义动作,并将每次动作后的值保存在语义栈中翻译步骤翻译步骤第18页,共83页,编辑于2022年,星期二计算表达式2+3*5第19页,共83页,编辑于2022年,星期二状状态态ACTIONGOTOi+*()$ETF0S5S41231S6acc2r2S7r2r23r4r4r4r44S5S48235r6r6r
16、6r66S5S4937S5S4108S6S119r1S7r1r110r3r3r3r311r5r5r5r5GE:1 EE+T2 ET3 TT*F4 TF5 F(E)6 Fii+i*i第20页,共83页,编辑于2022年,星期二表达式2+3*5的归约过程步骤状态栈 语义栈符号栈输入串动作00_$2+3*5$S5105_ _$2 +3*5$r6203_ 2$F +3*5$r4302_ 2$T +3*5$r2401_ 2$E +3*5$S65016_ 2 _$E+3*5$S560165_ 2 _ _$E+3 *5$r6第21页,共83页,编辑于2022年,星期二步骤状态栈 语义栈符号栈输入串动作701
17、63_ 2 _ 3$E+F*5$r480169_ 2 _ 3$E+T*5$S7901697_ 2 _ 3 _$E+T*5$S510 016975 _ 2 _ 3 _ _$E+T*5$r61101697(10)_ 2 _ 3 _ 5$E+T*F$r312 0169_ 2 _ 15$E+T$r113 01_ 17$E$acc第22页,共83页,编辑于2022年,星期二注意注意句柄归约在先,语义动作调用在后归约时,栈内句柄各符号的语义信息与句柄及同时出栈,整个句柄所表示的语义信息则赋给相应产生式左部非终结符号的语义变量,并让该非终结符号及语义信息同时入栈第23页,共83页,编辑于2022年,星期二生
18、成中间代码的生成中间代码的目的目的(1)便于优化便于优化(2)便于移植便于移植(3)逻辑结构清晰逻辑结构清晰常见的中间代码常见的中间代码形式形式:后缀式后缀式三地址代码三地址代码(四元式、三元式和间接三元式(四元式、三元式和间接三元式)图形图形(抽象语法树、有向无环图)(抽象语法树、有向无环图)中间代码:一种介于中间代码:一种介于源语言和目标语言之间源语言和目标语言之间的中间语言形式的中间语言形式5.5.中间代码中间代码第24页,共83页,编辑于2022年,星期二中缀表示中缀表示后缀表示后缀表示a+b ab+a+b*c abc*+(a+b)*c ab+c*a:=b*c+b*d abc*bd*+
19、:=特点特点1、运算对象出现的顺序和原有顺序(从左到右)相同、运算对象出现的顺序和原有顺序(从左到右)相同2、运算符按实际计算顺序(从左到右)出现、运算符按实际计算顺序(从左到右)出现3、运算符紧跟在运算对象的后面出现,且没有括号、运算符紧跟在运算对象的后面出现,且没有括号优点:简明、便于计值优点:简明、便于计值 后缀式后缀式第25页,共83页,编辑于2022年,星期二分别给出下列表达式的后缀表示分别给出下列表达式的后缀表示1.-a+b*(-c+d)2.X:=-(a+b)/(c-d)-(a+b*c)3.a=c b=d4.ab+c ada+bea-bc-d+*+Xab+-cd-/abc*+-:=
20、ac=bd=abc+ad ab+e 第26页,共83页,编辑于2022年,星期二逆波兰表示法(后缀式)逆波兰表示法(后缀式)特点:运算符直接写在其运算对象之后。不再有括号运算对象出现的次序未变求值过程简单,宜于用栈实现后缀式的计算用一个栈实现。一般的计算过程是:自左至右扫描后缀式,每碰到运算量就把它推进栈。每碰到k目运算符就把它作用于栈顶的k个项,并用运算结果代替这k个项。第27页,共83页,编辑于2022年,星期二三地址代码三地址代码种类种类(1)x=y op z形式的赋值语句,其中形式的赋值语句,其中op是二元运算符。是二元运算符。(2)x=op y形式的赋值语句,其中形式的赋值语句,其中
21、op是一元运算符。是一元运算符。(3)x=y形式的赋值语句。形式的赋值语句。(4)无无条条件件转转移移语语句句goto L,表表示示下下一一个个要要执执行行的的语语句句是是标标号为号为L的语句。的语句。(5)条条件件转转移移语语句句if x rop y goto L中中,rop为为关关系系运运算算符符,如如果果x和和y满满足足关关系系rop,就就转转而而执执行行标标号号为为L的的语语句句,否否则则顺顺序序执执行行下下一个语句。一个语句。第28页,共83页,编辑于2022年,星期二(6)过过程程调调用用语语句句param x 和和call p,n。源源程程序序中中的的过过程程调调用用语语句句p(
22、x1,x2,xn)可以产生如下的三地址代码:可以产生如下的三地址代码:param x1param x2 param xncall p,n其中其中n为实参个数。过程返回语句形如为实参个数。过程返回语句形如return y,其中,其中y为过程返为过程返回的一个值。回的一个值。第29页,共83页,编辑于2022年,星期二(7)变址赋值:)变址赋值:x=yi,把从,把从y开始的第开始的第i个存储单元的值赋给个存储单元的值赋给x。xi=y,把,把y的值赋给的值赋给x开始的第开始的第i个存储单元。个存储单元。其中,其中,x,y和和i都代表数据对象。都代表数据对象。(8)地址和指针赋值:)地址和指针赋值:x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语法 制导 翻译 技术 中间 代码 生成 幻灯片
限制150内