PA2 пройден, он был о переводе чисел, символов и строк в бинарный вид.
Теперь ночью с просоня могу сказать что выведет этот код и почему :
std::cout << typeid(0xfabbbbaf).name() << std::endl;
std::cout << typeid(3123123123).name() << std::endl;
Подсказка : он выведет unsigned int и long int. Почему ? смотри 2.14.2.2
Основное веселье было в парсинге чисел, вот например часть sanity-test :
1..e
1..E
1..Ee
1..eEEE.E..EEe.Ee
1e2
5e+
1.e+e-...
.1.O.M.G.123...
..123
..123e
10.0_safaf+1
10.0_safafe+1
|
Суть в том чтобы лексер выдал такое число за один токен, и только потом мы уже узнали в парсере что он не валиден.