




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第七章 自下而上的语法分析刘远兴计算机系2自下而上语法分析概述简单优先分析算符优先分析3自下而上语法分析概述.VAR;ABEGINENDREAD ( )AVAR A;BEGIN READ(A)END.4自下而上语法分析概述如名字如示,自下而上语法分析试图将一个字符串反向归约至开始符号。自下而上语法分析比自上而下语法分析更有效率,对语法的限制更少5文法GS:(1) S aAcBe(2) A b(3) A Ab(4) B dabbcde步骤符号栈输入符号串动作 1) # abbcde# 移进 2) #a bbcde# 移进A 3) #ab bcde# 归约(Ab) 4) #aA bcde# 移进
2、A 5) #aAb cde# 归约(AAb) 6) #aA cde# 移进 7) #aAc de# 移进B 8) # aAcd e# 归约(Bd) 9) #aAcB e# 移进11) #S # 接受S10) #aAcBe # 归约(SaAcBe)分析符号串abbcde是否GS的句子对输入串abbcde#的移进-规约分析过程SaAcBeaAcdeaAbcdeabbcde6自下而上语法分析算法的一般描述Let I = input stringrepeatpick a non-empty substring of Iwhere X is a productionif no such , backtr
3、ackreplace one by X in Iuntil I = “S” (the start symbol) or all possibilities are exhausted7算法应考虑的问题算法是否能够终止?算法是否快速?算法是否能够处理所有的情况?在每一步中如何选择子串进行归约?8自下而上语法分析的策略:移进-规约分析;移进就是将一个终结符推进栈归约就是将0个或多个符号从栈中弹出,根据产生式将一个非终结符压入栈移进-归约过程是自顶向下最右推导的逆过程(规范归约)9规约T intT + int | 移进T + | int移进int | * int + int移进int * | int
4、 + int移进|int * int + intE |规约E T + ET + E |规约E TT + T |移进T | + int规约T int * Tint * T | + int规约 T intint * int | + int文法GE:E T + E | TT int * T | int | (E)ETE+int*intTintT10A Shift-Reduce Parse in Detail (1)+int*intint|int * int + int11A Shift-Reduce Parse in Detail (2)+int*intintint | * int + int|in
5、t * int + int12A Shift-Reduce Parse in Detail (3)+int*intintint | * int + intint * | int + int|int * int + int13A Shift-Reduce Parse in Detail (4)+int*intintint | * int + intint * | int + int|int * int + intint * int | + int14A Shift-Reduce Parse in Detail (5)+int*intintTint | * int + intint * | int
6、 + int|int * int + intint * T | + intint * int | + int15A Shift-Reduce Parse in Detail (6)T+int*intintTint | * int + intint * | int + int|int * int + intT | + intint * T | + intint * int | + int16A Shift-Reduce Parse in Detail (7)T+int*intintTT + | intint | * int + intint * | int + int|int * int + i
7、ntT | + intint * T | + intint * int | + int17A Shift-Reduce Parse in Detail (8)T+int*intintTT + int | T + | intint | * int + intint * | int + int|int * int + intT | + intint * T | + intint * int | + int18A Shift-Reduce Parse in Detail (9)T+int*intTintTT + int | T + | intint | * int + intint * | int
8、+ int|int * int + intT + T |T | + intint * T | + intint * int | + int19A Shift-Reduce Parse in Detail (10)TE+int*intTintTT + int | T + | intint | * int + intint * | int + int|int * int + intT + E |T + T |T | + intint * T | + intint * int | + int20A Shift-Reduce Parse in Detail (11)ETE+int*intTintTT
9、+ int | T + | intint | * int + intint * | int + int|int * int + intE |T + E |T + T |T | + intint * T | + intint * int | + int21我们如何决定什么时候移进,什么时候规约?考虑 int | * int + int我们可以用 T int进行归约,而得到 T | * int + int致命错误: 无法规约到开始符号 E直觉: Want to reduce only if the result can still be reduced to the start symbol一般的
10、移进-归约策略:若句柄在栈顶出现,则归约否则移进句柄(Handles):句型的最左直接短语22短语、直接短语、句柄的定义:文法GS, S A且A b则称b是句型b相对于非终结符A的短语。 若有A b则称b是句型b相对于该规则A b的直接短语。 一个句型的最左直接短语称为该句型的句柄。23Conflicts实际应用中可能出现的冲突移进与归约都合法,产生移进-归约冲突归约时可以适用两个不同的产生式,产生归约-归约冲突24Source of Conflicts二义文法会导致冲突但应注意,许多的非二义文法同样会导致冲突25Conflict Example考虑下面的二义文法:int|(E)|E * E|
11、E + EE26One Shift-Reduce ParseE | reduce E E + EE + E |. . . . .reduce E E * EE * E | + intshift|int * int + intreduce E intE + int|shiftE + | intshiftE | + int27Another Shift-Reduce ParseE | reduce E E * EE * E |. . . . .shiftE * E | + intshift|int * int + intreduce E E + EE * E + E|reduce E intE *
12、 E + int |shiftE * E + | int28Conflict Solutions改写文法根据产生式出现的顺序来选择根据算符的优先级29自下而上的分析算法优先分析法简单优先分析法算符优先分析法LR分析30简单优先分析法按照文法符号(包括终结符和非终结符)的优先关系确定句柄。示例见下页31文法GS:(1) S bAb(2) A (B|a(3) B Aa)步骤符号栈输入符号串动作 1) # b(aa)b# #b,移进 2) #b (aa)b# b(,移进 3) #b( aa)b# (a,归约Aa 5) #b(A a)b# A=a,移进 6) #b(Aa )b# a=),移进 7) #
13、b(Aa) b# )b,归约BAa) 8) #b(B b# Bb,归约A(B 9) #bA b# A=b,移进10) #bAb # b#,归约SbAb11) #S # 接受对输入串b(aa)#的简单优先分析过程简单优先关系矩阵32优先关系优先关系X=Y 文法G中存在产生式A.XY.XY 文法G中存在产生式A.BD.,且B .X,D Y.如何确定两个文法符号之间的优先关系?33简单优先文法的定义满足以下条件的文法是简单优先文法(1)在文法符号集V中,任意两个符号之间最多只有一种优先关系成立。(2)在文法中任意两个产生式没有相同的右部(3)不含空产生式34算符优先分析某些文法具有“算符”特性表达式
14、运算符(优先级、结合性)人为地规定其算符的优先顺序,即给出优先级别和同一级别的结合性只考虑算符之间的优先关系来确定句柄35文法GE:EE+E|E-E|E*E|E/E|EE|(E)|i步骤符号栈输入符号串动作 1) # i+i*i# #i,移进 2) #i +i*i# #+,规约 3) #E +i*i# #+,移进 4) #E+ i*i# +i,移进 5) #E+i *i# +*,规约 6) #E+E *i# +*,移进 7) #E+E* i# *i,移进 8) #E+E*i # *#,规约 9) #E+E*E # +#,规约10) #E+E # #,规约11) #E # 接受对输入串i+i*i
15、的算符优先分析过程算符优先关系表36如何确定算符优先关系?(1)i的优先级最高(1) 优先级次于i,右结合(2)*和/优先级次之,左结合(3)+和-优先级最低,左结合(4)括号(,)的优先级大于括号外的运算符,小于括号内的运算符,内括号的优先性大于外括号(5)#的优先性低于与其相邻的算符文法GE:EE+E|E-E|E*E|E/E|EE|(E)|i算符优先关系表37算符文法的定义定义 如果不含空产生式的上下文无关文法 G 中没有形如 UVW的产生式,其中V,WVN则称G 为算符文法(OG)。性质1:在算符文法中任何句型都不包含两个相邻的非终结符.(数学归纳法)性质2:如 Vx 或 xV 出现在算
16、符文法的 句型 中,其中VVN,xVT, 则 中任何 含 x 的短语必含有V.(反证法)38算符优先关系的定义在OG中 定义 (算符优先关系) x = y G中有形如.Uxy或U xVy. 的产生式。 x y G中有形如.U Wy的产生式,而 W x或W xV规定 若 S x或 S Vx 则 # #39算符优先文法的定义在 OG文法 G 中,若任意两个终结符间至多有一种算符优先关系存在,则称G 为算符优先文法(OPG)。注意:允许bc,cb;不允许bc,bc,b=c 结论 算符优先文法是无二义的。40算符优先关系表的构造由定义直接构造由关系图法构造算符优先关系表41首先引入两个概念FIRSTV
17、T(B)=b|B b或B Cb.对于非终结符B,其往下推导所可能出现的首个算符LASTVT(B)=a|B a或B aC.对于非终结符B,其往下推导所可能出现的最后一个算符42如何计算算符优先关系1) =关系直接看产生式的右部,若出现了A ab或A aBb,则a=b2)关系求出每个非终结符B的FIRSTVT(B)若AaB,则bFIRSTVT(B),a关系求出每个非终结符B的LASTVT(B)若ABb,则aLASTVT(B),ab43文法GE:(0) E#E#(1) EE+T(2) ET(3) TT*F(4) TF(5) FPF|P(6) P(E)(7) PiFIRSTVT(E)=#FIRSTVT
18、(E)=+,*,(,iFIRSTVT(T)=*,(,iFIRSTVT(F)=,(,iFIRSTVT(P)=(,iLASTVT(E)=#LASTVT(E)=+,*,),iLASTVT(T)=*,),iLASTVT(F)=,),iLASTVT(P)=),i1)=关系由产生式(0)和(6),得#=#,(=)2)关系找形如:AaB的产生式#E:则#FIRSTVT(E)+T: 则+FIRSTVT(T) *F: 则*FIRSTVT(F)F:则 FIRSTVT(F)(E: 则 (关系找形如:ABb的产生式E# ,则 LASTVT(E)#E+ ,则 LASTVT(E)+ T* ,则 LASTVT(T)* P
19、,则 LASTVT(P) E) ,则 LASTVT(E)44算符优先分析算法归约过程中,只考虑终结符之间的优先关系来确定句柄,而与非终结符无关。这样去掉了单非终结符的归约,所以用算符优先分析法的规约过程与规范归约是不同的,P110.为解决在算符优先分析过程中如何寻找句柄,引进最左素短语的概念45算符文法的任一句型有如下形式:#N1a1N2a2.NnanNn+1#,若Niai.NjajNj+1为句柄,则有ai-1 ai+1对于算符优先文法,如果aNb(或ab)出现在句型r中若ab,则在r中必含有a而不含b的短语存在若a=b,则在r中含有a的短语必含有b,反之亦然定义 cfg G 的句型的素短语是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 连锁超市转让协议书
- 车位租赁合同协议书
- 顺丰司机合同协议书
- 金融委托贷款协议书
- 造价咨询股东协议书
- Brand KPIs for second-hand apparel online shops IN LOVE AGAIN in Germany-外文版培训课件(2025.2)
- 长期电力交易协议书
- 餐具货物配送协议书
- 闲置资金托管协议书
- 餐具专版定制协议书
- 小学心理健康家长会课件
- 2025年4月自考00160审计学答案含评分参考
- 购买木地板合同协议
- 严重开放性肢体创伤早期救治专家共识解读
- 2025年公共安全管理考试试题及答案
- 速卖通开店考试最权威答案
- 输液导管相关静脉血栓形成中国专家共识 课件
- 国企岗位笔试题目及答案
- 2024年泉州实验中学初一新生入学考试数学试卷
- 航模课程-飞翔的梦想
- SWAT培训课件教学课件
评论
0/150
提交评论