module dlex.Rule.SelectRule;

import dlex.Rule;

class SelectRule : Rule {
    public:
	Rule[] rules;

	this (Rule[] rules) {
	    this.rules = rules;
	}

	override MatchResult match(dstring source, ref Position pos) {
	    foreach (rule; rules) {
		auto prevPos = pos;
		auto result = rule.matched(source, pos);
		if (result) {
		    return result;
		}
		pos = prevPos;
	    }
	    return null;
	}
}