示例#1
0
 // what is exact? it seems to only add sets from above on stack
 // if EOR is in set i.  When it sees a set w/o EOR, it stops adding.
 // Why would we ever want them all?  Maybe no viable alt instead of
 // mismatched token?
 protected BitSet combineFollows(boolean exact) {
   int top = state._fsp;
   BitSet followSet = new BitSet();
   for (int i = top; i >= 0; i--) {
     BitSet localFollowSet = 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(Token.EOR_TOKEN_TYPE)) {
         // 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(Token.EOR_TOKEN_TYPE);
         }
       } else { // can't see end of rule, quit
         break;
       }
     }
   }
   return followSet;
 }
示例#2
0
 protected BitSet combineFollows(boolean exact) {
   int top = _fsp;
   BitSet followSet = new BitSet();
   for (int i = top; i >= 0; i--) {
     BitSet localFollowSet = following[i];
     /*
      * System.out.println("local follow depth "+i+"="+
      * localFollowSet.toString(getTokenNames())+")");
      */
     followSet.orInPlace(localFollowSet);
     if (exact && !localFollowSet.member(Token.EOR_TOKEN_TYPE)) {
       break;
     }
   }
   followSet.remove(Token.EOR_TOKEN_TYPE);
   return followSet;
 }