预测分析法实验报告
下面是你输入的文法G:
非终结符号集合为:{ A, B, C, D, Z }
终结符符号集合为:{ a, b, c, d }
G[Z]:
A->cD
B->bC
C->@
C->BcA
D->aBD
D->d
Z->aAcB
Z->Bd
可以推出空串的非终结符集合为:{ C }
非终结符号的FIRST集合:
FIRST(A) = { c }
FIRST(B) = { b }
FIRST(C) = { @, b }
FIRST(D) = { a, d }
FIRST(Z) = { a, b }
非终结符号的FOLLOW集合:
FOLLOW(A) = { c, a, d, # }
FOLLOW(B) = { c, a, d, # }
FOLLOW(C) = { c, a, d, # }
FOLLOW(D) = { c, a, d, # }
FOLLOW(Z) = { # }
各产生式的SELECT集合:
SELECT(A->cD) = { c }
SELECT(B->bC) = { b }
SELECT(C->@) = { @, c, a, d, # }
SELECT(C->BcA) = { b }
SELECT(D->aBD) = { a }
SELECT(D->d) = { d }
SELECT(Z->aAcB) = { a }
SELECT(Z->Bd) = { b }
输入的文法是一个LL(1)文法。
下面是生成的预测分析表:
|
a |
b |
c |
d |
# |
A |
|
|
cD |
|
|
B |
|
bC |
|
|
|
C |
@ |
BcA |
@ |
@ |
@ |
D |
aBD |
|
|
d |
|
Z |
aAcB |
Bd |
|
|
|
例如:对符号串acabdcb#的分析过程:
步骤 |
分析栈 |
剩余输入串 |
所用产生式 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
#Z
#BcAa
#BcA
#BcDc
#BcD
#BcDBa
#BcDB
#BcDCb
#BcDC
#BcD
#Bcd
#Bc
#B
#Cb
#C
# |
acabdcb#
acabdcb#
cabdcb#
cabdcb#
abdcb#
abdcb#
bdcb#
bdcb#
dcb#
dcb#
dcb#
cb#
b#
b#
#
# |
Z->aAcB
a匹配
A->cD
c匹配
D->aBD
a匹配
B->bC
b匹配
C->@
D->d
d匹配
c匹配
B->bC
b匹配
C->@
接受 | 
|