Ejemplo n.º 1
0
 /**
  * Parse unary operator (- ,not)
  * 
  * @return AbstractExpression
  */
 private function _parseUnary()
 {
     $this->_recurseEnter();
     if ($this->_getCurrentToken()->Id == ExpressionTokenId::MINUS || $this->_getCurrentToken()->identifierIs(ODataConstants::KEYWORD_NOT)) {
         $op = clone $this->_getCurrentToken();
         $this->_lexer->nextToken();
         if ($op->Id == ExpressionTokenId::MINUS && ExpressionLexer::isNumeric($this->_getCurrentToken()->Id)) {
             $numberLiteral = $this->_getCurrentToken();
             $numberLiteral->Text = '-' . $numberLiteral->Text;
             $numberLiteral->Position = $op->Position;
             $v = $this->_getCurrentToken();
             $this->_setCurrentToken($numberLiteral);
             $this->_recurseLeave();
             return $this->_parsePrimary();
         }
         $expr = $this->_parsePrimary();
         FunctionDescription::validateUnaryOpArguments($op, $expr);
         if ($op->Id == ExpressionTokenId::MINUS) {
             $expr = new UnaryExpression($expr, ExpressionType::NEGATE, $expr->getType());
         } else {
             $expr = new UnaryExpression($expr, ExpressionType::NOT_LOGICAL, new Boolean());
         }
         $this->_recurseLeave();
         return $expr;
     }
     $this->_recurseLeave();
     return $this->_parsePrimary();
 }