docs: private Action validate(Token token, Term term) {
  
  		if (token == null) {
  			return Action.OVER;
  		}
  
  		int[] range = token.getRange();
  
  		if (_validate(token, term)) {
  			if (range != null && range[0] == 0) {
  				return Action.NEXT_TOKEN;
  			} else if (range != null && step >= range[0] && step <= range[1]) {
  				step = 0;
  				return Action.NEXT_TOKEN;
  			} else {
  				return Action.STOP;
  			}
  		}
  
  
  		if (range == null) {
  			insertInto(term, token.getIndex());
  			if (token.getNext() == null) {
  				return Action.OVER;
  			} else {
  				return Action.NEXT_TERM_TOKEN;
  			}
  		} else {
  			if (step < range[0]) {
  				step++;
  				insertInto(term, token.getIndex());
  				return Action.NEXT_TERM;
  			}
  
  			if (step > range[1]) {
  				return Action.STOP;
  			}
  
  			step++;
  			if (step > range[0]) {
  				if (_validate(token.getNext(), term)) {
  					insertInto(term, token.getIndex());
  					if (token.getNext() == null) {
  						if (step >= range[1]) {
  							return Action.OVER;
  						} else {
  							return Action.NEXT_TERM;
  						}
  					} else {
  						return Action.NEXT_TERM;
  					}
  				} else {
  					step = 0;
  					return Action.NEXT_TOKEN;
  				}
  			} else {
  				insertInto(term, token.getNext().getIndex());
  				return Action.NEXT_TERM;
  			}
  
  		}
  
  
  	}