protected virtual BitSet CombineFollows(bool exact)
{
int top = state._fsp;
BitSet followSet = new BitSet();
for ( int i = top; i >= 0; i-- )
{
BitSet localFollowSet = (BitSet)state.following[i];
/*
System.out.println("local follow depth "+i+"="+
localFollowSet.toString(getTokenNames())+")");
*/
followSet.OrInPlace( localFollowSet );
if ( exact )
{
// can we see end of rule?
if ( localFollowSet.Member( TokenTypes.EndOfRule ) )
{
// Only leave EOR in set if at top (start rule); this lets
// us know if have to include follow(start rule); i.e., EOF
if ( i > 0 )
{
followSet.Remove( TokenTypes.EndOfRule );
}
}
else
{ // can't see end of rule, quit
break;
}
}
}
return followSet;
}