fix XDigit

蓝色巨巨我又来啦。

我在你的测试文件中添加了以下两行：
12..45
$zhello

原程序的输出为：
Token Error:scanner_test.pas:65:3:Fraction number can not have dot after dot
scanner_test.pas:65:1:  real:                   12..45          -1
scanner_test.pas:66:1:  identifier:             $                -1
scanner_test.pas:66:2:  identifier:             zhello         -1

我认为此处是有问题的。首先 12..45 与 $z 的类型应该是UNKNOWN，并且我查阅了你所给的 pascal 标准（6.1.3），$ 并不属于 identifier 。

我觉得 bug 主要是因为这句代码：currentChar_ == '$' && std::isxdigit(peekChar())，因为只有确实是16进制数时才会进入NUMBER状态，那么在 handleXDigit() 中的错误处理其实根本就是无效的。（如果$后面跟的字符非法，实际上在 getNextToken 函数中就进入 OPERATION 状态了）。

因此有了我以下的修改，针对之前添加的测试用例，程序运行后输出为：
Token Error:scanner_test.pas:65:3:Fraction number can not have dot after dot
scanner_test.pas:65:1:  unknown:                12..45           -1
Token Error:scanner_test.pas:66:2:Hexadecimal number format error.
scanner_test.pas:66:1:  unknown:                 z                  -1
scanner_test.pas:66:3:  identifier:                 hello             -1


ps:
340行：makeToken(TokenType::UNKNOWN, TokenValue::UNRESERVED, loc_, 0.0, buffer_);
第四个参数我写0.0是任取的，因为尽然都已经出错了，应该就不用关心其具体的值了吧

pps：
418行 std::transform(buffer_.begin(), buffer_.end(), buffer_.begin(), tolower); 
我把 tolower 前的 std 去掉是因为 g++ 编译器只有去掉 std 才能通过编译（可能是g++的bug吧，我也不是很清楚）