com.karneim.util.collection.set
Class SAutomaton

java.lang.Object
  extended by com.karneim.util.collection.set.SAutomaton
Direct Known Subclasses:
PAutomaton

public class SAutomaton
extends java.lang.Object

This class represents a (non-)deterministic final automaton (NFA/DFA). Use this class to create an automaton manually by adding states to the automaton and transitions to other states or to browse through the automaton's states and implement your own matching strategies.
to create an automaton manually try
import com.karneim.util.collection.set.*;
public class Test {
public static void main(String[] args) {
SAutomaton automaton = new SAutomaton();
IStatePro s1 = automaton.addState(false);
IStatePro s2 = automaton.addState(true);
s1.addTransition(new CharSet("0123456789"),s2);
s2.addTransition(new CharSet("0123456789"),s2);
automaton.setStartState(s1);
}
}

to browse through the automaton's states try
final IStatePro startState = automaton.getStartState();
final StateProSet states = new StateProSet(startState);
final StateProSet.Iterator it = states.iterator();
for (IStatePro state=it.next(); state!=null; state=it.next()) {
IStatePro.ITransition[] transitions = state.getTransitions();
for (int i=0; i transitions.length; ++i) {
states.add(transitions[i].getToState());
System.out.println(
"from " + transitions[i].getFromState()
+ " through " + transitions[i].getCharSet()
+ " to " + transitions[i].getToState()
);
}
}

to implement own matching strategies try
/**
* returns true if input is an existing path through automaton's states
* otherwise false.
*
public static boolean incompleteMatch(SAutomaton automaton,String input) {
IState current = automaton.getStartState().visit();
for (int i=0; i input.length(); ++i) {
current = current.next(input.charAt(i));
if (current == null) return false;
}
return true;
}

Version:
1.0
Author:
Ralf Meyer

Nested Class Summary
static interface SAutomaton.IChangeListener
          The listener interface for receiving change events of a SAutomaton.
protected  class SAutomaton.State
           
protected  class SAutomaton.StatePro
           
protected  class SAutomaton.Transition
           
 
Field Summary
protected  AutomatonSet_String automaton
           
protected  Automaton.IChangedListener automatonChangedListener
           
protected  java.util.LinkedList listeners
           
protected  java.util.HashMap state2wrapper
           
protected  java.util.HashMap transition2wrapper
           
 
Constructor Summary
  SAutomaton()
          Creates a new empty automaton
protected SAutomaton(AutomatonSet_String automaton)
           
  SAutomaton(FSAData data)
           
  SAutomaton(java.io.InputStream automatonDataStream)
           
 
Method Summary
 void addAll(SAutomaton automaton)
           
 void addChangeListener(SAutomaton.IChangeListener listener)
          Adds the specified listener to receive change events from this automaton.
 IStatePro addState()
          Adds a new non final state to this automaton.
 IStatePro addState(boolean isFinal)
          Adds a new final or non final state to this automaton.
 void clear()
          Removes all states of this automaton.
 void complement()
           
protected  Automaton.IChangedListener getAutomatonChangedListener()
           
 IStatePro getStartState()
          Returns the current start state of the automaton.
 StateProSet getStates()
          Returns all states of this automaton whatever they are reachable through the current start state or not.
protected  void init(FSAData a)
           
 boolean isDeterministic()
           
 void minimize()
          Minimizes this automaton as much as possible.
 void removeAll(SAutomaton automaton)
           
 boolean removeChangeListener(SAutomaton.IChangeListener listener)
          Removes the specified listener so that it no longer receives change events from this automaton.
 boolean removeState(IStatePro state)
          Removes the specified state from this automaton.
 void retainAll(SAutomaton automaton)
           
 void setStartState(IStatePro state)
          Sets the automaton's start state to the specified state.
 FSAData toData()
           
 void toData(java.io.OutputStream automatonDataStream)
           
protected static FSAData toFSAData(java.lang.Object obj)
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

state2wrapper

protected transient java.util.HashMap state2wrapper

transition2wrapper

protected transient java.util.HashMap transition2wrapper

automatonChangedListener

protected transient Automaton.IChangedListener automatonChangedListener

listeners

protected transient java.util.LinkedList listeners

automaton

protected transient AutomatonSet_String automaton
Constructor Detail

SAutomaton

public SAutomaton()
Creates a new empty automaton


SAutomaton

public SAutomaton(FSAData data)

SAutomaton

public SAutomaton(java.io.InputStream automatonDataStream)
           throws java.io.IOException,
                  java.lang.ClassNotFoundException
Throws:
java.io.IOException
java.lang.ClassNotFoundException

SAutomaton

protected SAutomaton(AutomatonSet_String automaton)
Method Detail

getAutomatonChangedListener

protected Automaton.IChangedListener getAutomatonChangedListener()

addChangeListener

public void addChangeListener(SAutomaton.IChangeListener listener)
Adds the specified listener to receive change events from this automaton. The listener will be registered as listener in any case, even if it has been registered yet. If a listener instance is added two times, it will receive events twice. important: don't forget to remove the listener, if you don't need it any longer but still have the automaton in use. Otherwise your listener won't be carbage collected (because it is registered with this automaton) and still will receive events.


removeChangeListener

public boolean removeChangeListener(SAutomaton.IChangeListener listener)
Removes the specified listener so that it no longer receives change events from this automaton. If the listener instance is registered more than ones, only one instance will be removed.

Parameters:
listener -
Returns:
true if the listener was registered else false

toFSAData

protected static FSAData toFSAData(java.lang.Object obj)

isDeterministic

public boolean isDeterministic()

getStartState

public IStatePro getStartState()
Returns the current start state of the automaton. important: The result is null, if and only if the current start state is null

Returns:
the current start state of the automaton

setStartState

public void setStartState(IStatePro state)
Sets the automaton's start state to the specified state. If the automaton should have no start state pass null.
important: the specified state must be a state of this automaton which means
a) the state must have been created via the addState() method of this automaton
b) the state must not have been removed from this automaton via the removeState method

Parameters:
state -

addState

public IStatePro addState()
Adds a new non final state to this automaton.

Returns:
a new state

addState

public IStatePro addState(boolean isFinal)
Adds a new final or non final state to this automaton.

Returns:
a new state

removeState

public boolean removeState(IStatePro state)
Removes the specified state from this automaton.
First all transitions pointing to state are removed and then the state itself.
If state is this automaton's start state then first of all this automaton's start state is set to null.
important: the specified state must have been created via the addState method of this automaton otherwise an IllegalArgumentException is thrown.

Parameters:
state -
Returns:
true if this automaton owns the specified state else false

clear

public void clear()
Removes all states of this automaton.


minimize

public void minimize()
Minimizes this automaton as much as possible. The resulting automaton has as less states as possible.
important: the current implementation removes all properties from all transitions


getStates

public StateProSet getStates()
Returns all states of this automaton whatever they are reachable through the current start state or not.

Returns:

complement

public void complement()

addAll

public void addAll(SAutomaton automaton)

retainAll

public void retainAll(SAutomaton automaton)

removeAll

public void removeAll(SAutomaton automaton)

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

toData

public FSAData toData()

init

protected void init(FSAData a)

toData

public void toData(java.io.OutputStream automatonDataStream)
            throws java.io.IOException
Throws:
java.io.IOException