第一题
问题描述
第一问
将文法 G[S]改写为不含左递归:
T→hiTT'
T'→oPT'|ε
改成公共左因子:
S→PuTS'
S'→in|ε
综上所述,得文法 G'[S]:
S→PuTS'
S'→in|ε
T→hiTT'
T'→oPT'|ε
P→union
第二问
只有S→PuTS'需要 P 的 First 集,剩下的非终结符可以得到:
非终结符 | First 集 |
S' | {i,ε} |
P | {u} |
T | {h} |
T' | {o,ε} |
然后,可以得到 S 的 First 集
非终结符 | First 集 |
S | {u} |
然后,计算非终结符的 Follow 集合:
- 首先将#放入 S 的 Follow 集中,查看S→PuTS'
- #加入 S‘的 Follow 集合
- i,#加入 T 的 Follow 集合
- u 加入 P 的 Follow 集合
- 查看T→hiTT'
- 将 T’的 First 集合的终结符(o)加入 T 的 Follow 集合
- i,o,#加入 T’的 Follow 集合
- 查看T'→oPT'|ε
- o 加入 P 的 Follow 集合
- i,#加入 P 的 Follow 集合
- 发现任何非终结符的 Follow 集不再增加,结束!
非终结符 | Follow 集 |
S | {#} |
S' | {#} |
P | {i,o,u,#} |
T | {i,o,#} |
T' | {i,o,#} |
综上所述:
非终结符 | First 集 | Follow 集 |
S | {u} | {#} |
S' | {i,ε} | {#} |
P | {u} | {i,o,u,#} |
T | {h} | {i,o,#} |
T' | {o,ε} | {i,o,#} |
第三问
由文法得预测分析表如下:
h | i | n | o | u | # | |
S | S→PuTS' | |||||
S' | S'→in | S'→ε | ||||
P | P→union | |||||
T | T→hiTT' | |||||
T' | T'→ε | T'→ε T'→oPT' | T'→ε |
第四问
预测分析表中 M[T',o]存在多重定义入口,不满足 LL(1)文法
第二题
问题描述
第一问
将文法 G[S]改写成不含左递归:
N→aSSN'
N'→atoN'|ε
提取公共左因子:
S→NoWS'
S'→ar|ε
综上,G[S']文法为:
N→aSSN'
N'→atoN'|ε
S→NoWS'
S'→ar|ε
W→SiN
第二问
做法与第一题相似,不再展开。
非终结符 | First 集 |
S | {a} |
S' | {a,ε} |
N | {a} |
N' | {a,ε} |
W | {a} |
求 Follow 集合步骤如下:
- 首先将#放入 S 的 Follow 集中,查看S→NoWS'
- #加入 S'的 Follow 集合
- a,#加入 W 的 Follow 集合
- o 加入 N 的 Follow 集合
- 查看N→aSSN'
- a 加入 S 的 Follow 集合
- o 加入 N‘的 Follow 集合
- 查看W→SiN
- i 加入 S 的 Follow 集合
- a,#加入 N 的 Follow 集合
- 查看S→NoWS'
- a,i 加入 S’的 Follow 集合
- a,i 加入 W 的 Follow 集合
- 查看N→aSSN'
- o 加入 S 的 Follow 集合
- a,o,#加入 N’的 Follow 集合
- 查看S→NoWS'
- o 加入 S’的 Follow 集合
- o 加入 W 的 Follow 集合
- 查看W→SiN
- i 加入 N 的 Follow 集合
- 查看N→aSSN'
- i 加入 N‘的 Follow 集合
- 不再添加,算法结束
非终结符 | First 集 | Follow 集 |
S | {a} | {a,i,o,#} |
S' | {a,ε} | {a,i,o,#} |
N | {a} | {a,i,o,#} |
N' | {a,ε} | {a,i,o,#} |
W | {a} | {a,i,o,#} |
第三问
N→aSSN'
N'→atoN'|ε
S→NoWS'
S'→ar|ε
W→SiN
a | i | o | r | t | # | |
S | S→NoWS' | |||||
S' | S'→ar S'→ε | S'→ε | S'→ε | S'→ε | ||
N | N→aSSN' | |||||
N' | N'→atoN' N'→ε | N'→ε | N'→ε | N'→ε | ||
W | W→SiN |
第四问
预测分析表中 M[S',a],M[N',a]存在多重定义入口,不满足 LL(1)文法