举例说明LL(1)文法的预测分析,以及对(a,a)#的分析过程
文法G[S]
S->a
S->^
S->(T)
T->SN
N->,SN
N->#
| 是否=># | First集 | Follow集 |
S | 否 | {a,^,(} | {#, ’,’ , ) } |
T | 否 | {a,^,(} | { ) } |
N | 是 | {‘,’ , #} | { ) } |
Select(S->a) = {a}
Select(S->^) ={^}
Select(S->(T)) ={ ( }
Select(T->SN) = {a,^,(}
Select(N->,SN)={ , }
Select(N->#) ={ ) }
以上first,follow,select以及LL(1)文法的判断,推导过程可以在博主的另外一篇博客看见:点击打开链接
预测分析表为:
| a | ^ | ( | ) | , | # |
S | a | ^ | (T) |
|
|
|
T | SN | SN | SN |
|
|
|
N |
|
|
| N-># | ,SN |
|
以下是对输入串(a,a)#的分析过程:
步骤 | 分析栈 | 剩余输入串 | 推导所用产生式 |
1 | #S | (a,a)# | S->(T) |
2 | #)T( | (a,a)# | ( 匹配 |
3 | #)T | a,a)# | T->SN |
4 | #)NS | a,a)# | S->a |
5 | #)Na | a,a)# | a匹配 |
6 | #)N | ,a)# | N->,SN |
7 | #)NS, | ,a)# | ,匹配 |
8 | #)NS | a)# | S->a |
9 | #)Na | a)# | a匹配 |
10 | #)N | )# | N-># |
11 | #) | )# | )匹配 |
12 | # | # | 接受 |