Поверх него также можно построить python-like язык - Trython, с динамической типизацией, ускоряющий разработку программ.
Типы используемые:
Определим, трайт как 6 трит.
Важная пометка: в таком языке знаковые и беззнаковые(assymetric) типы данных будут представляться в разных системах. Для знаковой это полюбившаяся на этом форуме {N, O, P}, для беззнакового это классическая ассиметрия {0, 1, 2}.
Code: Select all
Sizes:
- signed char - 1 tryte - [-364, 364].
- assymetric char - 1 tryte - [0, 728].
- signed short - 2 tryte - [-265720, 265720].
- assymetric short - 2 tryte - [0, 531440].
- signed int - 4 tryte - [-141214768240, 141214768240].
- assymetric int - 4 tryte - [0, 282429536480].
- float - 4 tryte (а вот о способе реализации числа с плавающей точкой следует договариваться отдельно).
- bool - 1 tryte - [false, unknown, true]
Литеральные константы:
"a", "A" - для ассиметрического типа
"f" - число с плавающей точкой.
Операторы:
- Унарные операторы:
- "+" - Унарный плюс;
- "-" - Унарный минус;
- "++" - Постфиксный инкремент(думаю будет неплохо отказаться от префиксного);
- "--" - Постфиксный декремент(думаю будет неплохо отказаться от префиксного);
- "&" - Взятие адреса;
- "*" - Разыменовывание указателя;
- "sizeof" - Размер объекта;
- "~" - Поразрядное Отрицание Лукашевича (~t := 2-t| t={0,1,2});
- "`" - Порязрядное Отрицание Поста (`t := (t+1)mod 3 | t={0,1,2});
- "!" - Логическое отрицание(Лукашевича);
- Бинарные операторы:
- "=" - Присвоение;
- "+" - Сложение;
- "-" - Вычитание;
- "*" - Умножение;
- "**" - Можно добавить в возведение в степень, под вопросом;
- "/" - Деление;
- "%" - Остаток от деления;
- "&" - Потритовый минимум;
- "|" - Потритовый максимум;
- "^" - Потритовый XOR (тут надо будет еще подумать);
Можно еще какую-нибудь потритовую операцию добавить. - "&:" - Побитовый минимум;
- "|:" - Побитовый максимум;
- "^:" - Побитовый XOR;
Вообще, все эти побитовые операции можно убрать. Сдивиги оставить. - "<<" - Побитовый сдвиг влево.
- "<<" - Побитовый сдвиг вправо.
- "<<<" - Потритовый сдвиг влево.
- ">>>" - Потритовый сдвиг вправо.
Имитацию этих штук в системе чужеземце , кстати, будем реализовывать с помощью того алгоритма быстрого деления. Он может быть релизован при делении на base+1 и base-1, что замечательно подходит. - "&&" - Логический минимум;
- "||" - Логический максимум;
Кстати тут надо подумать, а не будет ли лучше сделать так чтоб, при появлении unknown, любое выражение превращалось в unknown. - ">" - Больше;
- "<" - Меньше;
- ">=" - Больше или равно;
- "<=" - Меньше или равно;
- "==" - Равно;
- "!=" - Неравно;
- Тернарные операторы - отсутствуют.
- Кваднарные(какие? - у которых четыре операнда, сам придумал) операторы:
- "[условие] ? [true выражение] : [false выражение] : [unknown выражение]" - (тут еще можно подумать какой будет 3й символ)