private function _switch() {
    $node = new SwitchNode();
    $this->mustMatch(T_SWITCH, $node);
    $this->condition($node, 'switchOn');
    if ($this->tryMatch(':', $node, 'openColon')) {
      $this->tryMatch(';', $node);
      while ($this->currentType !== NULL && $this->currentType !== T_ENDSWITCH) {
        $node->addChild($this->caseStatement(T_ENDSWITCH));
        $this->matchHidden($node);
      }
      $this->mustMatch(T_ENDSWITCH, $node, 'endKeyword');
      $this->endStatement($node);
      return $node;
    }
    else {
      $this->mustMatch('{', $node);
      $this->tryMatch(';', $node);
      while ($this->currentType !== NULL && $this->currentType !== '}') {
        $node->addChild($this->caseStatement('}'));
        $this->matchHidden($node);
      }
      $this->mustMatch('}', $node, NULL, TRUE);
      return $node;
    }
  }