2014-05-06 72 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

相關問題