Parsed: 122798

    public function execute( $n ) {
      $stack = array();
      $i     = 0;
      $total = count( $this->tokens );
      while ( $i < $total ) {
        $next = $this->tokens[ $i ];
        ++$i;
        if ( 'var' === $next[0] ) {
          $stack[] = $n;
          continue;
        } elseif ( 'value' === $next[0] ) {
          $stack[] = $next[1];
          continue;
        }

        // Only operators left.
        switch ( $next[1] ) {
          case '%':
            $v2      = array_pop( $stack );
            $v1      = array_pop( $stack );
            $stack[] = $v1 % $v2;
            break;

          case '||':
            $v2      = array_pop( $stack );
            $v1      = array_pop( $stack );
            $stack[] = $v1 || $v2;
            break;

          case '&&':
            $v2      = array_pop( $stack );
            $v1      = array_pop( $stack );
            $stack[] = $v1 && $v2;
            break;

          case '<':
            $v2      = array_pop( $stack );
            $v1      = array_pop( $stack );
            $stack[] = $v1 < $v2;
            break;

          case '<=':
            $v2      = array_pop( $stack );
            $v1      = array_pop( $stack );
            $stack[] = $v1 <= $v2;
            break;

          case '>':
            $v2      = array_pop( $stack );
            $v1      = array_pop( $stack );
            $stack[] = $v1 > $v2;
            break;

          case '>=':
            $v2      = array_pop( $stack );
            $v1      = array_pop( $stack );
            $stack[] = $v1 >= $v2;
            break;

          case '!=':
            $v2      = array_pop( $stack );
            $v1      = array_pop( $stack );
            $stack[] = $v1 != $v2;
            break;

          case '==':
            $v2      = array_pop( $stack );
            $v1      = array_pop( $stack );
            $stack[] = $v1 == $v2;
            break;

          case '?:':
            $v3      = array_pop( $stack );
            $v2      = array_pop( $stack );
            $v1      = array_pop( $stack );
            $stack[] = $v1 ? $v2 : $v3;
            break;

          default:
            throw new Exception( sprintf( 'Unknown operator "%s"', $next[1] ) );
        }
      }

      if ( count( $stack ) !== 1 ) {
        throw new Exception( 'Too many values remaining on the stack' );
      }

      return (int) $stack[0];
    }