docs: public boolean matches( int currentExpectedType,
                              int... expectedTypeForNextTokens ) throws IllegalStateException {
          if (completed) return false;
          ListIterator<Token> iter = tokens.listIterator(tokenIterator.previousIndex());
          if (!iter.hasNext()) return false;
          Token token = iter.next();
          if (currentExpectedType != ANY_TYPE && currentToken().type() != currentExpectedType) return false;
          for (int nextExpectedType : expectedTypeForNextTokens) {
              if (!iter.hasNext()) return false;
              token = iter.next();
              if (nextExpectedType == ANY_TYPE) continue;
              if (token.type() != nextExpectedType) return false;
          }
          return true;
      }