举例说明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 |
# |
# |
接受 |