Язык программирования Форт


Глава 14. Память Форта. Словари и контекстные словари - часть 13


Если мы выделим CFA слов, используемых при описании BASE?, скобками ({...}), содержимое поля параметров BASE можно будет представить как

Поле параметров {BASE} {@} {DUP} {DECIMAL} {.} {BASE} {!} {EXIT}

В последней ячейке поля параметров любого описания типа двоеточие лежит адрес слова, названного EXIT, которое кладется туда оператором ; (точка с запятой). Слово EXIT необходимо, чтобы за вершить исполнение слова и передать управление слову, из которого произошло обращение. (Это исчерпывающе объяснено в гл.15.)

Как запоминаются имена?

Простейший способ запомнить имя слова BASE? в словаре заключается в том, чтобы записать число букв в слове, после чего занести буквы в ASCII представлении, т.е. оформить как счетную строку. Если записано имя полностью, тогда имеется возможность получить полный список слов в словаре. Это делается посредством слов WORDS, VLIST или CATALOG, в зависимости от версии. Данное преимущество компенсируется потерями в памяти и увеличением времени, необходимого для поиска слова. Форт-79 и Форт-83 специфицируют только то, что различные слова должны иметь до 31 символа и быть уникально закодированы и узнаваемы. Как это сделать, оставлено на усмотрение разработчику языка. Общим нестандартным методом является запоминание числа символов в исходном имени, за которым следуют только первые три символа имени.

В некоторых версиях пользователь может определить максимальное число запоминаемых символов, изменяя величину системной переменной с именем WIDTH, прежде чем компилировать текст программы. Опасность укорочения исходного имени до заданного числа символов заключается в том, что длинные имена с равным числом символов могут оказаться не уникальными. Таким образом, BASE? и BASE! следует переименовать на ?BASE и !BASE для того, чтобы они были различимыми. MMSFORTH использует необычную схему. Он кодирует (хэширует) слова так, чтобы вставить как можно больше информации в четыре байта поля имени. Таким образом, никакого дополнительного места в словаре не используется, так как имена укорочены, но вероятность неуникальности имени сведена к минимуму.


Начало  Назад  Вперед