OberonCore
https://forum.oberoncore.ru/

Почему In.Int может читать только положительные числа?
https://forum.oberoncore.ru/viewtopic.php?f=30&t=5645
Страница 1 из 1

Автор:  kemiisto [ Пятница, 18 Март, 2016 23:43 ]
Заголовок сообщения:  Почему In.Int может читать только положительные числа?

Что-то не получается сделать заголовок подлиннее. Вопрос полностью выглядит так: Почему 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“.

Автор:  Пётр Кушнир [ Суббота, 19 Март, 2016 00:20 ]
Заголовок сообщения:  Re: Почему In.Int может читать только положительные числа?

Этой версии реальности оказалось достаточно того факта что +, - и ~ (и может ещё какие-то) введены как monadic operations в парсере Оберона (и соответственно, везде, где он является основой).

А иначе как-то геморно реализовывать разбор такого многозначительного минуса, тут тебе и negation и difference и просто отрицательное число.

Автор:  kekc_leader [ Четверг, 29 Апрель, 2021 16:48 ]
Заголовок сообщения:  Re: Почему In.Int может читать только положительные числа?

Я тоже на это наткнулся только что, разрабатывая модуль In для Free Oberon Compiler.

В этом месте, похоже, придётся немного отойти от Дубовых требований.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/