- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
自下而上语法分析
对于产生语言来讲,白上而下分析的方法是白然的。对于分析语言来讲,H下而上分析的 方法更白然,因为语法分析处理的对象一开始都是终结符组成的输入序列,而不是文法的开始 符号。同时,白下而上分析中最一般的方法,LR方法的能力比白上而下分析的LL方法要强, 从而使得LR分析成为最为实用的语法分析方法。
1自下而上分析的基本方法
思路:从句子3T?始,从左到右扫描3反复用产生式的左部替换产生式的右部、谋求对3 的匹配,最终得到文法的开始符号,或者发现一个错误。
1.1规范归约与“剪句柄”
定义3. 13设咿是文法G的一个句型,若存在S=aA 则称魄句型邛湘对于A的
短语,特别的,若有A-B则称幌句型叩湘对于产生式A-郎J直接短语,一个句型的最左一直 接短语被称为句柄。 ##
直观上,句型是一个完報结构,短语是句型屮的某部分。S是一个句型,而不是一个短 语。
短语形成的两个要素:
1从S可以推导出A,即S^ciA§
2从A至少一次推导出B即
特征:
短语:以非终结符为根的了树屮所有从左到右排列的叶子;
直接短语:只有父子关系的树屮所有从左到右排列的叶子(树高为2);
句柄:最左边父子关系树屮所有从左到右排列的叶子(句柄是唯一的)。
问题:H1+H2是句型H1+H2*H3的一个短语吗?
答案:不是。因为:
没有一个E的子树,它的全部叶子是H1+H2或者
找不到某个E,使得E=*E*E3 E=4~ H1+H2
定义3. 14若(焊文法G的句子且满足下述条件,则称序列5 ???,%是(的一个最左归约。
L 2 Oo=S ( S是G的开始符号)
3对任何igM=n),呜是从对巴句柄替换为相应产生式左部非终结符得到的。
##
注意:最左归约的逆过稈是一个最右推导,分别称最右推导和最左归约为规范推导和规范归 约。
需要解决的问题:
确定右句型屮将要归约的了串(确定句柄);
确定如何选择正确的产生式进行归约。
3. 5. 1.2移进-归约分析器工作模式
解决方法:移进廿1约分析 用一个栈“记住”将要归约句柄的前缀,旬柄未形成前移
进,形成后归约。
移进-归约分析器的工作模式:(不同的分析表决定了不同的分析方法)
输入记号流_iptop输出移进约 分析表符号状态找驱动器
输入记号流_ip
top
输出
移进约 分析表
符号状态找
驱动器
图3. 17移进-归约分析器模型
工作方法:放幻灯,每个幻灯片是一个格局。
格局:(斗栈,当前剩余输入苑 改变格局的动作)
改变格局的动作:
移进(曲血:输入序列屮的终结符进栈。(匹配终结符)
归约(reduce):将栈顶句柄替换为对应的非终结符。(归约产生式)
接受(accept):宣告分析成功。
报错(eni)D :发现语法错误,调用错误恢复例稈。
从移进-归约分析过程中可以看出:
句柄总是在栈顶形成。这是因为在分析的过程屮一旦形成某产生式的右部就立即进行归 约,而从左到右扫描输入,最早形成的白然是最左的直接短语;
栈屮保留的总是一个右句型的前缀(加上若干终结符形成句型),称为活前缀;
如果将毎次归约逻辑上认为是构造对应产生式的树,则分析的全过程逻辑上就是从下到 上构造一棵分析树;反Z,如果将每次归约逻辑上认为是剪去假想分析树上对应产生式的孩 了,则分析的全过稈逻辑上就是从下到上为分析树剪句柄。
需要解决的问题:(由分析表确定)
如何保证栈屮总是活前缀正确移进);
如何确定栈顶已经形成句柄并选择正确的产生式进行归约正确归约)。
3. 5. 2 LR 分析
LR分析的特点:
采用最一般的无冋溯移进坍约方法;
可分析的文法是LL文法的真超集;
能够及时发现错误,快到从左到右扫描输入序列的最大可能;
分析表较复杂,难以手工构造。
2.1 LR分析与LR文法
1移进-归约分析表
LR分析器的核心是LR分析表和丞动器。
文法:E-ETJT ZT疥 |F | id
id
—
*
E
T
F
0
s4
s5
1
2
3
1
s6
acc
2
r2
s7
r2
3
rd
rd
rd
4
r6
r6
r6
5
s4
s5
8
6
s4
s5
9
3
7
s4
s5
10
8
r5
r5
r5
9
rl
s7
rl
10
r3
r3
r3
actbn goto
动作表(action)与转移表(goto):两者都是二维数纽.,且行下标由称Z为状态的整型 数统一表示。动作表以终结符作为列下标,转移表以非终结符作为列下标。
action根据输入确定改变格局的动作,而got。仅指示非终结符的状态转移°故仅有动作
表与输入有关。
2格局与改变格局的动作
开始格局:(#Q (曲 第一个动作)
结朿格局:(#0S #,接受)
出错格局:(#§曲报错)
改变格局的四个动作:
actbn af= si终结符进栈并转向状态i(移进)
=
文档评论(0)