LR(0)项目的分类p131-p132 nA口口.归约项目(Reduce) U句柄形成于栈顶,可归约 nS’→a.接受项目 u接受,句子分析成功 nA☐▣.a☐ 移进项目(Shift) u移进符号a nA☐0.B☐ 待约项目 U等待分析完B,才能继续分析A的右部 2023/2/28 小节目录 ☑D18
2023/2/28 18 LR(0)项目的分类 p131-p132 nA . 归约项目(Reduce) u句柄形成于栈顶,可归约 nS’→α. 接受项目 u接受,句子分析成功 nA .a 移进项目(Shift) u移进符号a nA .B 待约项目 u等待分析完B,才能继续分析A的右部 小节目录
构造识别活前缀的DFA n先按一定规则用所有LR(O)项目表示状态构造FA p132 6.A→.cA7.A→c.AA, 8.A→cA. 图6.7 9.A→.dd10.A→d e 3.E→.aA a4.E→a.AA 5.E-aA. e 1.S→.E E2.S→E 11i.E.bBb12.E→b.BB 13.E→bB. e 7.B→.d418.B→d 14.B-→.cB15.B→c.BB16.B→cB. 2023/2/28 ☒D19
2023/2/28 19 构造识别活前缀的DFA n先按一定规则用所有LR(0)项目表示状态构造NFA p132 图6.7 1.S’→.E 3.E→.aA 6.A→.cA 7.A→c.A 9.A→.d 12.E→b.B 14.B→.cB 17.B→.d 15.B→c.B 2.S’→E. 4.E→a.A 11.E→.bB ε ε E 8.A→cA. 10.A→d. 5.E→aA. 13.E→bB. 18.B→d. 16.B→cB. a ε ε A c ε ε A d b ε ε B c ε ε B d
构造识别活前缀的DFA 14 →C.A A n再对NFA确定化和最小化 A→.CA A→cA. 最后得到一个识别活前缀 A→.d d 的DFAp133图6.8 A→d. 10 I2 E→a.A A→.CA A a A→.d E→aA. Io →.E E aA S→E. →.bB E→b.B B E→bB. B→.cB nIo,I1,.,I1 B→.d 状态—LR(O)项目集合 B→C.B dB→d. n状态(项目集)间转移函数I5 B→.cB B G0函数 B→.d B→cB. n求解太麻烦,如何优化? 2023/2/28 小节目录 ☒D20
2023/2/28 20 构造识别活前缀的DFA n再对NFA确定化和最小化 最后得到一个识别活前缀 的DFA p133 图6.8 I0 S’→.E E→.aA E→.bB E S’→E. I1 a I2 E→a.A A→.cA A→.d b I3 E→b.B B→.cB B→.d A E→aA. I6 c I4 A→c.A A→.cA A→.d d B E→bB. I7 c I5 B→c.B B→.cB B→.d d B→d. I11 A A→cA. I8 c d A→d. I10 B B→cB. I9 c d nI0,I1,.,I11 状态——LR(0)项目集合 n状态(项目集)间转移函数 ——GO函数 小节目录 n求解太麻烦,如何优化?
LR(0)项目集规范族的定义p132 n文法的LR(O)项目集规范族,记作C U构成识别一个文法活前缀的DFA的项目集合 (或状态)的全体 U例如,C{Io,I1,.,I11} nLR(O)项目集(合) u识别一个文法活前缀的DFA的状态 n函数go ULR(O)项目集间的转移函数 2023/2/28 KD 21
2023/2/28 21 LR(0)项目集规范族的定义 p132 n文法的LR(0)项目集规范族,记作 C u构成识别一个文法活前缀的DFA的项目集合 (或状态)的全体 u例如,C={I0,I1, . ,I11 } nLR(0)项目集(合) u识别一个文法活前缀的DFA的状态 n函数go uLR(0)项目集间的转移函数
LR(0)项目集规范族的构造p133 n拓广文法G” U引进新的开始符号$’及新产生式 S’→S uS’→.S对应分析开始 US’→S.对应分析成功结束 nLR(O)项目集规范族的构造算法 U计算项目集闭包CLOSURE(I) U计算状态转移函数G0 2023/2/28 ☒D 22
2023/2/28 22 LR(0)项目集规范族的构造 p133 n拓广文法G’ u引进新的开始符号S’及新产生式 S’ → S uS’→.S对应分析开始 uS’→S.对应分析成功结束 nLR(0)项目集规范族的构造算法 u计算项目集闭包CLOSURE(I) u计算状态转移函数GO