编译器构造 - 遵循一组语法

Compiler Construction - Follow set of a grammar

我有以下语法

E -> TX
X -> +E
     |epsilon
T -> intY
     | (E)
Y -> *T
     | epsilon

下面的 Follow 集对上面的语法是否正确?

   E = {$, )}
   X = {$, )}
   T = {int, (, $}
   Y = {int, (, $}

第一

First(E) -> {int, (}
First(X) -> {+, epl}
First(T) -> {int, (}
First(Y) -> {*, epl}

关注

Follow(E) -> {$, )}
Follow(X) -> {Follow(E)}
Follow(T) -> {First(X) - epl, Follow(E)} -> {+, $, )} 
Follow(Y) -> {Follow(T)}

为什么在关注(T) 中关注(E)?因为 First(X) 有 epsilon -> 这给了我们 E -> T 生产

对于以下语法:

E -> TX

X -> +E |epsilon

T -> intY| (E)

Y -> *T| epsilon

正在计算集合的第一个

FIRST(E) = FIRST(T) - epsilon U FIRST(X)

={int, (, +, epsilon }

FIRST(X) = FIRST(+E) - epsilon U epsilon

={+, epsilon}

FIRST(T) = FIRST(intY) - epsilon U FIRST( (E) )

={int, ( }

FIRST(Y) = FIRST(*T) - epsilon U epsilon

={*, epsilon}

正在计算FOLLOW集合

Follow(E) -> {$,)}

Follow(X) -> {$,)}

Follow(T) -> {+,$,)}

Follow(Y) -> {+,$,)}