离散数学——FIRST集,FOLLOW集和SELECT集的通俗求法

离散数学——FIRST集,FOLLOW集和SELECT集的通俗求法

FIRST集合
  • 添加终结符以及空字

若X∈ε,则ε∈FIRST(X)
若X=a…,若a∈VT,则a∈FIRST(X);

  • 添加非终结符——后加前,first集
    若有表达式α->X1X2…Xn,Xi为非终结符

<1>将FIRST(X1)中的一切非ε的终结符加进FIRST(α);
<2>若ε∈FIRST(X1),则将FIRST(X2)中的一切非ε的终结符加进FIRST(α);
<3>若ε∈FIRST(X1)且ε∈FIRST(X2),则将FIRST(X3)中的一切非ε的终结符加进FIRST(α);
<4>依此类推,若对于一切1≤i≤n,ε∈FIRST(Xi),则将ε加进FIRST(α)。

FOLLOW集合——FOLLOW集没有空字
  • 文法的开始符号,添加“$”符进入FOLLOW(S)中
  • 若B→aAb(b≠ε),则把FIRST(b)-{ε}加入FOLLOW(A)中;
  • 若B→aA 或B→aAb,且b=>*ε 则把FOLLOW(B)加入FOLLOW(A) 中,前加后,FOLLOW,前为子集。b为空字
SELECT集合
  • 对于产生式A—>α。集合select(A—>α)定义如下:
  • 若α不能推出ε,则select(A—>α) = first(α)。不包含空字,就是右部首字母的FIRST集。
  • 若α能推出ε,则select(A—>α)= {first(α)-{ε}}∪ follow(A)。包含空字,就是A的FOLLOW和右部首终结符的FIEST集(去除空字)
LL1文法判别

所有具有相同左部的SELECT集交集是空集,才是LL1文法

你可能感兴趣的:(离散数学——FIRST集,FOLLOW集和SELECT集的通俗求法)