G[B]的SLR(1)分析表 创分程序文法GB中,I={S→>s·;S,S→>s·}含有 冲突,但 FOLLOW(S)={e}≠{;},故冲突可解决 ACTION GOTO b d B dco 012345678901 3 G
6 G[B]的SLR(1)分析表 例 分程序文法G[B]中,I8={S→s•;S, S→s•}含有 冲突,但FOLLOW(S)={e} ≠{;},故冲突可解决
四、LR(1)分析表的的造 尽管SLR(1)分析表简单实用,但还不能解决所有问题; 例如,文法S’→SS→ CbBA A→Aab|abB→C|Db C→aD→a相应的DFA见下页。 其中项目集I10={ SCbA,A→Aab}中存在“移进-归约” 冲突,由 FOLLOW(S)={#}≠{a},冲突是可解决的 但项目集Ig={C→a,D→a-}中, FOLLOW(C)={a,b}, FOLLOW(D)={b},存在公共元素b,不能解决此冲突 还需考虑另一个条件:归约后得到的符号串应该是一个 规范句型的前缀,即当分析栈内容为#6a,输入符为a时, 若将α归约为A,则#δAa必须是某一规范句型的前缀,否则 这个归约就是无效的
7 四、LR(1)分析表的构造 尽管SLR(1)分析表简单实用,但还不能解决所有问题; 例如,文法 S’→S S→CbBA A→Aab|ab B→C|Db C→a D→a 相应的DFA见下页。 – 其中项目集I10={S→CbBA·,A→A·ab}中存在“移进-归约” 冲突,由FOLLOW(S)={#} ≠{a}, 冲突是可解决的. – 但项目集I8={C→a·,D→a·}中, FOLLOW(C)={a,b}, FOLLOW(D)={b},存在公共元素b,不能解决此冲突. 还需考虑另一个条件:归约后得到的符号串应该是一个 规范句型的前缀,即当分析栈内容为#,输入符为a时, 若将归约为A,则#Aa必须是某一规范句型的前缀,否则 这个归约就是无效的
I12:A→ab 1 s→S b 12:S→C·bBA I:A→a·b 1:S→:S s→·CbBA a 13:S→CbB·A B A→·Aab I,:S→Cb·BA A→·ab I3:C→a B→:C A B→·Db C a C I1s;S→CbBA D→ A→A·ab I1:A→Aa·b lk:B→C Ir;B→D·b b 14: A→Aab l2:B→Db
8