private boolean parseSelectors() throws IOException {
  int nextToken;
  if (tokenBufferLength > 0) {
    callback.handleSelector(new String(tokenBuffer,0,tokenBufferLength));
  }
  unitBuffer.setLength(0);
  for (; ; ) {
    while ((nextToken=nextToken((char)0)) == IDENTIFIER) {
      if (tokenBufferLength > 0) {
        callback.handleSelector(new String(tokenBuffer,0,tokenBufferLength));
      }
    }
switch (nextToken) {
case BRACE_OPEN:
      return true;
case BRACKET_OPEN:
case PAREN_OPEN:
    parseTillClosed(nextToken);
  unitBuffer.setLength(0);
break;
case BRACKET_CLOSE:
case BRACE_CLOSE:
case PAREN_CLOSE:
throw new RuntimeException("Unexpected block close in selector");
case END:
return false;
}
}
}

private boolean parseSelectors ( ) throws IOException { int nextToken ; if ( tokenBufferLength > 0 ) { callback . handleSelector ( new String ( tokenBuffer , 0 , tokenBufferLength ) ) ; } unitBuffer . setLength ( 0 ) ; for ( ; ; ) { while ( ( nextToken = nextToken ( ( char ) 0 ) ) == IDENTIFIER ) { if ( tokenBufferLength > 0 ) { callback . handleSelector ( new String ( tokenBuffer , 0 , tokenBufferLength ) ) ; } } switch ( nextToken ) { case BRACE_OPEN : return true ; case BRACKET_OPEN : case PAREN_OPEN : parseTillClosed ( nextToken ) ; unitBuffer . setLength ( 0 ) ; break ; case BRACKET_CLOSE : case BRACE_CLOSE : case PAREN_CLOSE : throw new RuntimeException ( "Unexpected block close in selector" ) ; case END : return false ; } } }
parses a set of selectors , returning false if the end of the stream is reached .
