/**
  * @inheritDoc
  */
 public function parse(TokenStream $tokenStream)
 {
     $token = $tokenStream->getCurrent();
     if ($tokenStream->nextIf(Token::T_FALSE)) {
         return false;
     } elseif ($tokenStream->nextIf(Token::T_TRUE)) {
         return true;
     } elseif ($tokenStream->nextIf(Token::T_NULL)) {
         return null;
     } elseif ($tokenStream->nextIf(Token::T_DATE)) {
         return new \DateTime($token->getValue());
     } elseif ($tokenStream->nextIf(Token::T_STRING)) {
         return $token->getValue();
     } elseif ($tokenStream->nextIf(Token::T_INTEGER)) {
         return (int) $token->getValue();
     } elseif ($tokenStream->nextIf(Token::T_FLOAT)) {
         return (double) $token->getValue();
     }
     throw new SyntaxErrorException(sprintf('Invalid scalar token "%s" (%s)', $token->getValue(), $token->getName()));
 }