Package jflex
Class NFA
- java.lang.Object
-
- jflex.NFA
-
public final class NFA extends java.lang.ObjectNon-deterministic finite automata representation in JFlex.Contains algorithms RegExp → NFA and NFA → DFA.
- Version:
- JFlex 1.7.0
-
-
Field Summary
Fields Modifier and Type Field Description (package private) Action[]actionaction[current_state]: the action associated with the state current_state (null, if there is no action for the state)(package private) CharClassesclasses(package private) StateSet[]epsilonepsilon[current_state] is the set of states that can be reached from current_state via epsilon edges(package private) intestSizeestimated size of the NFA (before actual construction)(package private) boolean[]isFinalisFinal[state] == true <=> state is a final state of the NFAprivate boolean[]live(package private) Macrosmacros(package private) intnumInputthe current maximum number of input characters(package private) intnumLexStatesthe number of lexical States.(package private) intnumStatesthe number of states in this NFA(package private) RegExpsregExps(package private) LexScanscannerprivate static StateSetEnumeratorstates(package private) StateSet[][]tabletable[current_state][next_char] is the set of states that can be reached from current_state with an input next_charprivate static StateSettempStateSetprivate boolean[]visited
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddEpsilonTransition(int start, int dest)addEpsilonTransition.voidaddRegExp(int regExpNum)Add a regexp to this NFA.voidaddStandaloneRule()Add a standalone rule that has minimum priority, fires a transition on all single input characters and has a "print yytext" action.voidaddTransition(int start, int input, int dest)addTransition.private StateSetclosure(int startState)Calculates the epsilon closure for a specified set of states.private StateSetclosure(StateSet startStates)Returns the epsilon closure of a set of statesprivate IntPaircomplement(IntPair nfa)Constructs an NFA accepting the complement of the language of a given NFA.private booleancontainsFinal(StateSet set)Returnstrue, iff the specified set of states contains a final state.private StateSetDFAEdge(StateSet start, int input)Calculates the set of states that can be reached from another set of statesstartwith an specified input characterinputjava.lang.StringdotFormat()dotFormat.voiddumpTable()dumpTable.private voidensureCapacity(int newNumStates)Make sure the NFA can contain at least newNumStates states.private voidepsilonFill()private ActiongetAction(StateSet set)Returns the action with highest priority in the specified set of states.DFAgetDFA()Returns an DFA that accepts the same language as this NFA.private voidinsertCCLNFA(RegExp regExp, int start, int end)Constructs a two state NFA for char class regexps, such that the NFA hasprivate voidinsertClassNFA(java.util.List<Interval> intervals, int start, int end)private voidinsertLetterNFA(boolean caseless, int ch, int start, int end)private voidinsertLookAheadChoices(int baseEnd, Action a, RegExp lookAhead)Insert NFAs for the (finitely many) fixed length lookahead choices.IntPairinsertNFA(RegExp regExp)Constructs an NFA for regExp such that the NFA hasprivate voidinsertNotClassNFA(java.util.List<Interval> intervals, int start, int end)private IntPairinsertStringNFA(boolean caseless, java.lang.String str)intnumEntryStates()numEntryStates.private voidremoveDead(int start, int end)java.lang.StringtoString()toString.voidwriteDot(java.io.File file)writeDot.
-
-
-
Field Detail
-
table
StateSet[][] table
table[current_state][next_char] is the set of states that can be reached from current_state with an input next_char
-
epsilon
StateSet[] epsilon
epsilon[current_state] is the set of states that can be reached from current_state via epsilon edges
-
isFinal
boolean[] isFinal
isFinal[state] == true <=> state is a final state of the NFA
-
action
Action[] action
action[current_state]: the action associated with the state current_state (null, if there is no action for the state)
-
numStates
int numStates
the number of states in this NFA
-
numInput
int numInput
the current maximum number of input characters
-
numLexStates
int numLexStates
the number of lexical States. Lexical states have the indices 0..numLexStates-1 in the transition table
-
estSize
int estSize
estimated size of the NFA (before actual construction)
-
macros
Macros macros
-
classes
CharClasses classes
-
scanner
LexScan scanner
-
regExps
RegExps regExps
-
states
private static StateSetEnumerator states
-
tempStateSet
private static StateSet tempStateSet
-
live
private boolean[] live
-
visited
private boolean[] visited
-
-
Constructor Detail
-
NFA
public NFA(int numInput, int estSize)Constructor for NFA.
-
NFA
public NFA(int numInput, LexScan scanner, RegExps regExps, Macros macros, CharClasses classes)Construct new NFA.Assumes that lookahead cases and numbers are already resolved in RegExps.
- Parameters:
numInput- a int.scanner- aLexScanobject.regExps- aRegExpsobject.macros- aMacrosobject.classes- aCharClassesobject.- See Also:
RegExps.checkLookAheads()
-
-
Method Detail
-
numEntryStates
public int numEntryStates()
numEntryStates.- Returns:
- a int.
-
addStandaloneRule
public void addStandaloneRule()
Add a standalone rule that has minimum priority, fires a transition on all single input characters and has a "print yytext" action.
-
addRegExp
public void addRegExp(int regExpNum)
Add a regexp to this NFA.- Parameters:
regExpNum- the number of the regexp to add.
-
insertLookAheadChoices
private void insertLookAheadChoices(int baseEnd, Action a, RegExp lookAhead)Insert NFAs for the (finitely many) fixed length lookahead choices.- Parameters:
lookAhead- a lookahead of which isFiniteChoice is truebaseEnd- the end state of the base expression NFAa- the action of the expression- See Also:
SemCheck.isFiniteChoice(RegExp)
-
ensureCapacity
private void ensureCapacity(int newNumStates)
Make sure the NFA can contain at least newNumStates states.- Parameters:
newNumStates- the minimu number of states.
-
addTransition
public void addTransition(int start, int input, int dest)addTransition.- Parameters:
start- a int.input- a int.dest- a int.
-
addEpsilonTransition
public void addEpsilonTransition(int start, int dest)addEpsilonTransition.- Parameters:
start- a int.dest- a int.
-
containsFinal
private boolean containsFinal(StateSet set)
Returnstrue, iff the specified set of states contains a final state.- Parameters:
set- the set of states that is tested for final states.
-
getAction
private Action getAction(StateSet set)
Returns the action with highest priority in the specified set of states.- Parameters:
set- the set of states for which to determine the action
-
closure
private StateSet closure(int startState)
Calculates the epsilon closure for a specified set of states.The epsilon closure for set a is the set of states that can be reached by epsilon edges from a.
- Parameters:
startState- the start state for the set of states to calculate the epsilon closure for- Returns:
- the epsilon closure of the specified set of states in this NFA
-
closure
private StateSet closure(StateSet startStates)
Returns the epsilon closure of a set of states
-
epsilonFill
private void epsilonFill()
-
DFAEdge
private StateSet DFAEdge(StateSet start, int input)
Calculates the set of states that can be reached from another set of statesstartwith an specified input characterinput- Parameters:
start- the set of states to start frominput- the input character for which to search the next states- Returns:
- the set of states that are reached from
startviainput
-
getDFA
public DFA getDFA()
Returns an DFA that accepts the same language as this NFA. This DFA is usually not minimal.- Returns:
- a
DFAobject.
-
dumpTable
public void dumpTable()
dumpTable.
-
toString
public java.lang.String toString()
toString.- Overrides:
toStringin classjava.lang.Object- Returns:
- a
Stringobject.
-
writeDot
public void writeDot(java.io.File file)
writeDot.- Parameters:
file- aFileobject.
-
dotFormat
public java.lang.String dotFormat()
dotFormat.- Returns:
- a
Stringobject.
-
insertLetterNFA
private void insertLetterNFA(boolean caseless, int ch, int start, int end)
-
insertStringNFA
private IntPair insertStringNFA(boolean caseless, java.lang.String str)
-
insertClassNFA
private void insertClassNFA(java.util.List<Interval> intervals, int start, int end)
-
insertNotClassNFA
private void insertNotClassNFA(java.util.List<Interval> intervals, int start, int end)
-
complement
private IntPair complement(IntPair nfa)
Constructs an NFA accepting the complement of the language of a given NFA.Converts the NFA into a DFA, then negates that DFA. Exponential state blowup possible and common.
- Parameters:
nfa- the NFA to construct the complement for.- Returns:
- a pair of integers denoting the index of start and end state of the complement NFA.
-
removeDead
private void removeDead(int start, int end)
-
insertCCLNFA
private void insertCCLNFA(RegExp regExp, int start, int end)
Constructs a two state NFA for char class regexps, such that the NFA hasexactly one start state, exactly one end state, no transitions leading out of the end state no transitions leading into the start state
Assumes that regExp.isCharClass(macros) == true
- Parameters:
regExp- the regular expression to construct the NFA for
-
insertNFA
public IntPair insertNFA(RegExp regExp)
Constructs an NFA for regExp such that the NFA hasexactly one start state, exactly one end state, no transitions leading out of the end state no transitions leading into the start state
- Parameters:
regExp- the regular expression to construct the NFA for- Returns:
- a pair of integers denoting the index of start and end state of the NFA.
-
-