FIRST(α)={a | αaβ,a∈VT,α,β∈V *}。 若αε,ε∈FIRST(α)。 由定义可以看出,FIRST(α)是指符号串α能够推导出的所有符号串中处于串首的终结符号组成的集合。所以FIRST集也称为首符号集。 设α=x1x2…xn,FIRST(α)可按下列方法求得: 令FIRST(α)=Φ,i=1; 若xi∈VT,则xi∈FIRST(α)...
若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,规则②将...
1. 在所要求的字符产生式的右边的第一位寻找终结符,假设该字符产生式集的第一位就是终结符,那么该终结符就是所要求的first集;2. 假设产生式的右边第一位是非终结符,那么继续寻找该非终结符的first集,直至寻找到一个终结符,即是起初所要求字符的first集;Follow集的计算就相对first集稍微难一点:follow集...
刚学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,如果 s 是推导表达式中的起始符号,也就是第一个表达式箭头左边的符号,那么 EOF(end of input)这个符号先加入 Follow(s)。 2,对于表达式 s -> … a b … ,其中 a 是非终结符,b 是终结符或非终结符,那么 First(b)属于 Follow(a)。 3,对于表达式 s -> … a b c … ,其中 a 是非终结符,b...
FIRST 集 FIRST 集和 FOLLOW 集的概念都很好理解。我们先来看 FIRST 集。 某个非终结符的 FIRST 集就是,当它被完全展开成一大串终结符之后,可能出现在第一位的所有终结符的集合。如果某个非终结符可能推出空串的话,那么空串也在它的 FIRST 集里。比如,对于下面这个文法: ...
例:A->αBC,FOLLOW(α)=FIRST(B)-{ε} 3.检查2.步骤中非终结符的FIRST集有无空字符(ε),若有则把下一个字符的进行同2.步骤的判断直至遇到终结符或者不含空符号的非终结符 5.重复上述步骤直到所有FOLLOW集都生成且不再变化 例: E→TE’ E’→+TE’ ...