Что-то не получается сделать заголовок подлиннее. Вопрос полностью выглядит так: Почему In.Int может читать только положительные числа
согласно спецификации в Oakwood Guidelines? Курсивом выделил то, что не убралось в заголовок.
Теперь подробнее. Обычно в образовательных целях я использую Oxford Oberon-2 compiler, но тут ради интереса решил попробовать XDS и обнаружил неприятную вещь: In.Int может читать только положительные целые числа. Точнее даже будет сказать только "беззнаковые", в том смысле что число должно начинаться с цифры, а не знака. Потратил, к слову сказать, не так уж мало времени, чтобы понять, где источник проблем, т.к. вот уж откуда не ожидал подвоха, так это от In.Int. Решил заглянуть в Oakwood Guidelines... И таки спецификация In.Int действительно такова, что знаков в читаемом числе быть не должно, одни тольцо цифры (1.2.3.2 Operations):
Цитата:
LongInt(n) and Int(n) return the (long) integer constant n at the current position according to the format:
IntConst = digit {digit} | digit {hexDigit} “H”.
Тоже самое верно в общем то и для вещественных чисел (далее по тексту):
Цитата:
Real(n) returns the real constant n at the current position according to the format:
RealConst = digit {digit} [ {digit} [“E” (“+” | “-”) digit {digit}]].
У меня один вопрос:
зачем?! Зачем вводить такое, не побоюсь этого слова, драконовское ограничение? У экспоненты вон, будьте любезны, знак учли, что уж перед числом то так сложно было? В чём сакральный смысл игнорирования очевидного факта, что знак может стоять и перед числом? Зачем усложнять жизнь на абсолютно пустом месте?
Чуть ниже по тексту (1.2.3.4 Origin) указано авторство спецификации:
Цитата:
Designed by Martin Reiser for the book ‘Programming in Oberon’. The above specification was proposed by H Mössenböck, ETH.
Но что-то в "Programming in Oberon" я такого не нашёл (слишком новое издание?). Единственно, что я там обнаружил, так это интерфейс для работы с текстами (22.3. Texts, Readers and Writers). Но вот там то как раз всё разумно:
Цитата:
integer = [sign] digit {digit} | digit {digit | hexdig} „H“.