最新【考研计算机专业课】天津大学 编译原理讲义 自下而上3.5-3.6(共45张PPT课件).pptx
《最新【考研计算机专业课】天津大学 编译原理讲义 自下而上3.5-3.6(共45张PPT课件).pptx》由会员分享,可在线阅读,更多相关《最新【考研计算机专业课】天津大学 编译原理讲义 自下而上3.5-3.6(共45张PPT课件).pptx(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一一. . 句型的语法句型的语法(yf)(yf)树和文法的二义性树和文法的二义性 1. 语法语法(yf)(yf)树树 语法树语法树是一棵树,这棵树表示一个是一棵树,这棵树表示一个(y )(y )句型的推导过程。句型的推导过程。 句型句型E+F* *i对应的语法树,对应的语法树,如右图所示如右图所示: : EET+TF*Fi例例,文法,文法G的产生式的产生式: EE+TTTT* *FFF(E)i 3.5 自下而上分析自下而上分析第一页,共四十五页。由图不难看出由图不难看出: : F是句型是句型E+F* *i相对于相对于T的的直接短语直接短语;i是句型是句型E+F* *i相对于相对于F的的直直接短
2、语接短语;F* *i是句型是句型E+F* *i相对于相对于T的的短语短语;E+F* *i是是句型句型E+F* *i相对于相对于E的的短语短语。F是是句柄句柄。 EET+TF*Fi第二页,共四十五页。2. 文法文法(wnf)(wnf)的二义性的二义性 若一个文法存在某个若一个文法存在某个(mu )句型对应两棵不同的语法树,则称句型对应两棵不同的语法树,则称此文法是此文法是二义性文法二义性文法。 例例,文法,文法(wnf)G: EE+EE*E(E)i 句型句型E*E+i 对应的两棵语法树对应的两棵语法树 EEE*EE+iEEE+EE*iG虽是二义性文法,但虽是二义性文法,但L( (G) )不是二义
3、性语言。不是二义性语言。 第三页,共四十五页。定理定理: : 若文法是非若文法是非(shfi)(shfi)二义的,则此文法的规范推导句二义的,则此文法的规范推导句型的句柄是唯一的。型的句柄是唯一的。 1. 给定一非二义性文法给定一非二义性文法G=(VN,VT,P,S),且任意给一符号串,且任意给一符号串VT*,若,若L( (G) ),则,则按规范归约按规范归约(句柄是唯一句柄是唯一(wi y)(wi y)的的)一定能归约成开始符一定能归约成开始符S;否则,一定失败。;否则,一定失败。 2. 给定文法给定文法G,可用规范归约识别,可用规范归约识别(shbi)(shbi)文法文法G的句子。的句子。
4、 例例,文法,文法G: EE+TT,TT* *FF,F(E)i句子句子 i+i* *i 的的规范推导规范推导为为: : E E+T E+T* *F E+T* *i E+F* *i E+i* *i T+i* *i F+i* *i i+i* *i 规范归约规范归约是上述是上述规范推导规范推导的逆过程。的逆过程。 第四页,共四十五页。3. 规范规范(gufn)(gufn)规约算法规约算法 ( “移进移进- -规约规约”分析法分析法) 符号栈符号栈SK,存放存放(cnfng)(cnfng)句型的前缀句型的前缀, ,初始初始S1=1=#;输入缓冲区输入缓冲区R,存放,存放(cnfng)要识别的符号串,初
5、始为要识别的符号串,初始为i+i*i#。工具工具:从输入串中读出的符号存在从输入串中读出的符号存在单元单元a中,每读一次符号,指针中,每读一次符号,指针下推一个符号位置。下推一个符号位置。 第五页,共四十五页。算法算法(sun f)(sun f): 1. . 置初值置初值 a=“”“”; k=1; Sk=“#”; 2. . 从从R中读下一个中读下一个(y )(y )符号存放入符号存放入a a; 3. . 若若Sk的内容的内容(nirng)(nirng)=“#E”a”a=“#”,则,则归约成功归约成功,结,结束;否则,执行束;否则,执行4; 4. . Sk栈顶部分是否为当前句型的栈顶部分是否为当
6、前句型的句柄?句柄?是则执行是则执行5;否则,;否则,执行执行6; 5. . Sk栈顶部分一定可用某个产生式左部替换。例如,栈顶部分一定可用某个产生式左部替换。例如,Sk栈顶的符号栈顶的符号X1Xn是句柄,且有产生式是句柄,且有产生式AX1Xn则则X1Xn出栈,出栈,K=K-n+1,A进进Sk栈。转栈。转3; 6. . K=K+1;a a中符号移进中符号移进Sk栈,转栈,转2; 例例,i+i* *i 的规约过程如下的规约过程如下:第六页,共四十五页。SK栈栈输入串输入串动作动作#i+i* *i# 移进移进#i+i* *i# 规约,规约,Fi#F+i* *i# 规约,规约,TF#T+i* *i#
7、 规约,规约,ET#E+i* *i# 移进移进#E+i* *i# 移进移进#E+i* *i# 规约,规约,Fi#E+F* *i# 规约,规约,TF#E+T* *i# 移进移进#E+T* *i# 移进移进#E+T* *i# 规约,规约,Fi#E+T* *F# 规约,规约,TT* *F#E+T# 规约,规约,EE+T#E#空空 成功!成功!第七页,共四十五页。 3.6算符优先算符优先(yuxin)(yuxin)分析算法分析算法算符优先分析法是算符优先分析法是自下向上自下向上分析方法中的一种,特别分析方法中的一种,特别(tbi)适合表达式适合表达式的分析,也宜于手工实现。的分析,也宜于手工实现。在算
8、术表达式的运算过程在算术表达式的运算过程(guchng)中,为了确保计算过程中,为了确保计算过程(guchng)和结果的和结果的唯一性,规定了四则运算法则,实际上就是规定了运算之间的优先顺序和唯一性,规定了四则运算法则,实际上就是规定了运算之间的优先顺序和结合性质。第一,运算分为两级,乘除为一级,加减为另一级,乘除结合性质。第一,运算分为两级,乘除为一级,加减为另一级,乘除优先优先于于加减。第二,同级运算服从加减。第二,同级运算服从左结合左结合。所谓算符优先分析法就是仿照上述算术四则运算的运算过程,而设计的所谓算符优先分析法就是仿照上述算术四则运算的运算过程,而设计的一种语法分析方法。它首先要
9、规定运算符之间的一种语法分析方法。它首先要规定运算符之间的优先关系优先关系,然后利用这,然后利用这种关系确定句型的种关系确定句型的“句柄句柄”,进行归约。,进行归约。第八页,共四十五页。例例,有文法,有文法(wnf)GE: EE+E| |E- -E| |E* *E| |E/E| |(E)| |i 并有输入串并有输入串 i+i- -i* *(i+i)这个文法是一个二义性这个文法是一个二义性文法,因此有几种不同文法,因此有几种不同的规范规约,但若定义的规范规约,但若定义了了算符优先顺序算符优先顺序(shnx)和和结合规则结合规则,归约过程,归约过程就唯一了。就唯一了。1i i+i-i+i-i* *
10、(i+i)(i+i)2E+E+i i-i-i* *(i+i)(i+i)3E+EE+E-i-i* *(i+i)(i+i)4E-E-i i* *(i+i)(i+i)5E-EE-E* *( (i i+i)+i)7E-EE-E* *( (E+EE+E) )8E-EE-E* *(E)(E)9E-E-E E* *E E10E-EE-E11E EE-EE-E* *(E+(E+i i) )6算符优先分析的规算符优先分析的规约过程不是一种规约过程不是一种规范规约。范规约。第九页,共四十五页。4.1.1 直观直观(zhgun)的算符优先分析法的算符优先分析法从上面的例子可以看到,算符优先分析法的关键就是要定义任意
11、两从上面的例子可以看到,算符优先分析法的关键就是要定义任意两个相继出现的个相继出现的终结符号终结符号a和和b之间的优先关系之间的优先关系(a与与b之间可有一个非之间可有一个非终结符终结符),一旦,一旦(ydn)确定了这种优先关系,就可以用它来确定确定了这种优先关系,就可以用它来确定“句柄句柄”进行归约。进行归约。1. 优先优先(yuxin)关系,终结符之间的优先关系,终结符之间的优先(yuxin)关系有三关系有三种种:a的优先级高于的优先级高于b 记为记为: . baa的优先级等于的优先级等于b 记为记为:. .abab .a的优先级低于的优先级低于b 记为记为:第十页,共四十五页。若有若有:
12、ab .ab但但 .- -+ .+ +- -与数学中的与数学中的含义不同,如含义不同,如:同样同样:,不一定有,不一定有:. .ab. .ab() 但却没有但却没有 )(. . .第十一页,共四十五页。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(3)若若 a,则根据,则根据EE1 E2进行归约,其中进行归约,其中E2和和E1分别代分别代表表OPND的次栈顶和栈顶,从的次栈顶和栈顶,从OPND中弹出中弹出E2和和E1,并将结,并将结果果E压入压入OPND中,同时中,同时OPTR栈顶栈顶 弹出,重新执行弹
13、出,重新执行(3)。(5)若若 . .a, 则则a入算符栈,成为算符栈新栈顶,转入算符栈,成为算符栈新栈顶,转(1);(6)若若 与与a不存在不存在(cnzi)优先关系,报告出错。优先关系,报告出错。(4)若若 . .a, 这只有两种可能这只有两种可能: 其一,其一, = ( 而而 a = ),逐,逐出出OPTR顶的顶的(,放弃,放弃a中的中的),转,转(1);其二,;其二, = a =#,分析过程,分析过程成功成功。(1)当前输入当前输入(shr)符号送符号送a;(2)若若a为基本为基本(jbn)运算数运算数i, 则送则送OPND并转并转(1);算法描述如下算法描述如下:第十四页,共四十五页
14、。序号序号OPNDOPTR优先关系优先关系a单元单元输入串输入串0#i+i* *i#1#i+i* *i#3i#+i* *i#5i i#+*i#i* *i#+#i2 . .i#*#+i i4 . .#e8. 例例,试用上述,试用上述(shngsh)算法分析表达式算法分析表达式i+i* *i,即分析,即分析#i+i* *i#t=it=i* *i ie=i+te=i+t =a=#=a=# 第十五页,共四十五页。4. 直观算符优先分析的缺陷直观算符优先分析的缺陷算法可能产生离奇的结果。算法可能产生离奇的结果。i i+i*+i( )这种缺陷表明这种缺陷表明(biomng),算符优先分析方法不能准确的,算
15、符优先分析方法不能准确的指出输入串出错的位置。指出输入串出错的位置。算符优先算符优先(yuxin)分析方法简单明了,易于实现。分析方法简单明了,易于实现。第十六页,共四十五页。3.6.1 直观直观(zhgun)的算符优先分析法的算符优先分析法在文法的基础上定义了算符的优先关系和结合规则,实在文法的基础上定义了算符的优先关系和结合规则,实现现(shxin)规约的唯一性。规约的唯一性。是对算术表达式计算过程的一种是对算术表达式计算过程的一种(y zhn)模拟。模拟。例例,有文法,有文法GE: EE+E EE- -E EE* *EE(E)| |i 输入串输入串 i+i- -i* *i1# #i i+
16、i-i+i-i*i#i#2#E+#E+i i-i-i*i#i#3# #E+EE+E-i-i*i#i#4#E-#E-i i*i#i#5#E-E#E-E*i i# #6#E-#E-E E*E E# #7# #E-EE-E# #8#E#E#第十七页,共四十五页。3.6.2 算符优先算符优先(yuxin)(yuxin)分析法分析法1、算符优先文法、算符优先文法(wnf)的定义的定义算符文法算符文法: 任给一上下文无关任给一上下文无关(wgun)文法文法G,若,若G的任何产的任何产生式右部都不含两个相继的非终极符,则称文法生式右部都不含两个相继的非终极符,则称文法G为算符为算符文法。文法。例例,文法,文
17、法G: SUV Ua Vb就不是算符文法。就不是算符文法。 第十八页,共四十五页。算符优先关系算符优先关系: 设设G是一个算符文法,是一个算符文法,a,b VT, A、R、Q VN,则,则a,b优先关系定义优先关系定义(dngy)如下如下:ab .ba(1),当且仅当,当且仅当G中含有产生式中含有产生式: Aab,或,或AaQb;. .ab 第十九页,共四十五页。算符优先文法算符优先文法: 如果一个如果一个算符文法算符文法G不含空产生式,且不含空产生式,且G中的任中的任意终极符对意终极符对(a,b)至多至多满足下列满足下列(xili)算符优先关系之一算符优先关系之一: . . . .a ba
18、b则称则称G为算符优先为算符优先(yuxin)文法。文法。. .ab总控程序总控程序算符优先算符优先关系表关系表栈栈中心问题中心问题: 算符优先关系表的构造。算符优先关系表的构造。第二十页,共四十五页。(1) 定义两个定义两个(lin )重要集合重要集合:FIRSTVT(U)=b| U+b或或U+Vb,b VT,U,V VNLASTVT(U) =a| U +a或或U+aV,a VT,U,V VN(2) 求法求法(以以FIRSTVT(U)为例说明为例说明): 直观定义直观定义: 若有产生式若有产生式Ub或或UVb,U,V VN,则则 b FIRSTVT(U) 传递定义传递定义: 若有产生式若有产
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考研计算机专业课 最新【考研计算机专业课】天津大学 编译原理讲义 自下而上3.5-3.6共45张PPT课件 最新 考
链接地址:https://www.taowenge.com/p-24217543.html
限制150内