如何找到FIRST和FOLLOW的递归语法集?

时间:2017-11-11 15:06:08

标签: parsing compiler-construction

假设我有以下CFG:

  

S-> AACD | BcAe

     

A-> b | EPSILON

     

B-> cf | d

     

C-> FE

现在我在CFG上应用FIRST规则:

  

FIRST(S)= FIRST(aAcd)U FIRST(BcAe)

     

= {a} U FIRST(BcAe)

     

= {a} U FIRST(B) - {EPSILON} U FIRST(cAe)

     

= {a} U FIRST(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规则:

  

请(S)= {$}

     

请(A)= {C,E}

     

请(B)= {C}

     

请(C)= {F}

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

1 个答案:

答案 0 :(得分:2)

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

Grammer:

  

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}

关于应用关注规则:

  

请(S)= {$}

     

跟随(A)=第一(C)U第一(e)= {f,e}

     

请(B)= {C}

     

请(C)= {$}

     

请(d)= {$}