求出每个非终结符的first集和follow集
时间: 2024-06-16 15:07:57 浏览: 223
在编译原理中,求解每个非终结符的First集和Follow集是语法分析中的重要步骤。下面是对这两个概念的介绍:
1. First集:对于文法中的每个非终结符,其First集包含了该非终结符能够推导出的终结符的集合。求解First集的方法如下:
- 如果X是一个终结符,则First(X) = {X}。
- 如果X是一个非终结符,则First(X)包含了所有可以从X推导出的终结符的集合。具体求解方法是:
- 对于每个产生式X -> Y1Y2...Yn,将First(Y1)中的所有终结符加入到First(X)中。
- 如果Y1可以推导出ε(空串),则将First(Y2)中的所有终结符加入到First(X)中。
- 重复上述步骤,直到没有新的终结符可以加入到First(X)中。
2. Follow集:对于文法中的每个非终结符,其Follow集包含了该非终结符可能紧跟在其后的终结符的集合。求解Follow集的方法如下:
- 对于文法的开始符号S,将$(结束标记)加入到Follow(S)中。
- 对于每个产生式A -> αBβ,将First(β)中除去ε(空串)的所有终结符加入到Follow(B)中。
- 如果存在产生式A -> αB或A -> αBβ,其中First(β)包含ε(空串),则将Follow(A)中的所有终结符加入到Follow(B)中。
相关问题
给出此文法每个非终结符的FIRST集和FOLLOW集: A→BAC|gDB|CC B→bCDE|ε C→DaB|ha D→dD|ε E→gAf|c
首先,我们需要计算出每个非终结符可以推导出的所有可能的首符号(FIRST集)。
对于A,它可以推导出BAC、gDB和CC,因此
FIRST(A) = {g, d, h}
对于B,它可以推导出bCDE或者ε,因此
FIRST(B) = {b, ε}
对于C,它可以推导出DaB或者ha,因此
FIRST(C) = {d, h}
对于D,它可以推导出dD或者ε,因此
FIRST(D) = {d, ε}
对于E,它可以推导出gAf或者c,因此
FIRST(E) = {g, c}
接下来,我们需要计算出每个非终结符可以跟随在其他符号后面的所有可能符号(FOLLOW集)。
对于A,它在开始符号的位置,因此$A$的FOLLOW集包含了输入串的结束标记$#$(假设#不在文法中)。另外,B在A的右边,因此当B出现在某个位置时,A的FOLLOW集也应该包括紧随B后面的符号。同样的,当C出现在位置中,A的FOLLOW集也应该包括C后面的符号。因此,
FOLLOW(A) = {#, b, h}
对于B,它只在A的右边出现,因此B的FOLLOW集只需要包含跟随在A后面的符号。因此,
FOLLOW(B) = {a, h, #}
对于C,它可以在A和D的右边出现,因此C的FOLLOW集应该包括紧随A和D后面的符号。因此,
FOLLOW(C) = {b, d, h, #}
对于D,它可以在C和E的右边出现,因此D的FOLLOW集应该包括紧随C和E后面的符号。因此,
FOLLOW(D) = {a, h, #}
对于E,它只在B的右边出现,因此E的FOLLOW集只需要包含跟随在B后面的符号。因此,
FOLLOW(E) = {d, h, #}
设文法G(S):S→(L)la Sla L→LbSIS 1.消除文法的左递归和回溯; 2.构造每个非终结符的FIRST集和FOLLOW集 3.构造LL(1)分析表
好的,我知道了。让我来回答你的问题:
1. 消除文法的左递归和回溯:
首先,我们需要消除文法中的左递归。为此,我们可以将文法中的S->(L)la替换成S->XP和P->(L)la。
然后,我们需要对文法进行回溯消除。为此,我们可以将文法中的L->LbSIS替换成L->YX和X->bSY和Y->IS。
这样,我们消除了文法中的左递归和回溯。新的文法如下:
S -> XP
P -> (L)la
X -> bSY | ε
Y -> IS | ε
L -> YX
2. 构造每个非终结符的FIRST集和FOLLOW集:
非终结符S的FIRST集为{ ( }
非终结符P的FIRST集为{ ( }
非终结符X的FIRST集为{ b, ε }
非终结符Y的FIRST集为{ I, ε }
非终结符L的FIRST集为{ I, b }
非终结符S的FOLLOW集为{ $ }
非终结符P的FOLLOW集为{ a, $ }
非终结符X的FOLLOW集为{ a, $ }
非终结符Y的FOLLOW集为{ b }
非终结符L的FOLLOW集为{ a, $ }
3. 构造LL(1)分析表:
( ) a b I l S $
S XP XP XP
P (L)la
X bSY ε ε bSY bSY ε
Y IS ε ε ε ε IS
L YX YX ε YX ε
最终的LL(1)分析表如上所示。
希望我的回答能帮到你!如果你还有其他问题,请继续提问。
阅读全文