## ノードのmerge [next集約](12.next集約の実行.md)を行うと同じ規則で複数の遷移先ができてしまう。 同じ規則での遷移先はただ一つにしたいため、同じ規則の遷移先をマージする。 マージすると構文規則、遷移先が合わさったものになる。 ``` ノード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の遷移を追加 ```