如何找到递归语法的FIRST和FOLLOW集?
假设我有以下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}
有什么不对吗?如果不对,请告诉我该怎么做。
你上面的工作(问题)表明你不擅长基本概念。所以你可以使用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)= {$}
随意问你的疑惑。 – Billa
FOLLOW(C)如何变为$但使用FIRST AND FOLLOW规则我得到C遵循f @Billa –
“我做完了我的功课吗?”与堆栈溢出不匹配。如果你有一个关于算法的具体问题,你可以试着问一下,尽管这样的问题很可能不在SO的范围内,因为它与编程很少或者没有关系。 – rici
@SourodipKundu这是错的。它不是答案。 – Billa
@SourodipKundu请检查生产是否与我的问题相同。并且由于'C'在生产体S-> aACD中,'FOLLOW(C)'是'FIRST(D)'。由于'FIRST(D)'是'EPSILON',所以'EPSILON'替代'S-> aACD'中的'D'。所以它变成'S-> aAC'然后取'FOLLOW(C)',然后变成'FOLLOW(S)'这是'$'。我认为你缺乏基础知识,请参考我在答案中提出的视频。 – Billa