Язык программирования Fork
В порядке бреда. Идея заимствована из языка False.
Свойства языка
- Удобный (в смысле ?быстро и качественно?)
- ?Птичий? (минимум байтов ? максимум инофрмации)
- Расширяемый
- С возможностью ООП и ФП
Идеи
- Классы символов: буквы и цифры, знаки, управляющие
Существуют цифры ?+?, ?-?, ?.?, ?e?, ?h?, ?o?, отличающиеся от соответствующих знаков и букв (способ отличия определяется реализацией Fork, например, с помощью дополнительного управляющего символа, спецсимвола из имеющихся в данной кодировке или путем предсказания при лексическом анализе)
- Последовательности букв и цифр слипаются в единый литерал
- Управляющие символы ? пробельные и похожие на апостроф:
- пробельные символы и единичный перевод строки: разделитель
- двойной перевод строки и перевод страницы: ?интерпретировать?
?`?: клей, все символы одного класса слипаются в литерал
?+-ab? ? это три литерала (?+?, ?-?, ?ab?), а ?`+-*ab? ? два (?+-*?, ?ab?)
- одинарная и двойная кавычка: суперклей, все символы до парной кавычки слипаются в литерал (класса ?буква и цифра?)
?\?: квотирование, следующий символ считается знаком
?\ =? ? один литерал, а ?\ab? ? два
следствие: ?\ ? и ? ? ? разные символы (они разных классов)
Стек ? это дерево (точка ветвления называется узлом T)
в стеке хранятся необработанные входные литералы
когда ветка исчерпывается, вершиной стека становится самый левый лист поддерева T (сам T в случае пустого поддерева)
- Литералы и имена
- Литералы могут состоять из любых символов одного класса, кроме разделителей
Лиерал, нагруженный значением (например, в результате операции ?.?), называется именем
Имена, начинающиеся на большую букву, считаются глобальными и хранятся в корневом T
- ?неявные имена? (числовые константы, операторы Fork и пр.) считаются ?хранящимися? в корне стека
Остальные имена хранятся в ближайшем T (глоальные имена ? в корне стека) и уничтожаются месте с ним
При распознавании литерала просматривается список имен по всем T на пути из корня к текущей вершине стека
Нерешенные вопросы
Как работать с поддеревьями стека (а не с веткой до ближайшего T)?
- вариант: специальная операция дублирует не ветку, а наибольшее поддерево, если оно состоит из узлов без литералов (более точно: поднимаемся вверх по дереву до тех пор, пока на пути одни узлы, на последнем проверяем, состоит ли его поддерево из одних узлов, если да ? дублируем, если нет ? ошибка)
Хорошо бы уметь обрабатывать исключения (и оператор есть подходящий ? ???).
НЕ продуман ввод-вывод.
Таблица операторов Fork
Обозначения: ?T? ? узел стека, ?L? ? литерал (также L1, L2 и т. п.), ?...? или ?___? ? отрезок пути от корня до вершины стека, ?T (...) ...? ? стек с двумя ветками (также ?T (...) (...) ...? ? стек с тремя ветками и т. п.).
Оператор |
Стек до |
Стек после |
Описание |
?:? |
L |
L L |
Сдублировать вершину стека |
?$? |
T ... |
T (...) ... |
Сдублировать ветку |
?.? |
T L ... |
T |
Сохранить ветку под именем L в узел T |
?,? |
|
T |
Создать узел |
?;? |
T ... L |
T (...) L |
Перенести вершину стека в новую ветку узла |
?!? |
T ... |
T _ |
Интерпретировать ветку |
?+? ?-?, ?*?, ?/?, ?%? |
L1 L2 |
L3 |
Арифметические операции |
?&? ?|? ?~? |
L1 L2 |
L3 |
Логические операции |
?^? |
L1 L2 |
L3 |
Побитовая операция ?стрелка Пирса? |