Информация об изменениях

Сообщение [ksi] Синтаксис диапазонов -- тип range от 30.01.2022 21:34

Изменено 30.01.2022 21:38 Sm0ke

[ksi] Синтаксис диапазонов -- тип range
Разрабатываю свой язык, потому что хочу и свободное время позволяет. Добрый день.

Помогите пожалуйста подобрать конструкцию для диапазонов значений. Диапазон может быть как открытый, так и закрытый, и с обоих концов. Дополнительно он хранит шаг, который по_умолчанию равен 1. Если нижняя граница не указана, то она равна 0.

Пока остановился на таком варианте:
-- нижняя граница включена
[: 8]               -- [0 .. 8) step 1
[: 8 : 2]           -- [0 .. 8) step 2
[: 4 .. 8]          -- [4 .. 8) step 1
[: 4 .. 8 : 2]      -- [4 .. 8) step 2
[: 8 =]             -- [0 .. 8] step 1
[: 8 =: 2]          -- [0 .. 8] step 2
[: 4 .. 8 =]        -- [4 .. 8] step 1
[: 4 .. 8 =: 2]     -- [4 .. 8] step 2
-- нижняя граница открыта
[:: 8]              -- (0 .. 8) step 1
[:: 8 : 2]          -- (0 .. 8) step 2
[:: 4 .. 8]         -- (4 .. 8) step 1
[:: 4 .. 8 : 2]     -- (4 .. 8) step 2
[:: 8 =]            -- (0 .. 8] step 1
[:: 8 =: 2]         -- (0 .. 8] step 2
[:: 4 .. 8 =]       -- (4 .. 8] step 1
[:: 4 .. 8 =: 2]    -- (4 .. 8] step 2

* Однострочный комментарий начинается с последовательности минус минус --

Использовать просто [1 .. 2] не могу, т:к просто квадратные скобочки будут использованы для массивов.

Вот ещё вариант:
Но тут подсветка парных скобок в текстовых редакторах не всегда сможет работать правильно.
[: 8)               -- [0 .. 8) step 1
[: 8 : 2)           -- [0 .. 8) step 2
[: 4 .. 8)          -- [4 .. 8) step 1
[: 4 .. 8 : 2)      -- [4 .. 8) step 2
[: 8]               -- [0 .. 8] step 1
[: 8 : 2]           -- [0 .. 8] step 2
[: 4 .. 8]          -- [4 .. 8] step 1
[: 4 .. 8 : 2]      -- [4 .. 8] step 2

(: 8)               -- (0 .. 8) step 1
(: 8 : 2)           -- (0 .. 8) step 2
(: 4 .. 8)          -- (4 .. 8) step 1
(: 4 .. 8 : 2)      -- (4 .. 8) step 2
(: 8]               -- (0 .. 8] step 1
(: 8 : 2]           -- (0 .. 8] step 2
(: 4 .. 8]          -- (4 .. 8] step 1
(: 4 .. 8 : 2]      -- (4 .. 8] step 2


С удовольствием рассмотрю ваши варианты.
range ksi
[ksi] Синтаксис диапазонов -- тип range
Разрабатываю свой язык, потому что хочу и свободное время позволяет. Добрый день.

Помогите пожалуйста подобрать конструкцию для диапазонов значений. Диапазон может быть как открытый, так и закрытый, и с обоих концов. Дополнительно он хранит шаг, который по_умолчанию равен 1. Если нижняя граница не указана, то она равна 0.

Пока остановился на таком варианте:
-- нижняя граница включена
[: 8]               -- [0 .. 8) step 1
[: 8 : 2]           -- [0 .. 8) step 2
[: 4 .. 8]          -- [4 .. 8) step 1
[: 4 .. 8 : 2]      -- [4 .. 8) step 2
[: 8 =]             -- [0 .. 8] step 1
[: 8 =: 2]          -- [0 .. 8] step 2
[: 4 .. 8 =]        -- [4 .. 8] step 1
[: 4 .. 8 =: 2]     -- [4 .. 8] step 2

-- нижняя граница открыта
[:: 8]              -- (0 .. 8) step 1
[:: 8 : 2]          -- (0 .. 8) step 2
[:: 4 .. 8]         -- (4 .. 8) step 1
[:: 4 .. 8 : 2]     -- (4 .. 8) step 2
[:: 8 =]            -- (0 .. 8] step 1
[:: 8 =: 2]         -- (0 .. 8] step 2
[:: 4 .. 8 =]       -- (4 .. 8] step 1
[:: 4 .. 8 =: 2]    -- (4 .. 8] step 2

* Однострочный комментарий начинается с последовательности минус минус --

Использовать просто [1 .. 2] не могу, т:к просто квадратные скобочки будут использованы для массивов.

Вот ещё вариант:
Но тут подсветка парных скобок в текстовых редакторах не всегда сможет работать правильно.
[: 8)               -- [0 .. 8) step 1
[: 8 : 2)           -- [0 .. 8) step 2
[: 4 .. 8)          -- [4 .. 8) step 1
[: 4 .. 8 : 2)      -- [4 .. 8) step 2
[: 8]               -- [0 .. 8] step 1
[: 8 : 2]           -- [0 .. 8] step 2
[: 4 .. 8]          -- [4 .. 8] step 1
[: 4 .. 8 : 2]      -- [4 .. 8] step 2

(: 8)               -- (0 .. 8) step 1
(: 8 : 2)           -- (0 .. 8) step 2
(: 4 .. 8)          -- (4 .. 8) step 1
(: 4 .. 8 : 2)      -- (4 .. 8) step 2
(: 8]               -- (0 .. 8] step 1
(: 8 : 2]           -- (0 .. 8] step 2
(: 4 .. 8]          -- (4 .. 8] step 1
(: 4 .. 8 : 2]      -- (4 .. 8] step 2


С удовольствием рассмотрю ваши варианты.
range ksi