я в виде «num%base» сделал по двум причинам. во-первых, так делает `IntForm`, если его попросить показывать base: будет логично предположить, что если вывод `IntForm` скормить компилятору, то компилятор поймёт. а во-вторых, так меньше изменений в сканере. сканер устроен так, что при виде десятичной цифры собирает токен как будто это шестнадцатиричное число, а потом уже смотрит на наличие "H" и прочего. соответственно, в эту схему красиво уложился и процент. отсюда, кстати, и ограничение на base в виде [2..16]. а разрешать только некоторые основы из этого диапазона, но не все — только лишняя проверка будет; поэтому я все разрешил. какие-то вот такие причины, почему именно так. к тому же согласуется с постфиксами типа "H", опять же: тип числа задаётся после самого числа, а не до него. единообразность, однако.

мне это не очень нравится, если честно: я бы предпочёл, чтобы сначала тип/база, потом число — но в обероне/cp вот так.