public void printNonTerminalUsage(IAmbiDexterMonitor monitor) {
		Map<Symbol, Integer> usage = new ShareableHashMap<Symbol, Integer>();
		for (Production p : productions) {
			if (p.reachable) {
				for (int i = 0; i < p.getLength(); i++) {
					Symbol s = p.getSymbolAt(i);
					if (s instanceof NonTerminal) {
						Integer u = usage.get(s);
						if (u == null) {
							usage.put(s, 1);
						} else {
							usage.put(s, u + 1);
						}
					}
				}
			}
		}

		Relation<Integer, Symbol> inv = new Relation<Integer, Symbol>();
		for (Entry<Symbol, Integer> e : usage.entrySet()) {
			inv.add(e.getValue(), e.getKey());
		}
		
		Object nrs[] = inv.domain().toArray();
		Arrays.sort(nrs);
		for (int i = nrs.length - 1; i >= 0; i--) {
			int nr = (Integer) nrs[i];
			for (Symbol s : inv.get(nr)) {
				monitor.println("" + s + ": " + nr);
			}
		}
	}