Exemple #1
0
 /**
  * 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;
 }