private function assertChildrenCount(TreeNode $node, $count)
 {
     if ($node->getChildrenNumber() !== $count) {
         throw new Exception(sprintf('Node was expected to have only %s children.', $count));
     }
 }
Exemple #2
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;
 }
 private function leftRotateTree(TreeNode &$root)
 {
     // Pivot = Root.Left
     $pivot = $root->getChild(1);
     // Root.Right = Pivot.Left
     $children = $root->getChildren();
     $children[1] = $pivot->getChild(0);
     // Pivot, rotation side
     $root->setChildren($children);
     // Pivot.Left = Root
     $children = $pivot->getChildren();
     $children[0] = $root;
     $pivot->setChildren($children);
     // Root = Pivot
     $root = $pivot;
 }