E --> TE'
E' --> +TE'|ε
T --> FT'
T ' --> *FT'|ε
F --> ( E ) | id
1) first(F)={ (, id }
因为
F
的两个产生式以
"(""id"开头
2) first(E)=first(T)=first(F)={ (, id }
因为
E
的产生式为
TE',
故
first(E)=first(T)
3) first(E')={ +,ε }
因为
E'
的产生式体以
+
开头
,
和
ε
开头
4) first(T)=first(F)={ (, id }
因为
T
只有一个产生式
,
而该产生式的体以
F
开头
,
又因为
F
不能推倒出
ε,
所以
first(T)
与
first(F)
必然相同.
5) first(T')={ *, ε }
因为
T'
的产生体以
"*"
和
"ε"
开头
6) follow(E) = { ), $}.
因为F --> ( E ) | id 在
E
的右边是 “)’,
又因为
E
为开始符号
,
所以后面一定是
”$”
7) Follow(E’) = { ), $ }
因为
follow(E’)
等于
follow(E),
因为产生式E --> TE'
8) Follow(T) = { +, ), $}
因为产生式E --> TE'推导出
T
的后面是
E’,first(E’)={+,ε},
所以
follow(T)==follow(E’)
除了ε
9) Follow(T’) = Follow(T) = { +, ), $ }
因为
T’只出现在
T
的产生式的尾部
,
因此必然有
follow(T’)==follow(T)
10) Follow(F) = { *, +, ), $ }
因为产生式T --> FT',
说明
first(T’)={*,ε},
这个因为存在ε所以
follow(F)==follow(T’)