docs: @Override
    public int setOptionFlag(String[] args, int i) {
      // [CDM 2008: there are no generic options!] first, see if it's a generic option
      // int j = super.setOptionFlag(args, i);
      // if(i != j) return j;
  
      //lang. specific options
      if (args[i].equalsIgnoreCase("-splitIN")) {
        englishTrain.splitIN = Integer.parseInt(args[i + 1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitPercent")) {
        englishTrain.splitPercent = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-splitQuotes")) {
        englishTrain.splitQuotes = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-splitSFP")) {
        englishTrain.splitSFP = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-splitNNP")) {
        englishTrain.splitNNP = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-rbGPA")) {
        englishTrain.tagRBGPA = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-splitTRJJ")) {
        englishTrain.splitTRJJ = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-splitJJCOMP")) {
        englishTrain.splitJJCOMP = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-splitMoreLess")) {
        englishTrain.splitMoreLess = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-unaryDT")) {
        englishTrain.unaryDT = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-unaryRB")) {
        englishTrain.unaryRB = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-unaryIN")) {
        englishTrain.unaryIN = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-markReflexivePRP")) {
        englishTrain.markReflexivePRP = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-splitCC") && i + 1 < args.length) {
        englishTrain.splitCC = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitRB")) {
        englishTrain.splitRB = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-splitAux") && i+1 < args.length) {
        englishTrain.splitAux = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitSbar") && i+1 < args.length) {
        englishTrain.splitSbar = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitVP") && i + 1 < args.length) {
        englishTrain.splitVP = Integer.parseInt(args[i + 1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitVPNPAgr")) {
        englishTrain.splitVPNPAgr = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-gpaRootVP")) {
        englishTrain.gpaRootVP = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-makePPTOintoIN")) {
        englishTrain.makePPTOintoIN = Integer.parseInt(args[i + 1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitSTag")) {
        englishTrain.splitSTag = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitSGapped") && (i + 1 < args.length)) {
        englishTrain.splitSGapped = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitNPpercent") && (i+1 < args.length)) {
        englishTrain.splitNPpercent = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitNPPRP")) {
        englishTrain.splitNPPRP = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-dominatesV") && (i+1 < args.length)) {
        englishTrain.dominatesV = Integer.parseInt(args[i + 1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-dominatesI")) {
        englishTrain.dominatesI = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-dominatesC")) {
        englishTrain.dominatesC = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-splitNPNNP") && (i+1 < args.length)) {
        englishTrain.splitNPNNP = Integer.parseInt(args[i + 1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitTMP") && (i + 1 < args.length)) {
        englishTrain.splitTMP = Integer.parseInt(args[i + 1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitNPADV") && (i+1 < args.length)) {
        englishTrain.splitNPADV = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-markContainedVP")) {
        englishTrain.markContainedVP = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-markDitransV") && (i+1 < args.length)) {
        englishTrain.markDitransV = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-splitPoss") && (i+1 < args.length)) {
        englishTrain.splitPoss = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-baseNP") && (i+1 < args.length)) {
        englishTrain.splitBaseNP = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-joinNounTags")) {
        englishTrain.joinNounTags = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-correctTags")) {
        englishTrain.correctTags = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-noCorrectTags")) {
        englishTrain.correctTags = false;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-markCC") && (i + 1 < args.length)) {
        englishTrain.markCC = Integer.parseInt(args[i+1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-noAnnotations")) {
        englishTrain.splitVP = 0;
        englishTrain.splitTMP = NPTmpRetainingTreeNormalizer.TEMPORAL_NONE;
        englishTrain.splitSGapped = 0;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-retainNPTMPSubcategories")) {
        englishTest.retainNPTMPSubcategories = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-retainTMPSubcategories")) {
        englishTest.retainTMPSubcategories = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-retainADVSubcategories")) {
        englishTest.retainADVSubcategories = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-leaveItAll") && (i + 1 < args.length)) {
        englishTrain.leaveItAll = Integer.parseInt(args[i + 1]);
        i += 2;
      } else if (args[i].equalsIgnoreCase("-headFinder") && (i + 1 < args.length)) {
        // At present need to do this manually at train _and_ test time;
        // it's not serialized
        try {
          headFinder = (HeadFinder) Class.forName(args[i + 1]).newInstance();
        } catch (Exception e) {
          System.err.println(e);
          System.err.println("Warning: Default HeadFinder will be used.");
        }
        i += 2;
      } else if (args[i].equalsIgnoreCase("-makeCopulaHead")) {
        englishTest.makeCopulaHead = true;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-acl03pcfg")) {
        englishTrain.splitIN = 3;
        englishTrain.splitPercent = true;
        englishTrain.splitPoss = 1;
        englishTrain.splitCC = 2;
        englishTrain.unaryDT = true;
        englishTrain.unaryRB = true;
        englishTrain.splitAux = 1;
        englishTrain.splitVP = 2;
        englishTrain.splitSGapped = 3;
        englishTrain.dominatesV = 1;
        englishTrain.splitTMP = NPTmpRetainingTreeNormalizer.TEMPORAL_ACL03PCFG;
        englishTrain.splitBaseNP = 1;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-jenny")) {
        englishTrain.splitIN = 3;
        englishTrain.splitPercent = true;
        englishTrain.splitPoss = 1;
        englishTrain.splitCC = 2;
        englishTrain.unaryDT = true;
        englishTrain.unaryRB = true;
        englishTrain.splitAux = 1;
        englishTrain.splitVP = 2;
        englishTrain.splitSGapped = 3;
        englishTrain.dominatesV = 1;
        englishTrain.splitTMP = NPTmpRetainingTreeNormalizer.TEMPORAL_ACL03PCFG;
        englishTrain.splitBaseNP = 1;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-linguisticPCFG")) {
        englishTrain.splitIN = 3;
        englishTrain.splitPercent = true;
        englishTrain.splitPoss = 1;
        englishTrain.splitCC = 2;
        englishTrain.unaryDT = true;
        englishTrain.unaryRB = true;
        englishTrain.splitAux = 2;
        englishTrain.splitVP = 3;
        englishTrain.splitSGapped = 4;
        englishTrain.dominatesV = 0;  // not for linguistic
        englishTrain.splitTMP = NPTmpRetainingTreeNormalizer.TEMPORAL_ACL03PCFG;
        englishTrain.splitBaseNP = 1;
        englishTrain.splitMoreLess = true;
        englishTrain.correctTags = true;  // different from acl03pcfg
        i += 1;
      } else if (args[i].equalsIgnoreCase("-goodPCFG")) {
        englishTrain.splitIN = 4;  // different from acl03pcfg
        englishTrain.splitPercent = true;
        englishTrain.splitNPpercent = 0;  // no longer different from acl03pcfg
        englishTrain.splitPoss = 1;
        englishTrain.splitCC = 1;
        englishTrain.unaryDT = true;
        englishTrain.unaryRB = true;
        englishTrain.splitAux = 2;   // different from acl03pcfg
        englishTrain.splitVP = 3;   // different from acl03pcfg
        englishTrain.splitSGapped = 4;
        englishTrain.dominatesV = 1;
        englishTrain.splitTMP = NPTmpRetainingTreeNormalizer.TEMPORAL_ACL03PCFG;
        englishTrain.splitNPADV = 1; // different from acl03pcfg
        englishTrain.splitBaseNP = 1;
        // englishTrain.splitMoreLess = true;   // different from acl03pcfg
        englishTrain.correctTags = true;  // different from acl03pcfg
        englishTrain.markDitransV = 2; // different from acl03pcfg
        i += 1;
      } else if (args[i].equalsIgnoreCase("-ijcai03")) {
        englishTrain.splitIN = 3;
        englishTrain.splitPercent = true;
        englishTrain.splitPoss = 1;
        englishTrain.splitCC = 2;
        englishTrain.unaryDT = false;
        englishTrain.unaryRB = false;
        englishTrain.splitAux = 0;
        englishTrain.splitVP = 2;
        englishTrain.splitSGapped = 4;
        englishTrain.dominatesV = 0;
        englishTrain.splitTMP = NPTmpRetainingTreeNormalizer.TEMPORAL_ACL03PCFG;
        englishTrain.splitBaseNP = 1;
        i += 1;
      } else if (args[i].equalsIgnoreCase("-goodFactored")) {
        englishTrain.splitIN = 3;
        englishTrain.splitPercent = true;
        englishTrain.splitPoss = 1;
        englishTrain.splitCC = 2;
        englishTrain.unaryDT = false;
        englishTrain.unaryRB = false;
        englishTrain.splitAux = 0;
        englishTrain.splitVP = 3;  // different from ijcai03
        englishTrain.splitSGapped = 4;
        englishTrain.dominatesV = 0;
        englishTrain.splitTMP = NPTmpRetainingTreeNormalizer.TEMPORAL_ACL03PCFG;
        englishTrain.splitBaseNP = 1;
        // BAD!! englishTrain.markCC = 1;  // different from ijcai03
        englishTrain.correctTags = true;  // different from ijcai03
        i += 1;
      }
      return i;
    }