OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 00:45

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: Понедельник, 13 Февраль, 2023 05:46 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
ладно, в заголовке наврал: не в произвольной, а в [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`. удобно для читаемости. выше в синтаксисе это не отображено, потому что поленился, простите. тоже предлагаю добавить.

ни первое, ни второе добавление никакой существующий код не сломает (подчёркивание не может быть первым символом числа, а процент не используется как бинарная операция). если честно́й народ согласен — дам патчик. он касается только сканера, и очень локальный.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Февраль, 2023 18:40 

Зарегистрирован: Пятница, 11 Январь, 2019 21:33
Сообщения: 88
В Modula-3 сперва base, потом цифры.
Разделитель - одного вида: нижнее подчёркивание ( "_", без кавычек, конечно).
Цифры могут "разделяться" им тоже.

Решение проверенное практикой с 1989 года.
На мой взгляд, стоит, как минимум, изучить.

P.S. Насколько помню, в существующих исходных кодах base бывает 10, 2, 8, 16.
Теоретически допустимое - лучше посмотреть в описании языка.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Февраль, 2023 18:56 

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 15 Февраль, 2023 20:23 

Зарегистрирован: Пятница, 11 Январь, 2019 21:33
Сообщения: 88
Да: интересно, даже неожиданно.
При таком, действительно, имеет смысл первоначальный синтаксис.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB