REMatch newMatch = null; REMatch last = null;
REMatch.REMatchList newMatch = new REMatch.REMatchList();
    private boolean matchP(CharIndexed input, REMatch mymatch) {    REMatch newMatch = null;    REMatch last = null;    REToken tk;    for (int i=0; i < options.size(); i++) {	// In ordaer that the backtracking can work,	// each option must be chained to the next token.	// But the chain method has some side effect, so	// we use clones.	tk = (REToken)((REToken) options.elementAt(i)).clone();	tk.chain(this.next);	tk.setUncle(this.uncle);	tk.subIndex = this.subIndex;	REMatch tryMatch = (REMatch) mymatch.clone();	if (tk.match(input, tryMatch)) { // match was successful		if (last == null) {		    newMatch = tryMatch;		    last = tryMatch;		} else {		    last.next = tryMatch;		    last = tryMatch;		}	} // is a match    } // try next option    if (newMatch != null) {	    // set contents of mymatch equal to newMatch	    // try each one that matched	    mymatch.assignFrom(newMatch);	    return true;	} else {	    return false;	}    }