Program: 79714
Project: 79714
Buggy source:
public static Filter parseString(String string) throws Filter.FilterException {
  String regexStripped=stripRegex(string);
  Matcher bracketMatcher=bracketsPattern.matcher(regexStripped);
  if (bracketMatcher.matches()) {
    Filter group;
    boolean inverted="String_Node_Str".equals(bracketMatcher.group(2));
    int startBracket=regexStripped.indexOf("String_Node_Str");
    int endBracket=getBracketMatch(regexStripped,startBracket);
    group=parseString(string.substring(startBracket + 1,endBracket));
    group.inverted=inverted;
    Pattern leftCompound=Pattern.compile("String_Node_Str");
    Pattern rightCompound=Pattern.compile("String_Node_Str");
    String left=string.substring(0,startBracket);
    String right=string.substring(endBracket + 1,regexStripped.length());
    Matcher leftMatcher=leftCompound.matcher(left);
    Matcher rightMatcher=rightCompound.matcher(right);
    if (leftMatcher.matches()) {
      group=new CompoundFilter(parseString(leftMatcher.group(1)),leftMatcher.group(2),group);
    }
    if (rightMatcher.matches()) {
      group=new CompoundFilter(group,rightMatcher.group(2),parseString(rightMatcher.group(3)));
    }
    return group;
  }
 else {
    Matcher compoundMatcher=compoundPattern.matcher(string);
    if (compoundMatcher.matches()) {
      return new CompoundFilter(compoundMatcher.group(1),compoundMatcher.group(2),compoundMatcher.group(3));
    }
 else {
      Pattern operation=Pattern.compile("String_Node_Str");
      Matcher operationMatcher=operation.matcher(string);
      if (operationMatcher.matches()) {
        return new Filter(operationMatcher.group(1).trim(),operationMatcher.group(2),operationMatcher.group(3).trim());
      }
    }
  }
  throw new Filter.FilterException("String_Node_Str");
}

Fixed version (ground truth):
public static Filter parseString(String string) throws Filter.FilterException {
  String regexStripped=stripRegex(string);
  Matcher bracketMatcher=bracketsPattern.matcher(regexStripped);
  if (bracketMatcher.matches()) {
    Filter group;
    boolean inverted="String_Node_Str".equals(bracketMatcher.group(2));
    int startBracket=regexStripped.indexOf("String_Node_Str");
    int endBracket=getBracketMatch(regexStripped,startBracket);
    group=parseString(string.substring(startBracket + 1,endBracket));
    group.inverted=inverted;
    Pattern leftCompound=Pattern.compile("String_Node_Str");
    Pattern rightCompound=Pattern.compile("String_Node_Str");
    String left=string.substring(0,startBracket);
    String right=string.substring(endBracket + 1,regexStripped.length());
    Matcher leftMatcher=leftCompound.matcher(left);
    Matcher rightMatcher=rightCompound.matcher(right);
    if (leftMatcher.matches()) {
      group=new CompoundFilter(parseString(leftMatcher.group(1)),leftMatcher.group(2),group);
    }
    if (rightMatcher.matches()) {
      group=new CompoundFilter(group,rightMatcher.group(2),parseString(rightMatcher.group(3)));
    }
    return group;
  }
 else {
    Matcher compoundMatcher=compoundPattern.matcher(regexStripped);
    if (compoundMatcher.matches()) {
      return new CompoundFilter(compoundMatcher.group(1),compoundMatcher.group(2),compoundMatcher.group(3));
    }
 else {
      Pattern operation=Pattern.compile("String_Node_Str");
      Matcher operationMatcher=operation.matcher(regexStripped);
      if (operationMatcher.matches()) {
        String left=string.substring(0,operationMatcher.group(1).length()).trim();
        String right=string.substring(operationMatcher.group(1).length() + operationMatcher.group(2).length()).trim();
        return new Filter(left,operationMatcher.group(2),right);
      }
    }
  }
  throw new Filter.FilterException("String_Node_Str");
}