/** * Merge recursively. * Please, see self::mergeTree() to know the context. * * @param \Hoa\Compiler\Llk\TreeNode $node Node that receives. * @param \Hoa\Compiler\Llk\TreeNode $newNode Node to merge. * @return void */ protected function mergeTreeRecursive(TreeNode $node, TreeNode $newNode) { $nNId = $newNode->getId(); if ('token' === $nNId) { $node->appendChild($newNode); $newNode->setParent($node); return; } $children = $node->getChildren(); end($children); $last = current($children); if ($last->getId() !== $nNId) { $node->appendChild($newNode); $newNode->setParent($node); return; } foreach ($newNode->getChildren() as $child) { $this->mergeTreeRecursive($last, $child); } return; }