follow集的存在还是为了计算first集,如果没有空字符ε的存在,那么follow集是没有必要的。
S → AB
A → a | ε
B → b
这种情况下,B的first集一定是b;
但如果B可以推导出ε
S → AB
A → a | ε
B → b | ε
那么B推导完可能直接消失了,这就需要看看在B后面可能跟着什么,而因为B为空,所以B后面跟着的东西实际上是B的前一个非终结符后面跟着的东西。
在上面这个例子中,因为B可能为空,所以有可能S→AB→A
,所以要看看A后面可能跟着啥。这里A后面跟着结束符$
,所以first(B)
应该含有结束符$
。
X -> aY | aZ
Y -> b
Z -> c
变成
X -> aX'
X'-> Y | Z
Y -> b
Z -> c
作者:码鸽
链接:https://code-pigeon.github.io/blog/html/【编译原理笔记】.html
版权声明:博客所有原创内容(包括但不限于文章、图像等)除特别声明外,均采用CC BY-NC-SA 4.0国际许可协议。任何人均可自由传播,但禁止用于商业用途且必须署名并以相同方式分享。