original_string: protected function parseTree()
      {
          $string = $this->string;
          if (empty($string)) {
              return array();
          }
          $tree = array();
          $i = 0;
          $length = strlen($string);
          $isBackslash = false;
          $operand = '';
          while ($i <= $length) {
              $char = $string[$i];
  
              $isAND = ($char == self::AND_DELIMITER);
              $isOR = ($char == self::OR_DELIMITER);
              $isEnd = ($length == $i + 1);
  
              if ($isEnd) {
                  if ($isBackslash && ($isAND || $isOR)) {
                      $operand = substr($operand, 0, -1);
                  }
                  $operand .= $char;
                  $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_END, self::INDEX_OPERAND => $operand);
                  break;
              }
  
              if ($isAND && !$isBackslash) {
                  $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_AND, self::INDEX_OPERAND => $operand);
                  $operand = '';
              } elseif ($isOR && !$isBackslash) {
                  $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_OR, self::INDEX_OPERAND => $operand);
                  $operand = '';
              } else {
                  if ($isBackslash && ($isAND || $isOR)) {
                      $operand = substr($operand, 0, -1);
                  }
                  $operand .= $char;
              }
              $isBackslash = ($char == "\\");
              $i++;
          }
          return $tree;
      }
code: protected function parseTree()
      {
          $string = $this->string;
          if (empty($string)) {
              return array();
          }
          $tree = array();
          $i = 0;
          $length = strlen($string);
          $isBackslash = false;
          $operand = '';
          while ($i <= $length) {
              $char = $string[$i];
  
              $isAND = ($char == self::AND_DELIMITER);
              $isOR = ($char == self::OR_DELIMITER);
              $isEnd = ($length == $i + 1);
  
              if ($isEnd) {
                  if ($isBackslash && ($isAND || $isOR)) {
                      $operand = substr($operand, 0, -1);
                  }
                  $operand .= $char;
                  $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_END, self::INDEX_OPERAND => $operand);
                  break;
              }
  
              if ($isAND && !$isBackslash) {
                  $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_AND, self::INDEX_OPERAND => $operand);
                  $operand = '';
              } elseif ($isOR && !$isBackslash) {
                  $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_OR, self::INDEX_OPERAND => $operand);
                  $operand = '';
              } else {
                  if ($isBackslash && ($isAND || $isOR)) {
                      $operand = substr($operand, 0, -1);
                  }
                  $operand .= $char;
              }
              $isBackslash = ($char == "\\");
              $i++;
          }
          return $tree;
      }
code_tokens: protected function parseTree ( ) { $ string = $ this -> string ; if ( empty ( $ string ) ) { return array ( ) ; } $ tree = array ( ) ; $ i = 0 ; $ length = strlen ( $ string ) ; $ isBackslash = false ; $ operand = '' ; while ( $ i <= $ length ) { $ char = $ string [ $ i ] ; $ isAND = ( $ char == self :: AND_DELIMITER ) ; $ isOR = ( $ char == self :: OR_DELIMITER ) ; $ isEnd = ( $ length == $ i + 1 ) ; if ( $ isEnd ) { if ( $ isBackslash && ( $ isAND || $ isOR ) ) { $ operand = substr ( $ operand , 0 , - 1 ) ; } $ operand .= $ char ; $ tree [ ] = array ( self :: INDEX_BOOL_OPERATOR => self :: BOOL_OPERATOR_END , self :: INDEX_OPERAND => $ operand ) ; break ; } if ( $ isAND && ! $ isBackslash ) { $ tree [ ] = array ( self :: INDEX_BOOL_OPERATOR => self :: BOOL_OPERATOR_AND , self :: INDEX_OPERAND => $ operand ) ; $ operand = '' ; } elseif ( $ isOR && ! $ isBackslash ) { $ tree [ ] = array ( self :: INDEX_BOOL_OPERATOR => self :: BOOL_OPERATOR_OR , self :: INDEX_OPERAND => $ operand ) ; $ operand = '' ; } else { if ( $ isBackslash && ( $ isAND || $ isOR ) ) { $ operand = substr ( $ operand , 0 , - 1 ) ; } $ operand .= $ char ; } $ isBackslash = ( $ char == "\\" ) ; $ i ++ ; } return $ tree ; }
docstring: Given a filter string,
  will parse it into an array where each row contains the boolean operator applied to it,
  and the operand
  
  @return array
docstring_tokens: Given a filter string will parse it into an array where each row contains the boolean operator applied to it and the operand