next集約の実行 🔗
作成したノードとfirst集合を元に、next集約を実行する。
next集約とは次の規則が非終端記号であればfirst集合と現在のノードの状態を集約する操作となる。
ノード0 : $ACCEPT : . start $END
↓ 次の規則がstartであるためstartのfirst集合を集約
ノード0 :
$ACCEPT : . start $END
start : . FIRST SECOND THIRD
first集合は複数ある場合があり、全てを集約する。
stmt : expr
expr : left '+' right
| left '-' right
↓
ノードN : stmt : . expr
↓ 次の規則がexprであるためexprのfirst集合を集約
ノードN :
stmt : . expr
expr : . left '+' right
expr : . left '-' right
next集約は次の疑似コードで表す。
これを集約ができなくなるまで全てのノードに対し行う。
foreach (node in ノード集合)
if (nodeの次の規則がfirst集合であれば)
nodeへfirst集合[nodeの次の規則]を集約