protected Rule exec(Iterator<Rule> rules) {

		int len = 0;
		Rule matched = null;
		Rule rule = null;
		while (rules.hasNext()) {
			rule = rules.next();
			Matcher m = rule.matcher;
			m.region(m_offset, m_end);
			boolean succ = m.lookingAt();
			if (succ && len <= m.group().length()) {
				matched = rule;
				len = m.group().length();
			}
		}

		if (matched == null)
			return null;

		m_value = matched.matcher;
		m_rule = matched;
		setOffset(matched.matcher.end());

		matched.action(this);
		defaultAction();

		return matched;
	}