    # File lib/yard/parser/ruby/legacy/ruby_lex.rb, line 1161
          def identify_number(start)
            str = start.dup

            if start == "+" or start == "-" or start == ""
              start = getc
              str << start
            end

            @lex_state = EXPR_END

            if start == "0"
              if peek(0) == "x"
                ch = getc
                str << ch
                match = /[0-9a-f_]/
              else
                match = /[0-7_]/
              end
              while ch = getc
                if ch !~ match
                  ungetc
                  break
                else
                  str << ch
                end
              end
              return Token(TkINTEGER).set_text(str)
            end

            type = TkINTEGER
            allow_point = TRUE
            allow_e = TRUE
            while ch = getc
              case ch
              when /[0-9_]/
                str << ch

              when allow_point && "."
                type = TkFLOAT
                if peek(0) !~ /[0-9]/
                  ungetc
                  break
                end
                str << ch
                allow_point = false

              when allow_e && "e", allow_e && "E"
                str << ch
                type = TkFLOAT
                if peek(0) =~ /[+-]/
                  str << getc
                end
                allow_e = false
                allow_point = false
              else
                ungetc
                break
              end
            end
            Token(type).set_text(str)
          end