public int tryNextToken(Symbol symbol) {
		int code = combinedPattern.recognise(symbol, 0);
		if (code == PATTERN_ENDED || code == TOKEN_APROVED) {
			PatternComponent lookup = combinedPattern.getLookUp();
			if (code == PATTERN_ENDED && lookup instanceof LanguagePattern) {
				LanguagePattern lp = (LanguagePattern) lookup;
				factory.addToAssembly(lp.fetchProduct());
			} else {
				factory.addToAssembly(symbol);
			}
			if (factory.hasEnded())
				return PATTERN_ENDED;
			return TOKEN_APROVED;
		} else {
			return TOKEN_ILLEGAL;
		}
	}