构建First集
- 求First集步骤
首先,对所有非终结符A, 先设定FIRST(A)= {} (空)
FIRST(A) = { t | A → tw },t为终结符,w为任意类型
然后, 对每一个产生式A → Bw, B为终结符,循环以下步骤(递归)
- FIRST(A) = FIRST(A) ∪FIRST(B)
- 当FIRST 集合不再发生变化时,算法终止.
- 产生式如下
E → TE’
E’ → +TE’ | ε
T → FT’
T’ → *FT’ | ε
F → (E) | id
- 求First集详细步骤:
- 第一步填表:
E | E’ | T | T’ | F |
---|---|---|---|---|
First(T) | + | First(F) | * | ( |
ε | ε | id |
- 开始递归填表:
E | E’ | T | T’ | F |
---|---|---|---|---|
( | + | ( | * | ( |
id | ε | id | ε | id |
-
插入一个注意事项
-
-
若是如下产生式:
-
-
注意到
A → Da
,因为D能产生ε
,所以First(Da) = {b,a} -
所以First(A) = {ε,a,b}
-
同理可得First表格
-
构建Follow集
-
求Follow集步骤
-
产生式如下
(1)E → TE’
(2)E’ → +TE’ | ε
(3)T → FT’
(4)T’ → *FT’ | ε
(5)F → (E) | id
-
上面求得的First表如下:
-
E E’ T T’ F ( + ( * ( id ε id ε id -
求Follow集步骤
-
Follow(E)= {$}(结束符)
-
(1)E → TE'
可以看成:E → εTE'
、E → TE'ε
-
由
E → εTE'
可分析:- Follow(T)= First(E’)- {ε},又因为ε属于First(E’),所以Follow(T)并入Follow(E);
-
由
E → TE'ε
可分析:- First(ε) = {ε}
- Follow(E‘) = First(ε) - {ε} = {}(空集),又因为ε属于First(ε),所以Follow(E’)并入Follow(E)
-
第一次填表得:
-
E E’ T T’ F $ Follow(E) First(E’)- {ε} Follow(E) -
(2)E' → +TE' | ε
可以看成E' → +TE'
、E' → +TE'ε
: -
由
E' → +TE'
分析得:- 只能求得Follow(T) = First(E’)- {ε},又因为ε属于First(E’),所以Follow(T)并入Follow(E’)
-
由
E' → +TE'ε
分析得:- Follow(E’) = First(ε) - {ε} = {}(空集),又因为ε属于First(ε),所以Follow(E’)并入Follow(E’),
相当于没有
, - 注:递归自己直接不填表,不然程序陷入死递归。
- Follow(E’) = First(ε) - {ε} = {}(空集),又因为ε属于First(ε),所以Follow(E’)并入Follow(E’),
-
第二次填表得:
-
注:重复的不写
-
E E’ T T’ F $ Follow(E) First(E’)- {ε} Follow(E) Follow(E’) -
后面分析省略,只写出填表步骤,每次分析一条产生式填一次表:
-
分析
(3)T → FT'
,第三次填表: -
E E’ T T’ F $ Follow(E) First(E’)- {ε} Follow(T) First(T’) - {ε} Follow(E) Follow(T) Follow(E’) -
分析
(4)T' → *FT' | ε
,第四次填表: -
E E’ T T’ F $ Follow(E) First(E’)- {ε} Follow(T) First(T’) - {ε} Follow(E) Follow(T) Follow(E’) Follow(T’) -
分析
(5)F → (E) | id
,第五次填表: -
E E’ T T’ F $ Follow(E) First(E’)- {ε} Follow(T) First(T’) - {ε} ) Follow(E) Follow(T) Follow(E’) Follow(T’) -
开始递归,最后完成表格:
-
首先引用
First
表 -
E E’ T T’ F ( + ( * ( id ε id ε id
-
递归调表
Follow
表结果 -
E E’ T T’ F $ ) + + * ) $ ) ) + $ $ ) $
-