ノードのmerge 🔗
next集約を行うと同じ規則で複数の遷移先ができてしまう。
同じ規則での遷移先はただ一つにしたいため、同じ規則の遷移先をマージする。
マージすると構文規則、遷移先が合わさったものになる。
ノードN :
stmt : . expr
expr : . left '+' right # 次の記号がleftならノードXに遷移
expr : . left '-' right # 次の記号がleftならノードYに遷移
↓ leftの遷移先をマージ
ノードN :
stmt : . expr
expr : . left '+' right # 次の記号がleftならノードMに遷移
expr : . left '-' right
ノードM :
expr : left . '+' right
expr : left . '-' right
ノードのマージは次の疑似コードで表す。
これをマージができなくなるまで全てのノードに対し行う。
foreach (node in ノード集合)
if (nodeに同じ記号の遷移先が2つ以上あれば)
merge = nodeの同じ記号の遷移先をマージ
nodeから同じ記号の遷移先を削除
nodeに新たなmergeの遷移を追加