- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
§3.7 LR分析器(LR Parser)
*本节提出一种有效的﹑自下而上的语法分析技术, LR(k) 分析技术, 它能适用于一大类上下文无关文法的分析.
*其中:L表示从左到右扫描输入符号串,R表示构造最右推导的逆过程, k表示在作分析决定时要向前看k个输入符号. 在实际的编译器中,我们只考虑k=0或k=1的情形. 当(k)省略时,表示k=1.
LR分析方法的优缺点
优点:
能够构造LR分析器来识别所有能用上下文无关文法写的程序设计语言的结构.
LR分析方法是已知的最一般的无回溯移进―归约方法. 它能够和其它移进―归约方法一样有效地实现.
LR分析方法能分析的文法类是预测分析法能分析的文法类的真超集(proper superset).
*LR分析方法向前看k个符号只需看右句型中某个产生式右边的k个符号,而预测分析方法向前看k个符号要看某个产生式右边的文法符号能推出的前k个符号. 因此,LR分析法比LL分析法简单,适用的文法类更广.
LR分析器能及时察觉语法错误,在自左向右扫描输入时,尽可能快地发现错误.
缺点:
对典型的程序设计语言文法,手工构造LR分析器工作量太大.
*目前已有许多自动生成LR分析器的生成器, 例如: Yacc.
LR分析算法
1.结构: (见书 P248)
栈中: s0X1s1X2s2…Xmsm
其中: si : 状态(state) , Xi : 文法符号(grammar symbol)
分析表: 动作函数action和转移函数goto
2. 动作: 根据当前栈顶状态sm和当前输入符号ai, action[sm,ai]有四种可能动作:
移进(shift)s, s是一个状态
按文法产生式A→β归约(reduce)
接受(accept)
出错
3. 活前缀(viable prefix)
文法G的活前缀是它的右句型(right sentential form)的前缀, 它不超过该句型中最左句柄(handle)的右端.
例: 文法 E→E+T | T , T→T*F | F , F→(E) | id , 存在最右推导: ETT*FT*idF*id(E)*id
(, (E, (E) 都是右句型(E)*id的活前缀.
4. 格局(configuration):
栈中内容: s0X1s1X2s2…Xmsm, 剩余输入串: aiai+1…an$
组成当前格局: (s0X1s1X2s2…Xmsm, aiai+1…an$)
这个格局代表右句型: X1X2…Xmaiai+1…an
5. 分析器动作: 设当前格局是
(s0X1s1X2s2…Xmsm, aiai+1…an$)
(1)如果action[sm,ai] =移进s, 分析器进入格局:
(s0X1s1X2s2…Xmsmais, ai+1ai+2…an$)
(2)如果action[sm,ai] =归约A→β, 分析器进入格局:
(s0X1s1X2s2…Xm-rsm-rAs, aiai+1…an$)
其中: s = goto[sm-r , A], r是β的长度.这里分析器首先从栈中弹出2r个符号,包括r个状态和r个文法符号,这些文法符号刚好匹配产生式的右部β,即β=Xm-r+1Xm-r+2…Xm .
(3)如果action[sm, ai] =接受, 分析完成.
(4)如果action[sm,ai] =出错, 分析器发现错误,调用错误恢复例程.
6. 例子: 文法
E→E+T
E→T
T→T*F
T→F
F→(E)
F→id
分析表(parsing table) (见书 P252)
给出串id*id+id的移进―归约过程.(见书 P253)
*注意: 在实际的LR分析器中, 栈中不保存文法符号, 栈顶的状态代表栈中的内容.
构造SLR分析表
1.项目(item): 是右部的某个地方加点的G的产生式.
例如: 产生式 A→XYZ
有项目: A→.XYZ
A→X.YZ
A→XY.Z
A→XYZ.
产生式 A→ε只有一个项目 A→.
*解释项目中加点的意义.
2. 拓广文法(augmented grammar):
在文法G中引入产生式: S’→ S, 得拓广文法G’, S’是G’的开始符号,S是G原来的开始符号.
*引入这个新的产生式的目的是指出什么时候分析结束,宣布接受输入串.
3. 闭包函数
设I是项目集, 那么closure(I)是由下面两条规则从I构造的项目集(set of items):
初始, I的每个项目都加入closure(I);
如果A→α.Bβ在closure(I)中, 且B→γ是产生式, 那么, 如果B→.γ不在closure(I)中, 则把它加入.反复运用这条规则, 直到没有更多的项目可加入closure(I)为止
您可能关注的文档
- 毕业论文文章2.doc
- 毕业论文——我国会计准则实施现状及对策协力改.doc
- CAITA例题太极鱼.ppt
- 毕业设计(论文)-超市存物柜密码锁设计.doc
- CAD文字与表格.ppt
- 2017版高考英语一轮复习专题五怎样写好过渡句和承转句考点突破.ppt
- 毕业设计(论文)任务书.doc
- 毕业设计,,王保东.doc
- ①古代流传过这样一个有趣的故事.pptx
- cad三维绘图基础知识.ppt
- 2025年七下体育必考题及答案.doc
- 高中生借助紫外可见分光光度法测定矿泉水钙镁离子含量的课题报告教学研究课题报告.docx
- 智能研修平台在幼儿教育个性化教学中的应用与实践教学研究课题报告.docx
- 初中英语影视配音中语音语调模仿的分层教学策略研究课题报告教学研究课题报告.docx
- 数字化教学管理在职业教育中的创新与实践研究教学研究课题报告.docx
- 高中生通过电化学阻抗谱法检测方便面中防腐剂丙酸钙含量的实验课题报告教学研究课题报告.docx
- 甘肃省水利公务员考试试题及答案.doc
- 初中英语写作中过去完成时态误用问题的语料库分析课题报告教学研究课题报告.docx
- 初中英语写作中议论文论证深度的递进策略研究课题报告教学研究课题报告.docx
- 2025年七下英语考试试卷及答案.doc
原创力文档


文档评论(0)