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