FIRST集
什么是FIRST集
FIRST(
α
\alpha
α)是从
α
\alpha
α推导出的串的起始终结符的集合。
FIRST(
α
\alpha
α) = {a |
α
⇒
∗
\alpha\Rightarrow^{*}
α⇒∗a…, a
∈
V
T
\in V_T
∈VT},
V
T
V_T
VT是终结符集合。
特殊情况:
α
⇒
∗
ε
\alpha\Rightarrow^{*}\varepsilon
α⇒∗ε时,规定
ε
∈
\varepsilon\in
ε∈ FIRST(
α
\alpha
α)。
怎么求FIRST集
- 若X → \rightarrow →a…, 则将终结符a加入FIRST(X)中;
- 若X → ε \rightarrow\varepsilon →ε,则将 ε \varepsilon ε加入FIRST(X)中;
- 若X → \rightarrow →Y…,且Y属于非终结符,则将FIRST(Y) − - −{ ε \varepsilon ε}加入到FIRST(X)中;
- 若X → Y 1 Y 2 . . . Y K \rightarrow Y_1Y_2...Y_K →Y1Y2...YK,且 Y 1 , Y 2 , . . Y i − 1 Y_1,Y_2,..Y_{i-1} Y1,Y2,..Yi−1 (2 ⩽ \leqslant ⩽i ⩽ \leqslant ⩽k)都是非终结符,且 Y 1 , Y 2 , . . . Y i − 1 Y_1,Y_2,...Y_{i-1} Y1,Y2,...Yi−1 的FIRST集合中均包含 ε \varepsilon ε,则将FIRST( Y j Y_j Yj)的所有非 ε \varepsilon ε元素加入到FIRST(X)中,(j=1,2,…i)。特别地,若 Y 1 Y_1 Y1~ Y K Y_K YK均有 ε \varepsilon ε产生式,则将 ε \varepsilon ε加到FIRST(X)中。
FISRT集中有 ε \varepsilon ε。
FOLLOW集
什么是FOLLOW集
FOLLOW(
α
\alpha
α)是在所有句型中紧跟在
α
\alpha
α后面的终结符集合。
FOLLOW(
α
\alpha
α) = {a | S
⇒
∗
\Rightarrow^{*}
⇒∗…Aa…,a
∈
V
T
\in V_T
∈VT},
V
T
V_T
VT是终结符集合。
特殊情况:如果A是某个句型的最右符号(S
⇒
∗
β
\Rightarrow^{*}\beta
⇒∗βA),那么$属于FOLLOW(A)。
怎么求FOLLOW集
- 对文法的开始符号S,将$加入到FOLLOW(S)中。
- 若有 A → α B β A\rightarrow\alpha B\beta A→αBβ,则将FIRST( β \beta β) − - −{ ε \varepsilon ε}加入到FOLLOW(B)中。 α \alpha α可以为空串。
- 若 A → α B A\rightarrow\alpha B A→αB或 A → α B β A\rightarrow\alpha B\beta A→αBβ,且 β ⇒ ∗ ε \beta\Rightarrow^{*}\varepsilon β⇒∗ε,则将 FOLLOW(A)加入FOLLOW(B)中。 α \alpha α可以为空串。
FOLLOW集中没有
ε
\varepsilon
ε。
安利一个求FISRT集和FOLLOW集的工具:Toolbox