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


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


Когда слово ищется, его имя снова кодируется (формируется тот же хэшкод) и определяется маршрут поиска, где оно должно быть найдено. Таким образом, только 1/32 словаря должна быть просмотрена, чтобы найти слово, что значительно ускоряет компиляцию, так как поиск - процесс времяемкий. Если слово связано с маршрутом поиска на фазе компиляции, то, конечно, оно может быть найдено позднее на том же самом пути поиска. Этот метод требует большего по размеру описания слова и так же зависит от способа хэш-кодирования, который определяет номера маршрутов, которые (в среднем) распределяются равномерно. Правильное использование большого числа маршрутов просмотра всегда ускоряет поиск в словаре, независимо от того, используются ли контекстные словари.

Вы помните, что слово FORGET служит для удаления слов из словаря. Ниже показано, как оно работает. Формат обращения FORGET (name) если (name) отсутствует в текущем словаре, будет дано сообщение об ошибке. Слово FORGET устанавливает верхнюю границу словаря (указанную словом HERE и содержащуюся в переменной пользователя DP) равной первому байту слова (name) (т.е. его NFA), эффективно удаляя все слова и контекстные словари, описанные позднее. Может показаться, что FORGET не обращает внимания на контекстные словари и просто укорачивает словарь до имени (name), но FORGET делает намного больше. Все маршруты просмотра во всех затронутых словарях должны быть поправлены FORGET так, чтобы последующий поиск начинался с самого последнего оставшегося слова в контекстном словаре, из которого были удалены слова. Очевидно, что делается много больше, чем просто изменяется значение переменной DP. В некоторых, версиях слово FORGET, прежде чем что-либо делать, проверяет адрес, хранящийся в переменной пользователя FENCE, чтобы убедиться, что FENCE содержит адрес меньше, чем слово, которое следует забыть. Переменная FENCE, которая может быть задана как HERE FENCE ! защищает все, что лежит в словаре ниже адреса, который в нее записан, от случайного стирания.


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