[ ( -->) (Левая квадратная скобка)
Переводит систему в режим выполнения.
] ( --> ) (Правая квадратная скобка)
Возвращает систему в режим компиляции.
LITERAL ( --> )
Во время комплицяции помещает находящееся на вершине стека значение как константу в список атомов последнего определенного слова. Является словом периода компиляции.
Пример:
4
: ADD4 ( n --> n+4) LITERAL + ;
В данном примере система, находясь в режиме выполнения, помещает значение 4 в стек. Затем словом : (двоеточие) система переводится в режим компиляции и создается словарная статься с именем ADD4 (в дальнейшем будем говорить "начинается определение слова такого-то"). Слово LITERAL является словом периода компиляции, то есть система, находясь в режиме компиляции, не помещает его в список атомов последнего определенного слова, а выполняет его. LITERALвыбирает значение со стека и помещает его в список атомов как константу. Слово является обычным словом периода выполнения и помещается в список атомов последнего определенного слова (в дальнейшем будем говорить "компилируется"). Слово ;(точка с запятой) завершает определение, переводит систему в режим выполнения. Сам по себе пример не имеет смысла, но если есть требование, что константу, которую необходимо иметь на месте 4, требуется расчитывать при выполнении и потом уже помещать в константу определяемого слова.
Также имеет смысл пользоваться данным приемом, когда константа сама по себе плохо документируется. Если необходимо обозначить, откуда она берется, то лучше делать так (расчет длины окружности):
2 PI *
: OKR ( rad --> okr )
LITERAL *
;
С помощью слов [ ] это можно сделать еще лучше:
: OKR ( rad --> okr )
[ 2 PI * ] LITERAL *
;
В этом случае значение 2*Pi вычислится на этапе компиляции и скомпилируется в текст OKR.