code: static Relation getRelation(String s, String arg,
                                Function<String,String> basicCatFunction,
                                HeadFinder headFinder)
      throws ParseException
    {
      if (arg == null) {
        return getRelation(s, basicCatFunction, headFinder);
      }
      Relation r;
      if (s.equals("<")) {
        r = new HasIthChild(Integer.parseInt(arg));
      } else if (s.equals(">")) {
        r = new IthChildOf(Integer.parseInt(arg));
      } else if (s.equals("<+")) {
        r = new UnbrokenCategoryDominates(arg, basicCatFunction);
      } else if (s.equals(">+")) {
        r = new UnbrokenCategoryIsDominatedBy(arg, basicCatFunction);
      } else if (s.equals(".+")) {
        r = new UnbrokenCategoryPrecedes(arg, basicCatFunction);
      } else if (s.equals(",+")) {
        r = new UnbrokenCategoryFollows(arg, basicCatFunction);
      } else {
        throw new ParseException("Unrecognized compound relation " + s + ' '
            + arg);
      }
      return Interner.globalIntern(r);
    }
docs: Static factory method for relations requiring an argument, including
  HAS_ITH_CHILD, ITH_CHILD_OF, UNBROKEN_CATEGORY_DOMINATES,
  UNBROKEN_CATEGORY_DOMINATED_BY.
  
  @param s The String representation of the relation
  @param arg The argument to the relation, as a string; could be a node
  description or an integer
  @return The singleton static relation of the specified type with the
  specified argument. Uses Interner to insure singleton-ity
  @throws ParseException If bad relation s