Цитата:
Будет, и уже есть кстати в СПФ
Не помню кто в devel имеет такую наработку.
Иногда ей пользуюсь.
Ага. Нашел. ~ygrek/lib/enum.f
У меня немножко отличается реализация
VARIABLES
Код:
VOCABULARY variables
ALSO variables DEFINITIONS
: NOTFOUND (addr u -- ) CREATED 0 , ;
: ;VARIABLES PREVIOUS ;
PREVIOUS DEFINITIONS
: VARIABLES: ALSO variables ;
Пример:
Код:
VARIABLES: a b cdef ;VARIABLES
VALUES инициализированные нулем
Код:
VOCABULARY values
ALSO values DEFINITIONS
: ;VALUES PREVIOUS DROP ;
: NOTFOUND VALUED 0 ;
PREVIOUS DEFINITIONS
: VALUES: ALSO values 0 ;
Общий принцип: заводим новый контекст, в котором определяем слово закрывающий тег. В этом же контексте определяем NOTFOUND как определяющее слово.
И все происходит само. Числа кладутся на стек, слова определяют сами себя. Вычисления также доступны.
Можно в контекст добавить слово-паразит, которое может улучшить читаемость. Оно служит разделителем между вычисляемой частью определения (параметром) и именем определения. В таком случае переопределять NOTFOUND не нужно. Функция определяющего слова вешается на слово-паразит. В отличие от определяющего слова, слово-паразит очень короткое ( = ТО is -> и т.п ). И одно и тоже слово можно использовать в разных блоках определений.
Вариант со словом-паразитом.
Код:
VOCABULARY values
ALSO values DEFINITIONS
: ;VALUES PREVIOUS ;
: is VALUE ;
PREVIOUS DEFINITIONS
: VALUES: ALSO values ;
Примеры
Код:
VALUES:
11 is aa
22 1980 * is bb
aa bb + is cc
;VALUES
Код:
CONSTANTS:
11 is aa
22 1980 * is bb
aa bb + is cc
;CONSTANTS