给定文法S->S+S|SS|(S)|S*|a,计算该文法的first和follow集
时间: 2023-10-24 22:07:15 浏览: 144
first集和follow集的计算
5星 · 资源好评率100%
首先,我们需要明确文法中的非终结符和终结符。
其中,非终结符为S,终结符为+、(、)、*、a。
接下来,我们分别计算该文法的First集和Follow集。
First集的计算步骤如下:
1. 如果X是一个终结符,则First(X)={X}。
2. 如果S->ε是一个产生式,则ε∈First(S)。
3. 如果S->X1X2...Xk是一个产生式,则对于i=1,2,...,k,将First(Xi)中所有非ε符号加入到First(S)中,如果ε∈First(X1),First(X2),...,First(Xi-1),则将First(Xi)中的所有符号(包括ε)加入到First(S)中。
4. 重复步骤3,直到没有新的符号可以加入到First(S)中。
根据上述步骤,我们可以计算出该文法的First集如下:
First(S)={ (, a, * }
接下来,计算Follow集的步骤如下:
1. 对于文法的开始符号S,将$加入到Follow(S)中。
2. 对于每一个产生式A->αBβ,将First(β)中除ε以外的符号加入到Follow(B)中。
3. 对于每一个产生式A->αB或A->αBβ,并且ε∈First(β),将Follow(A)加入到Follow(B)中。
4. 重复步骤2和步骤3,直到没有新的符号可以加入到Follow集合中。
根据上述步骤,我们可以计算出该文法的Follow集如下:
Follow(S)={ $, ) }
Follow(S')={ +, ), $ }
Follow(F)={ +, ), $, * }
Follow(T)={ +, ), $, * }
Follow(P)={ +, ), $, * }
其中,S'为对S的增广文法,F、T、P为文法中的非终结符。
阅读全文