- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分析表的构造(编译原理)综述
LR(0)分析表的构造
步骤一:
构造识别文法活前缀的确定有穷自动机(DFA)
步骤二:
根据DFA构造相应的LR(0)分析表
识别活前缀的确定的有穷自动机
方法1:根据形式定义求出活前缀的正规表达式,然后由此正规表达式构造NFA再确定化为DFA
ε,a,ab
ε,a,aA,aAb
ε, a,aA,aAc,aAcd
ε, a, aA,aAc,aAcB,aAcBe
ε,S
对于一个适用的高级语言的文法,用方法1构造识别活前缀的有限自动机从理论的角度讲是很严格的,实现起来却是很复杂的。
识别活前缀的确定的有穷自动机
方法2:求出文法的所有LR(0)项目,按一定规则构造识别活前缀的NFA再确定化为DFA
例如,文法G:E → aA|bBA → cA| d B → cB| d
步骤一:
用增广文法表示成
文法G’:
S’→E
E → aA|bBA → cA| d B → cB| d
文法G’的项目有:
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·
1
*
步骤三:
初态(初始项目)
句子识别态(接受项目)
句柄识别态(规约项目)
文法G’的项目有:
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·
1
*
E
3
4
a
A
6
7
c
A
9
d
11
12
b
B
14
15
c
B
17
d
步骤四:
找源自同一产生式的项目,添加状态间的连线
文法G’的项目有:
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·
1
*
E
3
4
a
A
6
7
c
A
9
d
11
12
b
B
14
15
c
B
17
d
ε
ε
ε
ε
ε
ε
ε
ε
ε
ε
步骤四:
1.找待约项目
2.与以其后的非终结符作为产生式头的圆点在最左的项目,用空弧与之连接
T0= { 1, 3, 11}
T1= {2}
T2= {4, 6, 9}
T3= { 12, 14, 17}
T4= {6, 7, 9}
T5= { 14, 15, 17}
T6= { 5 }
T7= { 13 }
T8= { 8 }
T9= { 16 }
T10= { 10 }
T11= { 18}
状态
输入符号
a
b
c
d
A
B
E
T0
T2
T3
?
?
?
?
T1
T1
?
?
?
?
?
?
?
T2
?
?
T4
T10
T6
?
?
T3
?
T7
T5
T11
?
?
?
T4
?
?
T4
T10
T8
?
?
T5
?
?
T5
T11
?
T9
?
T6
?
?
?
?
?
?
?
T7
?
?
?
?
?
?
?
T8
?
?
?
?
?
?
?
T9
?
?
?
?
?
?
?
T10
?
?
?
?
?
?
?
T11
?
?
?
?
?
?
?
步骤五:运用子集法将其确定化
0
E
确定化的DFA
4
2
3
5
a
b
c
d
A
c
A
d
b
d
c
d
B
c
*
E
2
a
b
c
d
A
c
A
d
b
d
c
d
B
c
S’→·E
E →·aA
E →·bB
A →· cA
A → c·A
A → ·d
E →a·A
A →· cA
A → ·d
S’→E ·
E →b·B
B →· cB
B →·d
B → c·B
B →· cB
B →·d
A → cA·
A → d ·
E →aA·
E →bB·
B → d·
B → cB·
步骤六:把每个子集所含状态集对应的项目写在新的状态中,得到识别活前缀的有限自动机DFA
*
使用方法2构造识别活前缀的DFA,需要列出拓广文法的所有项目,按规定规则构造其NFA,然后再确定化为DFA,
文档评论(0)