離散數學——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文法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章