public SymbolSet first(List<Symbol> l, int start) {
		SymbolSet result = newSymbolSet();
		
		Symbol s = null;
		SymbolSet fs = null;
		for (int i = start; i < l.size(); i++) {
			s = l.get(i);
			if (s instanceof NonTerminal) {
				if (AmbiDexterConfig.nonTerminalLookahead) {
					result.add(s); // add nonterminals to lookahead
				}
				fs = first.get(s);
				result.addAll(fs); // might add empty but we remove it below
				if (!fs.contains(empty)) {
					break;
				}
			} else { // Terminal or CharClass
				result.add(s);
				break;
			}
		}
		
		if (s == null || (s instanceof NonTerminal && fs.contains(empty))) {
			result.add(empty);
		} else {
			result.remove(empty);
		}
		
		return result;
	}