public virtual IList<NFAState> GetNFAPathStatesForAlt( int firstAlt,
int alt,
IList<Label> labels )
{
NFAState nfaStart = _dfa.NFADecisionStartState;
List<NFAState> path = new List<NFAState>();
// first add all NFA states leading up to altStart state
for ( int a = firstAlt; a <= alt; a++ )
{
NFAState s =
_dfa.Nfa.Grammar.GetNFAStateForAltOfDecision( nfaStart, a );
path.Add( s );
}
// add first state of actual alt
NFAState altStart = _dfa.Nfa.Grammar.GetNFAStateForAltOfDecision( nfaStart, alt );
NFAState isolatedAltStart = (NFAState)altStart.transition[0].Target;
path.Add( isolatedAltStart );
// add the actual path now
_statesVisitedAtInputDepth = new HashSet<string>();
GetNFAPath( isolatedAltStart,
0,
labels,
path );
return path;
}