若FIRST(Y)包含ε,则继续查看X产生式右边的下一个符号(如果存在),将其FIRST集中的非ε元素加入FIRST(X),直到没有非终结符能推导出ε或到达产生式末尾。FOLLOW集求法 FOLLOW集表示一个非终结符可能跟随的终结符集合(包括可能的识别符号#,通常用于句子的结束)。 开始符号的FOLLOW集: 对于文法的开始符号S,通常将...
对于A的出现来说:有S→bAS,规则②将FIRST( S )除ε以外加入进去,由于S存在空字符ε,规则③将FOLLOW( S )加入进去;有A→bAA,规则②将FIRST( A )除ε以外加入进去。 对于B的出现来说:有S→aBS,规则②将FIRST( S )除ε以外加入进去,由于S存在空字符ε,规则③将FOLLOW( S )加入进去;有B→aBB,规则②将...
FIRST(α)={a | αaβ,a∈VT,α,β∈V *}。 若αε,ε∈FIRST(α)。 由定义可以看出,FIRST(α)是指符号串α能够推导出的所有符号串中处于串首的终结符号组成的集合。所以FIRST集也称为首符号集。 设α=x1x2…xn,FIRST(α)可按下列方法求得: 令FIRST(α)=Φ,i=1; 若xi∈VT,则xi∈FIRST(α)...
1. 在所要求的字符产生式的右边的第一位寻找终结符,假设该字符产生式集的第一位就是终结符,那么该终结符就是所要求的first集;2. 假设产生式的右边第一位是非终结符,那么继续寻找该非终结符的first集,直至寻找到一个终结符,即是起初所要求字符的first集;Follow集的计算就相对first集稍微难一点:follow集...
first=FirstSet(nts,ts)print(first) FOLLOW 集 既然FIRST 集是某个非终结符展开后,可能出现在第一位的所有终结符的集合,那么 FOLLOW 集就是当这个非终结符被规约之后,可以紧跟在它后面的终结符的集合。还是以上面的那个文法为例,因为 c 和 d 都可以在若干终结符被规约成“C”之后出现,所以 c 和 d 都在...
刚学first集和follow集的时候,如果上课老师没有讲明白或者自己没听明白,自己看的时候还真是有点难理解,不过结合着具体的题目可以理解的更快。 先看一下两种集合的求法: First集合的求法: First集合最终是对产生式右部的字符串而言的,但其关键是求出非终结符的First集合,由于终结符的First集合就是它自己,所以求...
这里,First(β)表示β能推导出的第一个终结符或非终结符的集合,但要去掉ε。 如果β可以推导出ε,则将FOLLOW(A)加至FOLLOW(B)中。这意味着,如果B有可能是最后一个符号,那么A的FOLLOW集合应该加入到B的FOLLOW集合中。 反复使用上述规则,直到所求FOLLOW集合不再增大为止。 以上是对FIRST集合和FOLLOW集合求法的...
FIRST集合的求解 参考:【编译原理】大白话讲解 First 集和 Follow 集的构造算法 - bw98 - 博客园 (cnblogs.com) 假设我们要求非终结符A的FIRST集合。分以下几种情况: 最简单的情况,A->b,b是终结符。那么FIRST(A)={b}。即终结符的FIRST集合是它本身。
1.1 串首终结符集 定义: 给定一个文法符号串α,α的串首终结符集FIRST(α)被定义为可以从α推导出的所有串首终结符构成的集合。 串首终结符意思就是符号串的首字符是终结符,所以由α推导出的所有首字母是终结符的文法符号串,这些终结符首字母组成的集合就是FIRST(α)。
对于B,根据B->dB',其first集为:first(B) = {d}。因为d直接出现在B的最左侧,所以不需要考虑B'的first集。对于B',根据B'->bB'|ε,其first集为:first(B') = {b,ε}。因为b和ε直接出现在B'的最左侧,所以不需要考虑B'的first集。然后,我们计算follow集:对于S',其follow集为:...