《编译原理》第5章语法制导翻译.ppt
《《编译原理》第5章语法制导翻译.ppt》由会员分享,可在线阅读,更多相关《《编译原理》第5章语法制导翻译.ppt(98页珍藏版)》请在三一办公上搜索。
1、?为什么进行词法和语法分析?用A进行归约表达的是什么意思看:operand+term EE1+TE1的值+T的值的结果作为E的值即:取来E1的值和T的值做加法运算,结果作为E的值E.val=E1.val+T.val,第五章 语法制导翻译,翻译的任务首先是语义分析和正确性检查,若正确,则翻译成中间代码或目标代码。基本思想根据翻译的需要设置文法符号的属性,以描述语法结构的语义。例如,一个变量的属性有类型,层次,存储地址等。表达式的属性有类型,值等。属性值的计算和产生式相联系。随着语法分析的进行,执行属性值的计算,完成语义分析和翻译的任务。,5.1 语法制导翻译概述,语法制导翻译的概念描述在进行语法
2、分析的同时,完成相应的语义处理EE1+E2E.val:=E1.val+E2.val语法结构具有规定的语义问题:如何根据被识别出的语法成分进行语义处理?,1.语义分析的任务,语义检查例:类型、运算、维数、越界语义处理例:变量的存储分配例:表达式的求值例:语句的翻译(中间代码的生成)总目标:生成等价的中间代码,2.代码结构,计算学科:对信息(数据表示)描述和变换算法的系统研究变换:源、目标以及源与目标的对应关系语句的代码结构语句分类:说明语句符号表的查填可执行语句指令代码,3.典型处理方法,对应每一个产生式编制一个语义子程序,当一个产生式获得匹配时,调用相应的语义子程序实现语义检查与翻译EE1+T
3、E.val:=E1.val+T.valTT1*FT.val:=T1.val*F.valF idF.val:=id.val适宜在完成归约的时候进行,3.典型处理方法,在产生式的右部的适当位置,插入相应的语义动作,按照分析的进程,执行遇到的语义动作D T L.in:=T.type LT int T.type:=integer T real T.type:=real L L1.in:=L.in L1,id语义可以看成是相应文法符号的属性适宜在进行推导时完成,语义翻译的流程,输入符号串,分析树,依赖图,语义规则的计算,实际上,编译中语义翻译的实现并不是按图中的流程处理的;而是随语法分析的进展,识别出一
4、个语法结构,就对它的语义进行分析和翻译。,语法制导定义是对上下文无关文法的推广每个文法符号都有一个相关的属性集。综合属性:通过分析树中其子节点的属性值计算出来;继承属性:由该节点的兄弟节点及父节点的属性值计算出来;依赖图 语义规则建立了属性之间的依赖关系,这些关系可以用图来表示,这样的图称为依赖图。,属性,5.1 语法制导定义(Syntax-directed definitions),在一个语法制导定义中,AP都有与之相关联的一套语义规则,规则形式为 b:=f(c1,c2,ck),f是一个函数,而且或者 1b是A的一个综合属性并且c1,c2,ck是中的符号的属性,或者 2b是中的符号的一个继承
5、属性并且c1,c2,ck是A或中的任何文法符号的属性。在两种情况下,都说属性b依赖于属性c1,c2,ck。,5.1.1 语法制导定义的形式,例5.1 台式计算器程序的语法制导定义(图52),产生式 语义规则,LEn print(Eval)(可看作是L的虚属性)E E1+T E val:=E1 val+T valE T E val:=T valT T1*F T val:=T1 val*F valT F T val:=F valF(E)F val:=E valF digit F val:=digitlexval,S-属性定义仅仅使用综合属性的语法制导定义。结点属性值的计算正好和自底向上分析建立分析
6、树结点同步进行。例 5.2 输入:3*5+4n,5.1.2 综合属性,digitlexval:=3,Fval:=3,Tval:=3,digitlexval:=5,Fval:=5,Tval:=15,*,Eval:=15,+,digitlexval:=4,Fval:=4,Tval:=4,Eval:=19,L,n,综合属性值的计算方法对于s-属性定义,通常使用自底向上的分析方法,在建立每一个结点处使用语义规则来计算综合属性值,即在用哪个产生式进行归约后,就执行那个产生式的s-属性定义计算属性的值,从叶结点到根结点进行计算。5.1.3 继承属性 继承属性值是由此结点的父结点和或兄弟结点的某些属性值来决
7、定的。例5.3 变量说明的属性定义 int a,b,c,表5.2 带有继承属性L.in的语法制导定义,产生式 语义规则 DTL Lin:=T type T int T type:=integer T real T type:=real L L1,id L1 in:=L in addtype(id entry,L in)L id addtype(id entry,L in),T,L,L,id3,L,id2,D,id1,real,1 entry,2 entry,3 entry,4type,in 5,6,in 7,8,in 9,10,依赖图的构造方法for 分析树中的每个结点n do for 与结点
8、n对应的文法符号的每个属性a do 在依赖图中为a构造一个结点;for 分析树的每个结点n do for 结点n所用产生式对应的每条 语义规则 b:f(c1,c2,ck)do for i:=1 to k do 从结点ci到结点b构造一条有向边;,5.1.4 依赖图_获得语义规则的计算顺序,例5-5 图55分析树的依赖图,拓扑排序 一个无环有向图的拓扑排序是图中 结点的任何顺序m1,m2,mk,使得 边必须是从序列中前面的结点指向后面的 结点,也就是说,如果mimj是mi到mj的 一条边,那么在 序列中mi必须出现在mj的 前面。若依赖图中无环,则存在一个拓扑排序,它就是属性值的计算顺序。,5.
9、1.5 计算顺序,1,2,3,4,5,6,7,8,9,10 a4:=real;a5:=a4;addtype(id3entry,a5);a7:=a5;addtype(id2entry,a7);a9:=a7;addtype(id1entry,a9);,例5.6 图5.7的拓扑排序是:,分析树法:输入串分析树依赖图计算次序基于规则的方法:在构造编译器时,用手工或专门的工具来分析语义规则,确定属性值的计算顺序。忽略语义规则的方法:在分析过程中翻译,那么计算顺序由分析方法来确定而表面上与语义规则无关。这种方法限制了能被实现的语法制导定义的种类。后两种方法不必显式构造依赖图,因此时空效率更高。,计算语义规
10、则的方法,抽象语法(abstract syntax)从具体语法中抽象出语言结构的本质性的东西,而不考虑语言的具体符号表示,从而可简化语义的形式描述。在不同的语言中赋值语句有不同的写法:x=y;x:=y;yx 等等,可以用抽象形式 assignment(variable,expression)把前面各种具体形式统一起来。,5.2 语法树(syntax tree)的构造,表示程序层次结构的树,它把分析树中对语义无关紧要的成分去掉,是分析树的抽象形式,也称作语法结构树,或结构树。语法树是常用的一种中间表示形式。把语法分析和翻译分开。语法分析过程中完成翻译有许多优点,但也有一些不足:1.适于语法分析的
11、文法可能不完全反映语言成分的自然层次结构;2.由于语法分析方法的限制,对分析树结点的访问顺序和翻译需要的访问顺序不一致。,语法树,产生式sif B then S1 else S2的语法树 if-then-else|B S1 S2 赋值语句的语法树 assignment variable expression 在语法树中,运算符号和关键字都不在叶结点,而是在内部结点中出现。,5.2.1 语法树,构造表达式的语法树使用的函数 1.mknode(op,left,right)建立一个标记为op的运算符结点,两个域left和right是指向左右运算对象的指针。2mkleaf(id,entry)建立一个标
12、记为id的标识符结点,其域entry是指向该标识符在符号表中相应表项的指针。3.mkleaf(num,val)建立一个标记为num的数结点,域val用于保存该数的值。返回指向新建立结点的指针。,5.2.2 构造表达式的语法树,id,to entry a,num 4,id,to entry c,+,图5-8 a-4+c的语法树,5.2.3 构造语法树的语法制导定义,产生式 语义规则 EE1+T E.nptr:=mknode(+,E1.nptr,T.nptr)E E1-T E.nptr:=mknode(-,E1.nptr,T.nptr)E T E.nptr:=T.nptr T(E)T.nptr:=
13、E.nptr T id T.nptr:=mkleaf(id,id.entry)T num T.nptr:=mkleaf(num,num.val),图5-10 a-4+c的语法树的构造,无环有向图(Directed Acyclic Graph,简称dag)用途:提取表达式中的公共子表达式,以取得目标程序的局部优化。方法:执行mknode和mkleaf时,检查是否已有相同的结点,若有,则返回相应结点的指针。,5.2.4 表达式的无环有向图,例5.9 表达式 aa*(b-c)+(b-c)*d 的dag,+,*,d,+,*,a,c,b,在分析栈中使用一个附加的域来存放综合属性值。下图为一个带有综合属性
14、值域的分析栈:,state,val,.,X,X.x,Y,.,Y.y,.,.,Z,Z.z,top,5.3 S-属性定义及其自底向上的计算,A b:=f(c1,c2,ck)b是A的综合属性,ci(1 ik)是中符号的属性。综合属性的值是在自底向上的分析过程中,每次归约之前进行计算的。AXYZ Aa:=f(X x,Y y,Z z),A a,X x Y y Z z,top,state,val,.,.,X,X.x,Y,Y.y,Z,Z.z,state,val,.,.,A,A.a,top,定义式 A.a:=f(X.x,Y.y,Z.z)(抽象)变成valntop:=f(valtop-2,valtop-1,va
15、ltop)(具体可执行代码)。在执行代码段之前执行:ntop:=top-r+1 r是句柄的长度执行代码段后执行:top:=ntop;,产生式 代码段(和图52对比)LEn printf(valntop)E E+T valntop:=valtop-2+valtopE TT T*F valntop:=valtop-2*valtopT FF(E)valntop:=valtop-1F digit,例5.10 用LR分析器实现台式计算器(图516),表5.5 翻译输入3*5+4n所做的移动,输入 state val 使用的产生式,3*5+4n-,*5+4n 3 3,*5+4n F 3 Fdigit,*5
16、+4n T 3 TF,5+4n T*3-,+4n T*5 3-5,+4n T*F 3-5 F digit,+4n T 15 T T*F,+4n E 15 E T,4n E+15-,n E+4 15-4,n E+F 15-4 F digit,n E+T 15-4 T F,n E 19 E E+T,En 19-,L 19 L En,采用自底向上分析,例如LR分析,首先给出S-属性定义,然后,把S-属性定义变成可执行的代码段,这就构成了翻译程序。象一座建筑,语法分析是构架,归约处有一个“挂钩”,语义分析和翻译的代码段(语义子程序)就挂在这个钩子上。这样,随着语法分析的进行,归约前调用相应的语义子程序
17、,完成翻译的任务。,总结,在语法分析过程中进行语义分析和翻译,属 性的计算顺序受到语法分析建立分析树结点顺序的限制。一种自然的计算属性的顺序是按深度优先访问分析树结点的顺序,它适应多种自底向上和自顶向下的翻译方法。L-属性定义 可用于按深度优先顺序计算属性值。,5.4 L-属性定义,procedure dfvisit(n:node);begin for n 的每个子结点m(从左至右)do begin 计算m的继承属性;dfvisit(m)end;计算n的综合属性 end;,深度优先顺序计算属性,定义 一个语法制导定义是L-属性定义,如果AX1X2XnP,其每一个语义规则中的每一个属性都是一个综
18、合属性,或是Xj(1j n)的一个继承属性,这个继承属性仅依赖于 1.产生式中Xj的左边符号X1,X2,Xj-1的属性;2A的继承属性。每一个S-属性定义都是L-属性定义。,5.4.1 L-属性定义,图519 非L-属性的语法制导定义,产生式,语义规则,ALMA QR,L.i:=l(A.i)M.i:=m(L.s)A.s:=f(M.s)R.i:=r(A.i)Q.i:=q(R.s)A.s:=f(Q.s),图519的语法制导定义不是L-属性定义文法符号Q的继承属性依赖于它右边文法符号R的属性,定义 翻译模式是语法制导定义的一种便于翻译的书写形式。其中属性与文法符号相对应,语义规则或语义动作用花括号
19、括起来,可被插入到产生式右部的任何合适的位置上。这是一种语法分析和语义动作交错的表示法,它表达在按深度优先遍历分析树的过程中何时执行语义动作。翻译模式给出了使用语义规则进行计算的顺序。可看成是分析过程中翻译的注释。,5.4.2 翻译模式,将带有+号和-号的中缀表达式翻译成后缀表达式:ETR Raddop T print(addop.lexeme)R1|Tnumprint(num.val)把语义动作看成终结符号,输入9-5+2,其分析树如图520,当按深度优先遍历它,执行遍历中访问的语义动作,将输出 9 5-2+它是输入表达式9-5+2的后缀式。,例5.12 一个简单的翻译模式,图5.10 9-
20、5+2的带语义动作的分析树,条件:语法制导定义是L-属性定义 保证语义动作不会引用还没有计算的属性值。1.只需要综合属性的情况:为每一个语义规则建立一个包含赋值的动作,并把这个动作放在相应的产生式右边的末尾。例如:TT1*F Tval:=T1 val*F val TT1*F Tval:=T1 val*F val,设计翻译模式(根据语法制导定义),2.既有综合属性又有继承属性产生式右边的符号的继承属性必须在这个符号以前的动作中计算出来。一个动作不能引用这个动作右边符号的综合属性。产生式左边非终结符号的综合属性只有在它所引用的所有属性都计算出来以后才能计算。计算这种属性的动作通常可放在产生式右端的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 编译 原理 语法 制导 翻译

链接地址:https://www.31ppt.com/p-5047580.html