예제 #1
0
 /**
  * Parses an optional statement or returns <b>null</b>.
  *
  * @return PHP_Depend_Code_ASTNode
  * @since 0.9.8
  */
 private function _parseOptionalStatement()
 {
     $tokenType = $this->_tokenizer->peek();
     switch ($tokenType) {
         case self::T_ECHO:
             return $this->_parseEchoStatement();
         case self::T_SWITCH:
             return $this->_parseSwitchStatement();
         case self::T_TRY:
             return $this->_parseTryStatement();
         case self::T_THROW:
             return $this->_parseThrowStatement();
         case self::T_IF:
             return $this->_parseIfStatement();
         case self::T_FOR:
             return $this->_parseForStatement();
         case self::T_FOREACH:
             return $this->_parseForeachStatement();
         case self::T_DO:
             return $this->_parseDoWhileStatement();
         case self::T_WHILE:
             return $this->_parseWhileStatement();
         case self::T_RETURN:
             return $this->_parseReturnStatement();
         case self::T_BREAK:
             return $this->_parseBreakStatement();
         case self::T_CONTINUE:
             return $this->_parseContinueStatement();
         case self::T_GOTO:
             return $this->_parseGotoStatement();
         case self::T_GLOBAL:
             return $this->_parseGlobalStatement();
         case self::T_UNSET:
             return $this->_parseUnsetStatement();
         case self::T_STRING:
             if ($this->_tokenizer->peekNext() === self::T_COLON) {
                 return $this->_parseLabelStatement();
             }
             break;
         case self::T_FUNCTION:
             return $this->_parseFunctionOrClosureDeclaration();
         case self::T_COMMENT:
             return $this->_parseCommentWithOptionalInlineClassOrInterfaceReference();
         case self::T_DOC_COMMENT:
             return $this->_builder->buildASTComment($this->_consumeToken(self::T_DOC_COMMENT)->image);
         case self::T_CURLY_BRACE_OPEN:
             return $this->_parseScopeStatement();
         case self::T_CURLY_BRACE_CLOSE:
             return null;
         case self::T_CLOSE_TAG:
             if (($tokenType = $this->_parseNonePhpCode()) === self::T_EOF) {
                 return null;
             }
             return $this->_parseOptionalStatement();
     }
     $this->_tokenStack->push();
     $stmt = $this->_builder->buildASTStatement();
     if (($expr = $this->_parseOptionalExpression()) != null) {
         $stmt->addChild($expr);
     }
     $this->_parseStatementTermination();
     return $this->_setNodePositionsAndReturn($stmt);
 }