Yanp

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の次の規則]を集約