code: function (token, charset) {
          var arity = [ 1, 1 ];
          if (   token.len >= 5
              && token.peek(0) === "{"
              && token.peek(1).match(/^[0-9]+$/)
              && token.peek(2) === ","
              && token.peek(3).match(/^(?:[0-9]+|oo)$/)
              && token.peek(4) === "}"          ) {
              arity = [
                  parseInt(token.peek(1), 10),
                  (  token.peek(3) === "oo"
                   ? Number.MAX_VALUE
                   : parseInt(token.peek(3), 10))
              ];
              token.skip(5);
          }
          else if (
                 token.len >= 1
              && token.peek().length === 1
              && charset.indexOf(token.peek()) >= 0) {
              var c = token.peek();
              switch (c) {
                  case "?": arity = [ 0, 1 ];                break;
                  case "*": arity = [ 0, Number.MAX_VALUE ]; break;
                  case "+": arity = [ 1, Number.MAX_VALUE ]; break;
              }
              token.skip();
          }
          return arity;
      }
docs: /*  parse arity specification