code: private MemoEntry eval(String productionName, int position, int line) throws ParserException, TreeException {
  	MemoEntry maxProgress = MemoEntry.failed();
  	for (Production production : grammar.getProductions().get(productionName)) {
  	    MemoEntry progress = parseProduction(production, position, line);
  	    if (progress.getAnswer() instanceof ParseTreeNode) {
  		if ((maxProgress.getAnswer() == Status.FAILED)
  			|| (maxProgress.getDeltaPosition() < progress.getDeltaPosition())) {
  		    maxProgress = progress;
  		}
  	    }
  	}
  	return maxProgress;
      }
docs: This method evaluates the production given by it's name. The different
  choices are tried from the first to the last. The first choice matching is
  returned.
  
  <b><i>Attention:</i></b> There was a test to introduce a parse where the
  alternative with the largest progress is returned. <b>This does not work!</b>
  During the parsing of a succeeding alternative a lot of states are changed on
  the way. By trying another alternative, the parser gets confused by some
  inconsistent information.
  
  @param productionName
  is the name of the production to be evaluated.
  @param position
  is the position within the stream to evaluate the production at.
  @return A MemoEntry object is returned containing the result.
  @throws ParserException
  @throws TreeException