【教学课件】第六章语法制导翻译与属性文法.ppt
《【教学课件】第六章语法制导翻译与属性文法.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第六章语法制导翻译与属性文法.ppt(98页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章第六章 语法制导翻译与语法制导翻译与属性文法属性文法School of Computer Science&Technology Harbin Institute of Technology重点:重点:语法制导翻译的基本思想,语法制导定义,语法制导翻译的基本思想,语法制导定义,翻译模式,自顶向下翻译,自底向上翻译。翻译模式,自顶向下翻译,自底向上翻译。难点:难点:属性的意义,对综合属性,继承属性,属性的意义,对综合属性,继承属性,固有属性的理解,属性计算,固有属性的理解,属性计算,怎么通过属性来表达翻译。怎么通过属性来表达翻译。2023/1/102第第6章章语法制导翻译与属性文法语法制导翻
2、译与属性文法 6.1语法制导翻译概述语法制导翻译概述6.2语法制导定义语法制导定义6.3属性计算属性计算6.4翻译模式翻译模式6.5本章小结本章小结2023/1/103n为什么进行词法和语法分析?为什么进行词法和语法分析?n用用A进行归约表达的是什么意思?进行归约表达的是什么意思?n看:看:operand+termnEE1+TnE1的值的值+T的值的结果作为的值的结果作为E的值的值即:取来即:取来E1的值和的值和T的值做加法运算,结果作为的值做加法运算,结果作为E的值的值E.val=E1.val+T.val问题2023/1/1046.1语法制导翻译概述语法制导翻译概述n为了提高编译程序的可移植
3、性,一般将编译程为了提高编译程序的可移植性,一般将编译程序划分为前端和后端。序划分为前端和后端。n前端通常包括词法分析、语法分析、语义分析、中前端通常包括词法分析、语法分析、语义分析、中间代码生成、符号表的建立,以及与机器无关的中间代码生成、符号表的建立,以及与机器无关的中间代码优化等,它们的实现一般不依赖于具体的目间代码优化等,它们的实现一般不依赖于具体的目标机器。标机器。n后端通常包括与机器有关的代码优化、目标代码的后端通常包括与机器有关的代码优化、目标代码的生成、相关的错误处理以及符号表的访问等。生成、相关的错误处理以及符号表的访问等。图图6.1编译器前端的逻辑结构编译器前端的逻辑结构2
4、023/1/1056.1语法制导翻译概述语法制导翻译概述n语义分析器的主要任务是检查各个语法结构的语义分析器的主要任务是检查各个语法结构的静态语义静态语义 ,称为静态语义分析或静态检查,称为静态语义分析或静态检查 n类型检查:操作数和操作符的类型是否相容;类型检查:操作数和操作符的类型是否相容;n控制流检查:控制流转向的目标地址是否合法;控制流检查:控制流转向的目标地址是否合法;n惟一性检查:对象是否被重复定义;惟一性检查:对象是否被重复定义;n关联名检查:同一名字的多次特定出现是否一致。关联名检查:同一名字的多次特定出现是否一致。n将静态检查和中间代码生成结合到语法分析中将静态检查和中间代码
5、生成结合到语法分析中进行的技术称为进行的技术称为语法制导翻译语法制导翻译 。2023/1/1066.1语法制导翻译概述语法制导翻译概述n语法制导翻译的基本思想语法制导翻译的基本思想n在进行语法分析的同时,完成相应的语义处理。也在进行语法分析的同时,完成相应的语义处理。也就是说,一旦语法分析器识别出一个语法结构就要就是说,一旦语法分析器识别出一个语法结构就要立即对其进行翻译,翻译是根据语言的语义进行的,立即对其进行翻译,翻译是根据语言的语义进行的,并通过调用事先为该语法结构编写的语义子程序来并通过调用事先为该语法结构编写的语义子程序来实现。实现。n对文法中的每个产生式附加一个对文法中的每个产生式
6、附加一个/多个语义动作多个语义动作(或或语义子程序语义子程序),在语法分析的过程中,每当需要使用,在语法分析的过程中,每当需要使用一个产生式进行推导或归约时,语法分析程序除执一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作外,还要执行相应的语义动行相应的语法分析动作外,还要执行相应的语义动作作(或调用相应的语义子程序或调用相应的语义子程序)。2023/1/1076.1语法制导翻译概述语法制导翻译概述n语义子程序的功能语义子程序的功能n指明相应产生式中各个文法符号的具体含义,并指明相应产生式中各个文法符号的具体含义,并规定了使用该产生式进行分析时所应采取的语义规定了使用该产生式进
7、行分析时所应采取的语义动作动作(如传送或处理语义信息、查填符号表、计算如传送或处理语义信息、查填符号表、计算值、生成中间代码等值、生成中间代码等)。n语义信息的获取和加工是和语法分析同时进行的,语义信息的获取和加工是和语法分析同时进行的,而且这些语义信息是通过文法符号来携带和传递而且这些语义信息是通过文法符号来携带和传递的。的。2023/1/1086.1语法制导翻译概述语法制导翻译概述n一个文法符号一个文法符号X所携带的语义信息称为所携带的语义信息称为X的语的语义属性,简称为属性,它是根据翻译的需要设义属性,简称为属性,它是根据翻译的需要设置的置的(对应分析树结点的数据结构对应分析树结点的数据
8、结构),主要用于,主要用于描述语法结构的语义。描述语法结构的语义。n一个变量的属性有类型、层次、存储地址等一个变量的属性有类型、层次、存储地址等n表达式的属性有类型、值等。表达式的属性有类型、值等。2023/1/1096.1语法制导翻译概述语法制导翻译概述n属性值的计算和产生式相关联,随着语法属性值的计算和产生式相关联,随着语法分析的进行,执行属性值的计算,完成语分析的进行,执行属性值的计算,完成语义分析和翻译的任务。义分析和翻译的任务。nEE1+E2E.val:=E1.val+E2.valn语法结构具有规定的语义语法结构具有规定的语义n问题:如何根据被识别出的语法成分进行问题:如何根据被识别
9、出的语法成分进行语义处理?语义处理?n亦即怎样亦即怎样将属性值的计算及翻译工作同产生式将属性值的计算及翻译工作同产生式相关联?相关联?2023/1/1010典型处理方法一典型处理方法一n语法制导定义语法制导定义n通过将属性与文法符号关联、将语义规则与产生通过将属性与文法符号关联、将语义规则与产生式关联来描述语言结构的翻译方案式关联来描述语言结构的翻译方案n对应每一个产生式编写一个语义子程序,当一个对应每一个产生式编写一个语义子程序,当一个产生式获得匹配时,就调用相应的语义子程序来产生式获得匹配时,就调用相应的语义子程序来实现语义检查与翻译实现语义检查与翻译nEE1+TE.val:=E1.val
10、+T.valnTT1*FT.val:=T1.val*F.valnF digitF.val:=digit.lexvaln适宜在完成归约的时候进行适宜在完成归约的时候进行2023/1/1011典型处理方法二典型处理方法二n翻译模式翻译模式n通过将属性与文法符号关联,并将语义规则插入到产生式通过将属性与文法符号关联,并将语义规则插入到产生式的右部来描述语言结构的翻译方案的右部来描述语言结构的翻译方案n在产生式的右部的适当位置,插入相应的语义动在产生式的右部的适当位置,插入相应的语义动作,按照分析的进程,执行遇到的语义动作作,按照分析的进程,执行遇到的语义动作nDTL.inh:=T.typeLnTin
11、tT.type:=integernTrealT.type:=realnLL1.inh:=L.inhL1,idaddtype(id.entry,L.inh)nLidaddtype(id.entry,L.inh)n适宜在进行推导时完成适宜在进行推导时完成2023/1/10126.2语法制导定义语法制导定义n语法制导定义是附带有属性和语义规则的上下语法制导定义是附带有属性和语义规则的上下文无关文法文无关文法n属性是与文法符号相关联的语义信息属性是与文法符号相关联的语义信息n语义规则是与产生式相关联的语义动作语义规则是与产生式相关联的语义动作n语法制导定义是基于语言结构的语义要求设计语法制导定义是基于
12、语言结构的语义要求设计的,类似于程序设计,语法制导定义中的属的,类似于程序设计,语法制导定义中的属性类似于程序中用到的数据结构,用于描述性类似于程序中用到的数据结构,用于描述语义信息,语义规则类似于计算,用于收集、语义信息,语义规则类似于计算,用于收集、传递和计算语义信息的。传递和计算语义信息的。n属性通常被保存在分析树的相关节点中属性通常被保存在分析树的相关节点中2023/1/1013概念术语概念术语n综合属性:节点的属性值是通过分析树中该节综合属性:节点的属性值是通过分析树中该节点或其子节点的属性值计算出来的点或其子节点的属性值计算出来的n继承属性:节点的属性值是由该节点、该节点继承属性:
13、节点的属性值是由该节点、该节点的兄弟节点或父节点的属性值计算出来的的兄弟节点或父节点的属性值计算出来的n固有属性:通过词法分析直接得到的属性固有属性:通过词法分析直接得到的属性n依赖图:描述属性之间依赖关系的图,根据语依赖图:描述属性之间依赖关系的图,根据语义规则来构造义规则来构造n注释分析树:节点带有属性值的分析树注释分析树:节点带有属性值的分析树2023/1/1014语法制导定义的形式语法制导定义的形式n在一个在一个语法制导定义语法制导定义中,中,A P都有与之相关联的都有与之相关联的一套语义规则,规则形式为一套语义规则,规则形式为b:=f(c1,c2,ck),),f是一个函数,而且或者是
14、一个函数,而且或者1b是是A的一个综合属性并且的一个综合属性并且c1,c2,ck是是 中的中的符号的属性,或者符号的属性,或者2b是是 中中某个某个符号的一个继承属性并且符号的一个继承属性并且c1,c2,ck是是A或或 中的中的任何文法符号的属性。任何文法符号的属性。这两种情况下,都说属性这两种情况下,都说属性b依赖于属性依赖于属性c1,c2,ck2023/1/1015例例6.1 台式计算器的语法制导定义台式计算器的语法制导定义产生式 语义规则LEn print(Eval)(可看作是L的虚属性)E E1+T Eval:=E1val+TvalE T Eval:=TvalT T1*F Tval:=
15、T1val+FvalT F Tval:=FvalF(E)Fval:=EvalF digit Fval:=digitlexval2023/1/1016S-属性属性定义定义n只含综合属性的语法制导定义称为只含综合属性的语法制导定义称为S-属性定义属性定义n对于对于S-属性定义,通常使用自底向上的分析方属性定义,通常使用自底向上的分析方法,在建立每一个结点处使用语义规则来计法,在建立每一个结点处使用语义规则来计算综合属性值,即在用哪个产生式进行归约算综合属性值,即在用哪个产生式进行归约后,就执行那个产生式的后,就执行那个产生式的S-属性定义计算属性属性定义计算属性的值,从叶结点到根结点进行计算。的值
16、,从叶结点到根结点进行计算。n没有副作用的语法制导定义有时又称为没有副作用的语法制导定义有时又称为属性文属性文法法,属性文法的语义规则单纯根据常数和其,属性文法的语义规则单纯根据常数和其它属性的值来定义某个属性的值它属性的值来定义某个属性的值2023/1/1017继承属性继承属性n当分析树的结构同源代码的抽象语法不当分析树的结构同源代码的抽象语法不“匹配匹配”时,继承属性将非常有用。下面的例子可时,继承属性将非常有用。下面的例子可以说明怎样用继承属性来解决这种不匹配问以说明怎样用继承属性来解决这种不匹配问题,产生这种不匹配的原因是因为文法通常题,产生这种不匹配的原因是因为文法通常是为语法分析而
17、不是为翻译设计的。是为语法分析而不是为翻译设计的。n例例6.2n考虑如何在自顶向下的分析过程中计算考虑如何在自顶向下的分析过程中计算3*5和和4*8*9这样的表达式项这样的表达式项n消除左递归之后的算数表达式文法的一个子集:消除左递归之后的算数表达式文法的一个子集:TFTT*FT1T Fdigit2023/1/1018表表6.3 为适于自顶向下分析的文法设为适于自顶向下分析的文法设计的语法制导定义计的语法制导定义 产生式产生式语义规则语义规则TFTT.inh:=F.valT.val:=T.syn T*FT1T1.inh:=T.inhF.valT.syn:=T1.synT T.syn:=T.in
18、hFdigitF.val:=digit.lexval2023/1/10194*8*9的注释分析树的注释分析树2023/1/1020表表6.3中语法制导定义对应的翻译模式中语法制导定义对应的翻译模式n如果对如果对4*8*9进行自顶向下的语法制导翻译,进行自顶向下的语法制导翻译,则则val的值的计算顺序为的值的计算顺序为n根据上述对根据上述对val值的计算顺序值的计算顺序,可以将表可以将表6.3中中的语法制导定义转换成如下的翻译模式的语法制导定义转换成如下的翻译模式nTFT.inh:=F.valTT.val:=T.synnT*FT1.inh:=T.inhF.valT1T.syn:=T1.synnT
19、 T.syn:=T.inhnFdigitF.val:=digit.lexval2023/1/10216.3属性计算属性计算n语义规则定义了属性之间的依赖关系,这种依语义规则定义了属性之间的依赖关系,这种依赖关系将影响属性的计算顺序赖关系将影响属性的计算顺序n为了确定分析树中各个属性的计算顺序,我们为了确定分析树中各个属性的计算顺序,我们可以用图来表示属性之间的依赖关系,并将可以用图来表示属性之间的依赖关系,并将其称为依赖图其称为依赖图n如果依赖图中没有回路,则利用它可以很方便如果依赖图中没有回路,则利用它可以很方便地求出属性的计算顺序。地求出属性的计算顺序。n注释分析树只是给出了属性的值,而依
20、赖图则注释分析树只是给出了属性的值,而依赖图则可以帮助我们确定如何将这些属性值计算出可以帮助我们确定如何将这些属性值计算出来。来。2023/1/10226.3.1依赖图依赖图n所谓依赖图其实就是一个有向图,用于描述分所谓依赖图其实就是一个有向图,用于描述分析树中节点的属性和属性间的相互依赖关系,析树中节点的属性和属性间的相互依赖关系,称为分析树的依赖图。称为分析树的依赖图。n每个属性对应依赖图中的一个节点,如果属性每个属性对应依赖图中的一个节点,如果属性b依赖于属性依赖于属性c,则从属性,则从属性c的节点有一条有向的节点有一条有向边指向属性边指向属性b的节点。的节点。n属性间的依赖关系是根据相
21、应的语义规则确定属性间的依赖关系是根据相应的语义规则确定的。的。2023/1/1023依赖图的构造方法依赖图的构造方法for分析树的每个节点分析树的每个节点ndofor与节点与节点n对应的文法符号的每个属性对应的文法符号的每个属性ado在依赖图中为在依赖图中为a构造一个节点;构造一个节点;for分析树的每个节点分析树的每个节点ndofor节点节点n所用产生式对应的每条语义规则所用产生式对应的每条语义规则b:=f(c1,c2,ck)dofori:=1tokdo构造一条从节点构造一条从节点ci到节点到节点b的有向边;的有向边;2023/1/1024例例6.3图图6.3中注释分析树的依赖图中注释分析
22、树的依赖图2023/1/10256.3.2属性的计算顺序属性的计算顺序n拓扑排序拓扑排序n一个无环有向图的拓扑排序是图中结点的任何顺一个无环有向图的拓扑排序是图中结点的任何顺序序m1,m2,mk,使得边必须是从序列中前面,使得边必须是从序列中前面的结点指向后面的结点,也就是说,如果的结点指向后面的结点,也就是说,如果mimj是是mi到到mj的一条边的一条边,那么在那么在序列中序列中mi必须出现在必须出现在mj的前面。的前面。n若依赖图中无环,则存在一个拓扑排序,它就是若依赖图中无环,则存在一个拓扑排序,它就是属性值的计算顺序。属性值的计算顺序。n例例6.4图图6.4的拓扑排序为:的拓扑排序为:
23、1,2,3,4,5,6,7,8,9,10,11,12,132023/1/10266.3.2属性的计算顺序属性的计算顺序n根据拓扑排序得到的翻译程序根据拓扑排序得到的翻译程序na4:=4a5:=a4a6:=8na7:=a5a6a8:=9a9:=a7a8na10:=a9a11:=a10a12:=a11na13:=a12n上述属性计算方法又称为上述属性计算方法又称为分析树法分析树法,这种方法在编,这种方法在编译时需要显式地构造分析树和依赖图,所以编译的译时需要显式地构造分析树和依赖图,所以编译的时空效率比较低,而且如果分析树的依赖图中存在时空效率比较低,而且如果分析树的依赖图中存在回路的话,这种方法
24、将会失效。回路的话,这种方法将会失效。n这种方法的优点是可以多次遍历分析树,从而使得这种方法的优点是可以多次遍历分析树,从而使得属性的计算不依赖于所采用的语法分析方法以及属属性的计算不依赖于所采用的语法分析方法以及属性间严格的依赖关系。性间严格的依赖关系。2023/1/1027计算语义规则的其他方法计算语义规则的其他方法n基于规则的方法基于规则的方法n在构造编译器时,用手工或专门的工具来分析语在构造编译器时,用手工或专门的工具来分析语义规则义规则,确定属性值的计算顺序。确定属性值的计算顺序。n忽略语义规则的方法忽略语义规则的方法n在分析过程中翻译,那么计算顺序由分析方法来在分析过程中翻译,那么
25、计算顺序由分析方法来确定而表面上与语义规则无关。这种方法限制了确定而表面上与语义规则无关。这种方法限制了能被实现的语法制导定义的种类。能被实现的语法制导定义的种类。n这两种方法都不必显式构造依赖图,因此时这两种方法都不必显式构造依赖图,因此时空效率更高。空效率更高。2023/1/1028S-属性定义属性定义n定义定义6.1只含综合属性的语法制导定义称为只含综合属性的语法制导定义称为S-属性定属性定义,又称为义,又称为S-属性文法。属性文法。n如果某个语法制导定义是如果某个语法制导定义是S-属性定义,则可以按照属性定义,则可以按照自下而上的顺序来计算分析树中节点的属性。自下而上的顺序来计算分析树
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第六 语法 制导 翻译 属性 文法
限制150内