docs: private boolean iterate(Production production) {
  	List<Construction> constructions = production.getConstructions();
  	boolean changed = false;
  	/*
  	 * Search production for non-terminals...
  	 */
  	for (int i = 0; i < constructions.size(); i++) {
  	    Construction construction = constructions.get(i);
  	    if (construction.isTerminal()) {
  		continue;
  	    }
  	    Set<Terminal> followSet = follow.get(construction.getName());
  	    if (followSet == null) {
  		continue;
  	    }
  	    int startSize = followSet.size();
  	    /*
  	     * For the found non-terminal find the following constructions by first sets.
  	     */
  	    if (i < constructions.size() - 1) {
  		for (int j = i + 1; j < constructions.size(); j++) {
  		    Construction followingConstruction = constructions.get(j);
  		    Set<Terminal> firstSet = first.get(followingConstruction);
  		    if (firstSet == null) {
  			continue;
  		    }
  		    for (Terminal follower : firstSet) {
  			if (!follower.equals(EmptyTerminal.getInstance())) {
  			    followSet.add(follower);
  			}
  		    }
  		    if (!firstSet.contains(EmptyTerminal.getInstance())) {
  			break;
  		    }
  		    if (j == constructions.size() - 1) {
  			followSet.addAll(follow.get(production.getName()));
  		    }
  		}
  	    } else {
  		followSet.addAll(follow.get(production.getName()));
  	    }
  	    if (startSize < followSet.size()) {
  		changed = true;
  	    }
  	}
  	return changed;
      }