/** * 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); }