com.karneim.util.collection.set
Class SAutomaton

java.lang.Object
  |
  +--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

Inner Class Summary
static interface SAutomaton.IChangeListener
          The listener interface for receiving change events of a SAutomaton.
 
Constructor Summary
SAutomaton()
          Creates a new empty 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()
           
 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
 StateProSet getStates()
          Returns all states of this automaton whatever they are reachable through the current start state or not.
 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)
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

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
Method Detail

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

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()

toData

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