OberonCore
https://forum.oberoncore.ru/

доб. в компилятор чисел в произвольной системе счисления
https://forum.oberoncore.ru/viewtopic.php?f=29&t=6901
Страница 1 из 1

Автор:  arisu [ Понедельник, 13 Февраль, 2023 05:46 ]
Заголовок сообщения:  доб. в компилятор чисел в произвольной системе счисления

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

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

Автор:  vvmtutby [ Понедельник, 13 Февраль, 2023 18:40 ]
Заголовок сообщения:  Re: доб. в компилятор чисел в произвольной системе счисления

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

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

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

Автор:  arisu [ Понедельник, 13 Февраль, 2023 18:56 ]
Заголовок сообщения:  Re: доб. в компилятор чисел в произвольной системе счисления

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

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

Автор:  vvmtutby [ Среда, 15 Февраль, 2023 20:23 ]
Заголовок сообщения:  Re: доб. в компилятор чисел в произвольной системе счисления

Да: интересно, даже неожиданно.
При таком, действительно, имеет смысл первоначальный синтаксис.

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