Язык Форт и его реализации


         

Описанный механизм аналогичен определению вектора,


Порядок использования переключателя ДЕНЬ-НЕДЕЛИ иллюстрирует следующий протокол работы:

> 3 ДЕНЬ-НЕДЕЛИ СРЕДА OK > 5 ДЕНЬ-НЕДЕЛИ ПЯТНИЦА OK

Описанный механизм аналогичен определению вектора, рассмотренному в . Его также можно задавать по-разному в зависимости от конкретных требований. В приведенной реализации неправильное значение выбирающего условия (выходящее за диапазон от 1 до 7) приведет к непредсказуемому результату, поскольку соответствующий контроль отсутствует. Чтобы ввести его в реализацию, нужно каким-то образом подсчитать число скомпилированных ссылок при завершении компиляции. Для этого можно применить способ, аналогичный компиляции переходов в шитом коде, введя вместо точки с запятой специальное слово, отмечающее конец переключателя.

Для реализации конструкции выбора через вложенные условные операторы создаются специальные слова, которые обрамляют всю конструкцию и каждую ее ветвь. В этом случае ветвь является обычной последовательностью форт-слов, аналогичной части «то» или части «иначе» условного оператора. Как и в случае условного оператора, конструкцию выбора можно использовать только внутри определений через двоеточие, т.е. в состоянии компиляции текстового интерпретатора. При этом все ее специальные слова имеют признак немедленного исполнения и компилируют необходимые проверки и переходы.

: CASE ( ->A0:CSP,4) ?COMP CSP @ !CSP 4 ; IMMEDIATE : OF ( 4->A:>MARK,1,5) 4 ?PAIRS COMPILE OVER COMPILE = [COMPILE] IF COMPILE DROP 5 ; IMMEDIATE : ENDOF ( A:>MARK,1,5->A2:>MARK,1,4) 5 ?PAIRS [COMPILE] ELSE 4 ; IMMEDIATE : ENDCASE ( A0,A1,1, ..,AN,4->) 4 ?PAIRS COMPILE DROP BEGIN SP@ CSP @ = 0= WHILE [COMPILE] THEN REPEAT ( А0) CSP ! ; IMMEDIATE : ДЕНЬ-НЕДЕЛИ ( N->) CASE 1 OF ." ПОНЕДЕЛЬНИК" ENDOF 2 OF ." ВТОРНИК" ENDOF 3 OF ." СРЕДА" ENDOF 4 OF ." ЧЕТВЕРГ" ENDOF 5 OF ." ПЯТНИЦА" ENDOF 6 OF ." СУББОТА" ENDOF 7 OF ." ВОСКРЕСЕНЬЕ" ENDOF CR . ." - ДЕНЬ НЕДЕЛИ?" ABORT ENDCASE ;


Содержание  Назад  Вперед