自上而下解析 - 首先和跟随

时间:2012-01-28 04:47:11

标签: parsing grammar context-free-grammar

我有以下语法,我正在努力学习如何先做并遵循。我想我有第一个正确的。但是,由于非终结符C,FOLLOW会引起混淆。

这是语法:

S --> ABC
A --> a | Cb |ε 
B --> C | dA | ε
C --> e | f

对于FIRST:

First(S) = First(A)-{ε} + First(C) = { a,f, e, ε}
First(B) = First(C) = {d,e,f,ε}

对于FOLLOW:

Follow(S) = {ε}
Follow(A) = First(B)-{ε} + First(C) = {a,e,f}
Follow(B) = Follow(C) = Follow(S) = { $}
Follow(C) = Follow(B) = Follow(S) = {b, $}

我遇到问题,因为生产A和B中有两个C? 我接近这个吗?

2 个答案:

答案 0 :(得分:0)

我认为First已经错了。

由于A和B是可选的,而C首先是非空的:

First(S) = First(A) + First(B) + First(C) - {ε}
First(A) = {a} + First(C) + {ε}
First(B) = First(C) + {d, ε}
First(C) = {e, f}

=>

First(A) = {a, e, f, ε}
First(B) = {d, e, f, ε}

=>

First(S) = {a, d, e, f}

首先出现后是nt, 最后遵循规则。

Follow(S) = {$}
Follow(A) = First(B) - {ε} + Follow(B) = {d, e, f}
Follow(B) = First(C) = {e, f}
Follow(C) = Follow(S) + Follow(B) + {b} = {b, e, f, $}

(我希望我做对了。)


详细信息:

Follow(S) = {$}            [Start rule]

Follow(A) = First(B) - {ε} [S --> A.BC]
          + First(C)       [S --> AB.C as B or First(B) contains ε]
          + Follow(B)      [B. --> C | dA. | ε]

Follow(B) = First(C)       [S --> AB.C as C does not contain ε stops]

Follow(C) = Follow(S)      [S. --> ABC.]
          + {b}            [A --> a | C.b |ε]
          + Follow(B)      [B. --> C. | dA | ε]

LHS上的点,如X. - > ...结果跟随(S);

RHS上的点像...... - > ...... .X ......导致第一(X) - {ε} 虽然X有ε-产生,但继续:... - > ...... X. ......

请注意,这些是“我的”规则,您的书可能会使用稍微不同的代数。

答案 1 :(得分:0)

我正在回答以下语法。由于第一次已经正确回答。

follow(S) = {$};
follow(A) = {$,d,e,f};
follow(B) = {$,e,f};
follow(C) = {$,b,e,f};

在A,B和C中包含'$'的原因是。如果有生产A --->语法中的ABC,其中C可以为空,那么Follow(A)中的所有内容都将遵循(B)。