resolve darcs stupidity
[org.ibex.core.git] / src / gnu / regexp / REToken.java
1 /*
2  *  gnu/regexp/REToken.java
3  *  Copyright (C) 1998-2001 Wes Biggs
4  *
5  *  This library is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU Lesser General Public License as published
7  *  by the Free Software Foundation; either version 2.1 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Lesser General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Lesser General Public License
16  *  along with this program; if not, write to the Free Software
17  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */
19
20 package gnu.regexp;
21 import java.io.Serializable;
22
23 abstract class REToken implements Serializable {
24
25   protected REToken next = null;
26   protected REToken uncle = null;
27   protected int subIndex;
28
29   protected REToken(int subIndex) {
30       this.subIndex = subIndex;
31   }
32
33   int getMinimumLength() {
34     return 0;
35   }
36
37   void setUncle(REToken anUncle) {
38     uncle = anUncle;
39   }
40
41     /** Returns true if the match succeeded, false if it failed. */
42     abstract boolean match(CharIndexed input, REMatch mymatch);
43   
44     /** Returns true if the rest of the tokens match, false if they fail. */
45     protected boolean next(CharIndexed input, REMatch mymatch) {
46         if (next == null) {
47             if (uncle == null) {
48                 return true;
49             } else {
50                 return uncle.match(input, mymatch);
51             }
52         } else {
53             return next.match(input, mymatch);
54         }
55     }
56   
57   boolean chain(REToken token) {
58       next = token;
59       return true; // Token was accepted
60   }
61
62     abstract void dump(StringBuffer os);
63
64   void dumpAll(StringBuffer os) {
65     dump(os);
66     if (next != null) next.dumpAll(os);
67   }
68 }