scriptbox

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

DslOperation.class.php (1511B)


      1 <?php
      2 
      3 namespace dsl\ast;
      4 
      5 use dsl\DslParserException;
      6 use dsl\DslRuntimeException;
      7 use dsl\DslToken;
      8 
      9 class DslOperation implements DslStatement
     10 {
     11 	private $operator;
     12 	private $left;
     13 	private $right;
     14 
     15 	/**
     16 	 * DslOperation constructor.
     17 	 * @param $operator
     18 	 * @param $left
     19 	 * @param $right
     20 	 */
     21 	public function __construct($operator, $left, $right)
     22 	{
     23 		$this->operator = $operator;
     24 		$this->left  = new DslExpression(  $left );
     25 		$this->right = new DslExpression( $right );
     26 	}
     27 
     28 
     29 	/**
     30 	 * @throws DslRuntimeException
     31 	 */
     32 	public function execute(& $context ) {
     33 
     34 		$left  = $this->left->execute( $context );
     35 		$right = $this->right->execute( $context );
     36 
     37 		switch( $this->operator ) {
     38 			case '+':
     39 				if   ( is_string($left)  )
     40 					return $left . (string)$right;
     41 				else
     42 					return intval($left) + intval($right);
     43 
     44 			case '-':
     45 				return intval($left) - intval($right);
     46 
     47 			case '*':
     48 				return $left * $right;
     49 
     50 			case '/':
     51 				return $left / $right;
     52 
     53 			case '==':
     54 				return $left == $right;
     55 			case '!=':
     56 				return $left != $right;
     57 			case '<':
     58 				return $left < $right;
     59 			case '<=':
     60 				return $left <= $right;
     61 			case '>':
     62 				return $left > $right;
     63 			case '>=':
     64 				return $left >= $right;
     65 
     66 			case '||':
     67 				return $left || $right;
     68 			case '&&':
     69 				return $left && $right;
     70 
     71 			case '%':
     72 				return $left % $right;
     73 
     74 			case '!':
     75 				return ! $left;
     76 
     77 			default:
     78 				throw new DslRuntimeException('Unknown operator \''.$this->operator.'\'');
     79 		}
     80 
     81 	}
     82 
     83 
     84 	public function parse($tokens)
     85 	{
     86 	}
     87 }