0

我正在做一个练习来为语法创建 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 是真正的“epsilon”,这是我为 X 设置的第一个答案:

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

但给出的答案是:

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

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

4

1 回答 1

0

我不明白怎么then可能在FOLLOW(X)。我得到和你一样的答案。

then在该语法中唯一可以放在前面的是 aE并且E不能以 . 结尾L。此外,FOLLOW(E)包括dothen,所以如果跟随集包括FOLLOW(E) 它必须包括这两个标记。

于 2014-05-06T15:30:06.487 回答