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


         

Выбор по целому


Выбор по целому — распространенная конструкция в языках программирования. Она является обобщением условного оператора, который осуществляет выбор между двумя последовательностями операторов — частью «то» и частью «иначе» — по логическому значению (ИСТИНА или ЛОЖЬ) условия. В конструкции выбора по целому в качестве значения условия выступает целое число, и выбор осуществляется между несколькими альтернативными ветвями, каждая из которых соответствует определенному значению условия или некоторому множеству таких значений. Как правило, множества значений условия для разных ветвей не должны пересекаться. Обычно эти множества задают явным перечислением отдельных значений или указанием диапазона для них. Разберем два варианта реализации выбора по целому. В первом используется переключатель, во втором — вложенные условные операторы.

В случае реализации через переключатель каждая ветвь должна задаваться отдельным форт-словом. Пусть имеется несколько ветвей, каждая из которых задается своим порядковым номером. Из адресов компиляции этих ветвей в соответствии с их порядковыми номерами строится вектор-переключатель, и нужная ветвь выбирается по порядковому номеру. Определяющее слово SWITCH (переключатель) компилирует такой вектор в поле параметров определяемого слова и задает выбор альтернативы в исполняющей части:

: SWITCH ( ->) ?EXEC CREATE SMUDGE ] DOES> ( I:НОМЕР ВЕТВИ,PFA->) SWAP 1- 2 * + @ EXECUTE ;

Создающая часть строит новую словарную статью и переключает текстовый интерпретатор в состояние компиляции. Таким образом, следующие слова будут компилироваться в поле параметров определяемого слова. Слово SMUDGE выставляет разряд «Не готов» в байте-счетчике поля имени, делая данную статью «невидимой» при поиске слов в словаре. Этот разряд будет сброшен словом ; (точка с запятой), которое завершает компиляцию такого переключателя. Например:

: W1 ." ПОНЕДЕЛЬНИК" ; : W2 ." ВТОРНИК" ; : W3 ." СРЕДА" ; : W4 ." ЧЕТВЕРГ" ; : W5 ." ПЯТНИЦА" ; : W6 ." СУББОТА" ; : W7 ." ВОСКРЕСЕНЬЕ" ; SWITCH ДЕНЬ-НЕДЕЛИ W1 W2 W3 W4 W5 W6 W7 ;




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