2014-05-06 40 views
0

我正在做一个练习来为语法创建FIRST和FOLLOW集。我认为我所做的是正确的,但答案与我的略有不同。所以需要某人的帮助来验证这一点。谢谢。 语法是:有人可以验证以下FIRST和FOLLOW集是否正确?

P -> L 
    L -> I X 
    X -> ; L | EPSILON 
    I -> A | C | W 
    A -> id := E 
    C -> if E then L O endif 
    O -> else L | EPSILON 
    W -> while E do L end 
    E -> E2 R 
    R -> Op1 E2 R | EPSILON 
    E2 -> T S 
    S -> Op2 E2 | EPSILON 
    T -> c | id 
    Op1 -> < | = | != 
    Op2 -> + | - 

EPSILON是真正的 '小量' 这里是我的回答对X第一组:

FIRST(; L) = {;} 
    FOLLOW(X) = {$, else, end, endif} 

但给出的答案是:

FIRST(; L) = {;} 
    FOLLOW(X) = {$, else, end, endif, then} 

有人可以验证哪一个是正确答案吗?谢谢:)

回答

0

我看不到then可能在FOLLOW(X)。我得到了和你一样的答案。

该语法中唯一可以排在then之前的是EE不能以L结尾。此外,FOLLOW(E)包括do以及then,所以如果一个跟随包括FOLLOW(E)它将不得不包括这两个令牌。

+0

谢谢你的回复:) – terk

相关问题