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/ |