ладно, в заголовке наврал: не в произвольной, а в [2..16] (больше — не вижу смысла).
я у себя в компилятор вделал такое:
Код:
number = integer | real | hexreal | basedint.
integer = digit {digit} | digit {hexDigit} ( "H" | "L" ).
basedint = digit {digit} | digit {hexDigit} "%" digit {digit}.
hexreal = digit {digit} | digit {hexDigit} ( "S" | "R" ).
real = digit {digit} "." {digit} [ScaleFactor].
ScaleFactor = "E" ["+" | "-"] digit {digit}.
hexDigit = digit | "A" | "B" | "C" | "D" | "E" | "F".
то есть, можно писать целые числа в виде "num%base". например, "01001%2" — будет двоичное. или "600%8" — восьмеричное. поскольку процент нигде не задействован (и вдобавок `Strings.IntForm` печатает числа в таком виде) — думаю, это можно добавить в язык. очень удобно для прав доступа в *nix, или для всяких битмап-паттернов. я сделал только для INTEGER, для LONGINT не вижу смысла; но можно сделать и для длинных в форме "num%baseL", например.
также я у себя в компиляторе разрешил разделять цифры подчёркиванием, типа такого: `1_000_000`. удобно для читаемости. выше в синтаксисе это не отображено, потому что поленился, простите. тоже предлагаю добавить.
ни первое, ни второе добавление никакой существующий код не сломает (подчёркивание не может быть первым символом числа, а процент не используется как бинарная операция). если честно́й народ согласен — дам патчик. он касается только сканера, и очень локальный.