code: function () {
      var startPos = scanner.pos;
      var result;
      if ((result = BlazeTools.parseNumber(scanner))) {
        return ['NUMBER', result.value];
      } else if ((result = BlazeTools.parseStringLiteral(scanner))) {
        return ['STRING', result.value];
      } else if (/^[\.\[]/.test(scanner.peek())) {
        return ['PATH', scanPath()];
      } else if (run(/^\(/)) {
        return ['EXPR', scanExpr('EXPR')];
      } else if ((result = BlazeTools.parseExtendedIdentifierName(scanner))) {
        var id = result;
        if (id === 'null') {
          return ['NULL', null];
        } else if (id === 'true' || id === 'false') {
          return ['BOOLEAN', id === 'true'];
        } else {
          scanner.pos = startPos; // unconsume `id`
          return ['PATH', scanPath()];
        }
      } else {
        expected('identifier, number, string, boolean, null, or a sub expression enclosed in "(", ")"');
      }
    }
docs: scan an argument value (for keyword or positional arguments); succeeds or errors.  Result is an array of type, value.