parseHex method

Token parseHex()

Similar to parseNumber but only allows hex digits.

Implementation

Token parseHex() {
  String lexeme = '';
  int offset = 0;

  StreamChar start = peek();
  String next = start.lexeme;

  while (hex.hasMatch(next)) {
    lexeme = next;

    final rawChar = peek(offset: ++offset).lexeme;
    next += rawChar;

    if (rawChar == '.') {
      next += peek(offset: ++offset).lexeme;
    } else if (rawChar == '') {
      break;
    }
  }

  if (lexeme.isNotEmpty) {
    curr += lexeme.length;
  } else {
    addError('Malformed hex number.');
  }

  final hx = int.tryParse(lexeme, radix: 16);
  if(hx == null) {
    addError('Failed to convert $lexeme to number.');
  }
  return start.toToken(TokenType.kNumber, lexeme: hx.toString());
}