code: private void scanHexExponentAndSuffix(int pos) {
          if (reader.ch == 'p' || reader.ch == 'P') {
              reader.putChar(true);
              skipIllegalUnderscores();
              if (reader.ch == '+' || reader.ch == '-') {
                  reader.putChar(true);
              }
              skipIllegalUnderscores();
              if (reader.digit(pos, 10) >= 0) {
                  scanDigits(pos, 10);
                  if (!hexFloatsWork)
                      lexError(pos, "unsupported.cross.fp.lit");
              } else
                  lexError(pos, "malformed.fp.lit");
          } else {
              lexError(pos, "malformed.fp.lit");
          }
          if (reader.ch == 'f' || reader.ch == 'F') {
              reader.putChar(true);
              tk = TokenKind.FLOATLITERAL;
              radix = 16;
          } else {
              if (reader.ch == 'd' || reader.ch == 'D') {
                  reader.putChar(true);
              }
              tk = TokenKind.DOUBLELITERAL;
              radix = 16;
          }
      }
docs: Read fractional part of hexadecimal floating point number.