public function compile(Compiler $compiler)
 {
     $arguments = array();
     foreach ($this->nodes['arguments']->nodes as $node) {
         $arguments[] = $compiler->subcompile($node);
     }
     $function = $compiler->getFunction($this->attributes['name']);
     $compiler->raw(call_user_func_array($function['compiler'], $arguments));
 }
 protected function compileArguments(Compiler $compiler, $withKeys = true)
 {
     $first = true;
     foreach ($this->getKeyValuePairs() as $pair) {
         if (!$first) {
             $compiler->raw(', ');
         }
         $first = false;
         if ($withKeys) {
             $compiler->compile($pair['key'])->raw(' => ');
         }
         $compiler->compile($pair['value']);
     }
 }
 public function compile(Compiler $compiler)
 {
     switch ($this->attributes['type']) {
         case self::PROPERTY_CALL:
             $compiler->compile($this->nodes['node'])->raw('->')->raw($this->nodes['attribute']->attributes['value']);
             break;
         case self::METHOD_CALL:
             $compiler->compile($this->nodes['node'])->raw('->')->raw($this->nodes['attribute']->attributes['value'])->raw('(')->compile($this->nodes['arguments'])->raw(')');
             break;
         case self::ARRAY_CALL:
             $compiler->compile($this->nodes['node'])->raw('[')->compile($this->nodes['attribute'])->raw(']');
             break;
     }
 }
 public function compile(Compiler $compiler)
 {
     $operator = $this->attributes['operator'];
     if ('matches' == $operator) {
         $compiler->raw('preg_match(')->compile($this->nodes['right'])->raw(', ')->compile($this->nodes['left'])->raw(')');
         return;
     }
     if (isset(self::$functions[$operator])) {
         $compiler->raw(sprintf('%s(', self::$functions[$operator]))->compile($this->nodes['left'])->raw(', ')->compile($this->nodes['right'])->raw(')');
         return;
     }
     if (isset(self::$operators[$operator])) {
         $operator = self::$operators[$operator];
     }
     $compiler->raw('(')->compile($this->nodes['left'])->raw(' ')->raw($operator)->raw(' ')->compile($this->nodes['right'])->raw(')');
 }
 public function compile(Compiler $compiler)
 {
     $compiler->raw('((')->compile($this->nodes['expr1'])->raw(') ? (')->compile($this->nodes['expr2'])->raw(') : (')->compile($this->nodes['expr3'])->raw('))');
 }
 public function compile(Compiler $compiler)
 {
     $compiler->raw('$' . $this->attributes['name']);
 }
 public function compile(Compiler $compiler)
 {
     $compiler->repr($this->attributes['value']);
 }
 public function compile(Compiler $compiler)
 {
     $compiler->raw('(')->raw(self::$operators[$this->attributes['operator']])->compile($this->nodes['node'])->raw(')');
 }