01: /*
02: * 01/07/2003 - 15:19:32
03: *
04: * IState.java -
05: * Copyright (C) 2003 Buero fuer Softwarearchitektur GbR
06: * ralf.meyer@karneim.com
07: * http://jrexx.sf.net
08: *
09: * This program is free software; you can redistribute it and/or
10: * modify it under the terms of the GNU Lesser General Public License
11: * as published by the Free Software Foundation; either version 2
12: * of the License, or (at your option) any later version.
13: *
14: * This program is distributed in the hope that it will be useful,
15: * but WITHOUT ANY WARRANTY; without even the implied warranty of
16: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17: * GNU Lesser General Public License for more details.
18: *
19: * You should have received a copy of the GNU Lesser General Public License
20: * along with this program; if not, write to the Free Software
21: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22: */
23: package com.tc.jrexx.set;
24:
25: /**
26: * <CODE>IState</CODE> is the epsilon enclosure of one or more <CODE>{@link IStatePro}</CODE>.
27: * The epsilon enclosure of an <CODE>IStatePro</CODE> are the <CODE>IStatePro</CODE> itself
28: * and all states that are reachable through epsilon transitions (see {@link IStatePro.addTransition})
29: * beginning with that <CODE>IStatePro</CODE>.
30: * <BR>You can get an epsilon enclosure of an <CODE>IStatePro startState</CODE> manually by this code:
31: * <CODE>
32: * <BR> final IStatePro startState;
33: * <BR> final {@link StateProSet} epsilonClosure = new StateProSet(startState);
34: * <br> final {@link StateProSet.Iterator} it = states.iterator();
35: * <br> for (IStatePro state=it.next(); state!=null; state=it.next()) {
36: * <br> IStatePro.ITransition[] transitions = state.getETransitions();
37: * <br> for (int i=0; i transitions.length; ++i) {
38: * <br> epsilonClosure.add(transitions[i].getToState());
39: * <br> }
40: * <BR> }
41: * </CODE>
42: *
43: * Description:
44: * Copyright: Copyright (c) 2001
45: * Company:
46: * @author
47: * @version 1.0
48: */
49:
50: public interface IState {
51:
52: public boolean isFinal();
53:
54: /**
55: * returns the <CODE>IState</CODE> of all <CODE>IStatePro</CODE> that are reachable from
56: * this <CODE>IState</CODE> with a character <CODE>ch</CODE>.
57: * @param ch
58: * @return
59: */
60: public IState next(char ch);
61:
62: /**
63: * Returns all states that are reachable from this state through it's transitions and so on.
64: * <br>important: this state is only element of the returned set, if it is an element of a loop
65: * @return all reachable states as a set
66: */
67: public StateProSet getAllReachableStates();
68: // public StateProSet getNextStates();
69:
70: }
|