code: def read_number(
          self, start: int, char: str, line: int, col: int, prev: Token
      ) -> Token:
          
          source = self.source
          body = source.body
          position = start
          is_float = False
          if char == "-":
              position += 1
              char = body[position : position + 1]
          if char == "0":
              position += 1
              char = body[position : position + 1]
              if "0" <= char <= "9":
                  raise GraphQLSyntaxError(
                      source,
                      position,
                      f"Invalid number, unexpected digit after 0: {print_char(char)}.",
                  )
          else:
              position = self.read_digits(position, char)
              char = body[position : position + 1]
          if char == ".":
              is_float = True
              position += 1
              char = body[position : position + 1]
              position = self.read_digits(position, char)
              char = body[position : position + 1]
          if char and char in "Ee":
              is_float = True
              position += 1
              char = body[position : position + 1]
              if char and char in "+-":
                  position += 1
                  char = body[position : position + 1]
              position = self.read_digits(position, char)
          return Token(
              TokenKind.FLOAT if is_float else TokenKind.INT,
              start,
              position,
              line,
              col,
              prev,
              body[start:position],
          )
docs: Reads a number token from the source file.
  
          Either a float or an int depending on whether a decimal point appears.