2017-11-11 52 views
0

假设我有以下CFG:如何找到递归语法的FIRST和FOLLOW集?

S-> AACD | BcAe

A-> B | EPSILON

B-> cf | d

C-> FE

现在我敷在CFG的第一个规则:

FIRST(S)= FIRST(AACD)U FIRST(BcAe)

= {A} U FIRST(BcAe)

= {A} U FIRST(B) - {EPSILON} U FIRST(CAE)

= {A} U FI RST(B) - {EPSILON} U {C}

= {A} U FIRST(CF)U FIRST(d) - {EPSILON} U {C}

= {A,F,d, C,EPSILON}

FIRST(A)= FIRST(b)U FIRST(EPSILON)= = {b,EPSILON}

FIRST(b)= FIRST(CF)U FIRST(d)= {d中,f}

FIRST(C)= FIRST(FE)= {F}

现在我申请对CFG的FOLLOW规则:

FOLLOW(S)= {$}

FOLLOW(A)= {C,E}

FOLLOW(B)= {C}

FOLLOW(C)= {f}

有什么不对吗?如果不对,请告诉我该怎么做。

+0

“我做完了我的功课吗?”与堆栈溢出不匹配。如果你有一个关于算法的具体问题,你可以试着问一下,尽管这样的问题很可能不在SO的范围内,因为它与编程很少或者没有关系。 – rici

+0

@SourodipKundu这是错的。它不是答案。 – Billa

+0

@SourodipKundu请检查生产是否与我的问题相同。并且由于'C'在生产体S-> aACD中,'FOLLOW(C)'是'FIRST(D)'。由于'FIRST(D)'是'EPSILON',所以'EPSILON'替代'S-> aACD'中的'D'。所以它变成'S-> aAC'然后取'FOLLOW(C)',然后变成'FOLLOW(S)'这是'$'。我认为你缺乏基础知识,请参考我在答案中提出的视频。 – Billa

回答

2

你上面的工作(问题)表明你不擅长基本概念。所以你可以使用this tutorial

格拉默:

S-> AACD | BcAe

A-> B | EPSILON

B-> cf | d

C-> FE

没有产生装置EPSILON所以,

D-> EPSILON

在施加第一规则:

FIRST( A)= FIRST(b)U FIRST(EPSILON)= = {b,EPSILON}

FIRST(B)= FIRST(CF)U FIRST(d)= {C} U {d} = {C,d}

FIRST(C)= FIRST(FE)= {F}

FIRST(d)= {EPSILON}

FIRST(S)= FIRST(AACD)U FIRST(BcAe)

= {A} U FIRST(BcAe)

= {A} U FIRST(B)

= {a} U {c,d}

= {A,C,d}

上涂布后续规则:

FOLLOW(S)= {$}

FOLLOW(A)= FIRST(C) U第(E)= {F,E}

FOLLOW(B)= {C}

FOLLOW(C)= {$}

关注(D)= {$}

+0

随意问你的疑惑。 – Billa

+0

FOLLOW(C)如何变为$但使用FIRST AND FOLLOW规则我得到C遵循f @Billa –