- 1、本文档共104页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 LR分析;语法分析;自下而上的语法分析(Bottom-up Parsing);7.1 LR分析概述;7.1 LR分析概述;7.1 LR分析概述;7.1 LR分析概述分析器的总体结构;7.1 LR分析概述;7.1 LR分析概述;对输入串abbcde#的LR分析过程:;对输入串abbcde#的LR分析过程:; 1) E – E + T2) E – T3) T – (E)4) T – i 对输入串i+(i)#进行分析;对输入串i+(i)#进行分析;7.2 LR(0)分析;7.2 LR(0)分析;;活前缀的形式定义;7.2 LR(0)分析;7.2 LR(0)分析;7.2 LR(0)分析;7.2 LR(0)分析;7.2 LR(0)分析;7.2 LR(0)分析;7.2 LR(0)分析;7.2 LR(0)分析;7.2 LR(0)分析; 7.2 LR(0)分析;7.2 LR(0)分析;构造识别文法所有活前缀的NFA
1.列出文法的所有LR(0)项目,每个项目作为一个状态,S’-.S对应初态。
2. 若状态i为X?X1 … Xi-1.Xi … Xn ,状态j为X?X1 … Xi-1Xi .Xi+1 … Xn , 则从状态i画一条标志为Xi的有向边到状态j;
3. 若状态i为X?? .A? ,A为非终结符,则从状态i画一条?边到所有状态A?.?。
把识别文法所有活前缀的NFA确定化;文法G(S?) :S?→E
E→aA|bB
A→cA|d
B→cB|d
该文法的项目有:
1. S?→·E 2. S?→E· 3. E→·aA
4. E→a·A 5. E→aA· 6. A→·cA
7. A→c·A 8. A→cA· 9. A→·d 10. A→d· 11. E→·bB 12. E→b·B
13. E→bB· 14. B→·cB 15. B→c·B 16. B→cB· 17. B→·d 18. B→d·;识别活前缀的NFA;识别活前缀的DFA
(与P129-130方法1结果相吻合);7.2 LR(0)分析构造识别文法活前缀的DFA-方法3;7.2 LR(0)分析构造识别文法活前缀的DFA-方法3;假定I是文法G?的任一项目集,定义和构造I的闭包CLOSURE(I)如下:
1. I的任何项目都属于CLOSURE(I);
2. 若A→?·B?属于CLOSURE(I),那么,对任何关于B的产生式B→?,项目B→·?也属于CLOSURE(I);
3. 重复执行上述两步骤直至CLOSURE(I) 不再增大为止。;状态转换函数GO:I是一个项目集,X是一个文法符号,函数GO(I,X)定义为:
GO(I,X)=CLOSURE(J)
其中
J={任何形如A→?X·?的项目| A→? · X?属于I}。
直观上说,若I是识别某个活前缀 ? 的项目集,那么,GO(I,X)便是识别 ?X 的项目集。;构造文法G的拓广文法G?的LR(0)项目集规范族算法:
PROCEDURE ITEMSETS(G?);
BEGIN
C:={CLOSURE({S??·S})};
REPEAT
FOR C中每个项目集I和G?的每个符号X DO
IF GO(I,X)非空且不属于C THEN
把GO(I,X)放入C族中;
UNTIL C 不再增大
END
转换函数GO把项目集连接成一个DFA转换图.;文法G(S?)
S?→E
E→aA|bB
A→cA|d
B→cB|d
I0={S?→·E, E→·aA, E→·bB}
GO(I0, E)= closure(J)=closure({S’→E·})
= {S’→E·} = I1
GO(I0, a)= closure(J)=closure({E→a·A})
={ E→a·A, A→·cA, A→·d} )=I2
GO(I0, b)= closure(J)=closure ({E →b.B})
文档评论(0)