code: final int getMinLength() {
  		switch (this.type) {
  		case CONCAT:
  			int sum = 0;
  			for (int i = 0; i < this.size(); i++)
  				sum += this.getChild(i).getMinLength();
  			return sum;
  
  		case CONDITION:
  		case UNION:
  			if (this.size() == 0)
  				return 0;
  			int ret = this.getChild(0).getMinLength();
  			for (int i = 1; i < this.size(); i++) {
  				int min = this.getChild(i).getMinLength();
  				if (min < ret)
  					ret = min;
  			}
  			return ret;
  
  		case CLOSURE:
  		case NONGREEDYCLOSURE:
  			if (this.getMin() >= 0)
  				return this.getMin() * this.getChild(0).getMinLength();
  			return 0;
  
  		case EMPTY:
  		case ANCHOR:
  			return 0;
  
  		case DOT:
  		case CHAR:
  		case RANGE:
  		case NRANGE:
  			return 1;
  
  		case INDEPENDENT:
  		case PAREN:
  		case MODIFIERGROUP:
  			return this.getChild(0).getMinLength();
  
  		case BACKREFERENCE:
  			return 0; // *******
  
  		case STRING:
  			return this.getString().length();
  
  		case LOOKAHEAD:
  		case NEGATIVELOOKAHEAD:
  		case LOOKBEHIND:
  		case NEGATIVELOOKBEHIND:
  			return 0; // ***** Really?
  
  		default:
  			throw new RuntimeException("Token#getMinLength(): Invalid Type: "
  					+ this.type);
  		}
  	}
docs: How many characters are needed?