Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб ноя 28, 2020 03:22

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Notfound в Nova
СообщениеДобавлено: Пт июл 10, 2020 17:02 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1061
Благодарил (а): 1 раз.
Поблагодарили: 8 раз.
При просмотре записей на форуме касательно моего форта несколько раз поднималась "предъява" к механизму notfound.
Явная вариация на тему "не читал, но осуждаю".

Распишу тут.
Реализация данного механизма в Nova-forth реализована совершенно иначе, чем в СПФ.
Мой вариант перебирает словари на стеке контекста и вызывая из них соответствующий код
до тех пор пока один их кодов не завершится успехом ИЛИ
не кончатся словари.

Реализация:
Код:
: NOTFOUND-GENERATE    \ addr u -- ???
VOC0 @ CONTEXT 2>R   \ R: -- down top \ переносим на стек возвратов указатели на дно и вершину стека контекста
2>R \ R: down top -- down top addr u
BEGIN
2 RPICK @ \ получаем LFA словаря из стека возвратов
L>notfoundFA @ \ достаем указатель на код обработчика
DUP IF 2R@ ROT EXECUTE THEN \ если обработчик есть (не равен 0) подсовываем ему строку и вызываем
\ если обработчик возвратил ИСТИНУ (не 0), то уходим
IF RDROP RDROP RDROP RDROP EXIT THEN
2R>
2R@ XOR WHILE \ если текущий указатель равен указателю дна стека контекста, уходим из цикла
R> CELL- >R \ смещаем текущий указатель стека словарей ближе к указателю дна стека
2>R
REPEAT
-2003 THROW
;


Короче, мой вариант в отличие от СПФ-кого работает за исчислимое время и не зависит от числа слов в словаре т. е. просто не страдает херней.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB