Приветствую завсегдатаев форума!
Хотелось бы услышать идеи о том как на Форте можно красиво обрабатывать иерархические структуры данных.
Видел местные темы по структурам и посмотрел, что есть в GForth, но остаётся неудовлетворённость.
По работе есть объёмный кусок рутинного кода на Си который желательно автоматизировать.
Для начала думаю написать генератор сишных структур и соответствующих им функций get/set с проверками допустимых значений.
Решение на Лиспе для меня очевидно, а Форт пока только осваиваю и не вижу как лучше.
Проиллюстрирую.
Например, должны появиться следующие структуры:
Код:
struct UserGroup {
int priority; /* 1..10, default 10 */
char name[MAX_GROUP_NAME_LENGTH]; /* default "" */
};
struct User {
char enable; /* 0..1, default 0 */
char name[MAX_USER_NAME_LENGTH]; /* default "" */
struct UserGroup group[MAX_USER_GROUPS];
};
Если писать генератор на Лиспе, то файл содержащий описание структур мог бы выглядеть как присваивание одной переменной всего дерева.
Начать можно было бы как-то так:
Код:
(setf code-tree
'(UserGroup
(priority
(type int) (min 1) (max 10) (default 10))
(name
(type char) (array MAX_GROUP_NAME_LENGTH) (default ""))))
При этом разбором этого файла и созданием соответствующих вложенных списков составляющих дерево занимается Лисп. Как говориться готовый функционал "из коробки".
Далее можно было бы сразу писать код чтобы по этому дереву пройтись для генерации *.h и *.c файлов. И по ходу делая проверки на синтаксис и корректность.
В Форте я насколько понял таких готовых плюшек нет, но можно много чего создать самобытного.
Думал парсить заголовочный файл С со структурами, но тогда надо всю дополнительную информацию писать в комментариях, что не здорово.
Думал задействовать библиотечку чтения json формата, но в json варианте получиться много кавычек... более тяжеловесно смотрится.
Подозреваю, что где-то есть красивые элегантные решения...
Хочется отлично читаемый удобный для Людей синтаксис описания иерархических структур... и достаточно гибкий чтобы в будущем можно было его развить в предметно ориентированный язык...