Forth
http://fforum.winglion.ru/

структура словарей и поле флагов
http://fforum.winglion.ru/viewtopic.php?f=8&t=3115
Страница 1 из 4

Автор:  Victor__v [ Пт фев 17, 2017 13:26 ]
Заголовок сообщения:  структура словарей и поле флагов

Интересуют предложения по формату структуры словаря
А также содержимому в поле флагов

Моё видение
Словарь
хеш-имени
поле-флагов ( можно и без него )
поле кода ( самоукладка словаря в контекст )
поле связи ( главное поле )
поле свободной ячейки ( для here )
поле связи внутри словаря
поле notfound ( по умолчанию ' false ;
Если слово не найдено в словаре, то попытаться его "определить" число или др.
Если операция не увенчалась успехом, то продолжить поиск по контексту )

поле флагов
0 немедленное исполнение
1 временное слово
2 инлайн
3 ?
4 ?
5 ?
6 ?
7 ?

бит " я словарь" в моём понимании не нужен.
бит " исключи меня из поиска" может пригодиться, а может и нет. С ним всё сложненько

Автор:  gudleifr [ Пт фев 17, 2017 14:47 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

<тема для mOleg>

Автор:  chess [ Пт фев 17, 2017 17:38 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

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

Автор:  vikt [ Пт фев 17, 2017 17:55 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

Вопрос. В поле имени обязательно должны быть вписаны символы имени, или
можно ограничиться ссылкой на строку?

Автор:  Victor__v [ Пт фев 17, 2017 18:48 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

Цитата:
Вопрос. В поле имени обязательно должны быть вписаны символы имени, или
можно ограничиться ссылкой на строку?


Не обязательно.
Вариантов много.
Можно использовать указатель на строку, можно хеш вместо этого, можно саму строку пр.

Цитата:
Оставить можно поля имен, связи и кода(параметров).

Под связью подразумевается связь словаря, как слова внутри другого или как указатель на последнее слово в этом словаре?

Автор:  chess [ Пт фев 17, 2017 19:28 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

Вопрос. В поле имени обязательно должны быть вписаны символы имени, или
можно ограничиться ссылкой на строку?

Для локальных словарей символы имени. Слов в локальных словарях немного, собственно весь словарь можно представить строкой в которой: Имя1 адрес кода имени1 Имя2 адрес2 ... ИмяN адресN. Поиск адресов кода для имен через SEARCH(вместо SFIND).

Для глобального словаря(он один или максимум два) как угодно - лучше(имхо) если он устроен как обычно, но поиск кода имен через хэш-таблицу имен(имя-->хэш-->таблица-->адрес имени(сравнение имен)-->(есть сравнение)-->адрес кода(если нет сравнения имен, то обычный поиск по SFIND).

Никаких полей флагов не надо. Флаги для интерпретатора давать в виде суффиксов к именам слов. В этом случае видно какое это слово - немедленного исполнения или нет. Флаг SMUDGE тоже не нужен, потому как определяете слово с тем же именем что было раньше. Интерпретатор и без флага все правильно может сделать.

Автор:  Victor__v [ Пт фев 17, 2017 20:17 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

Цитата:
Никаких полей флагов не надо

Утверждение достаточно спорное.
От слов мы ожидаем вполне очевидного поведения. И оно м.б. любым.
циклы и if'ы, тому пример.
Цитата:
Флаги для интерпретатора давать в виде суффиксов к именам слов

IF'I DO'I DUP'C так что ли?
А как же быть с прежними наработками, где данных модификаций нет?

Автор:  chess [ Пт фев 17, 2017 20:56 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

Цитата:
От слов мы ожидаем вполне очевидного поведения.

Вводя поле флагов мы увеличиваем число состояний интерпретатора.
И при написании программы кроме текущего состояния этой программы
мы должны удерживать еще и состояние интерпретатора, которое к функционированию нашей программы
отношения не имеет. Это излишне.

Автор:  Victor__v [ Пт фев 17, 2017 21:58 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

Цитата:
Вводя поле флагов мы увеличиваем число состояний интерпретатора

Состояния-то два.
Если immediate , то execute иначе думаем дальше. compile, или инлайн подстановка.
полтора состояния это не так уж и много

Цитата:
мы должны удерживать еще и состояние интерпретатора, которое к функционированию нашей программы
отношения не имеет. Это излишне

Что его удерживать? При компиляции исходников основное состояние компиляция, при отладке интерпретация.
Естественно, могут быть и более сложные случаи. Но насколько они частят? У меня редко.

Автор:  chess [ Пт фев 17, 2017 23:24 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

На самом деле состояний интерпретатора больше-равно числу глобальных переменных в коде интерпретатора.

Автор:  chess [ Сб фев 18, 2017 11:34 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

Цитата:
На самом деле состояний интерпретатора больше-равно числу глобальных переменных в коде интерпретатора.

Не равно, конечно, а определяется числом глобальных переменных.
Под глобальными переменными обобщенно можно понимать не только STATE, BASE и т.п., но и глобальные структуры интерпретатора, а это и стек параметров и стек порядка поиска в словарях. Состояние этих глобальных структур и определяет состояние интерпретатора. Управлять этим приходится - переставлять, копировать, удалять параметры на стеке, заводить словари, менять порядок поиска. Все это можно убрать. Интерпретатор будет иметь только одно состояние - исполнение. Словарь только один. Управление созданием программы только в одном месте - на уровне имен слов.

Автор:  Victor__v [ Сб фев 18, 2017 13:13 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

Цитата:
Словарь только один

От задачи зависит.
Помню заводил словарь в СПФ с одной простой целью - распарсить файл и вычленить из него все цифры
И вызывал примерно так: file-num::include

Цитата:
Управлять этим приходится

Фиг с ним, со стеком.
А насчёт смены порядка поиска проблемы не чувствую. Всяких там voc-swap voc-over voc-rot и т.д. не требуется.
Операций над стеком словарей требуется немного: убрать/добавить/поменять словарь, сохранить контекст, восстановить контекст

Автор:  Hishnik [ Сб фев 18, 2017 16:33 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

Victor__v писал(а):
Если слово не найдено в словаре, то попытаться его "определить" число или др.
Если операция не увенчалась успехом, то продолжить поиск по контексту )

Тогда слово, состоящее из шестнадцатериных символов, будет то находиться, то нет - в зависимости от BASE. Например, A, B (это вообще переменные), DEAD, FACE, определенные в другом словаре, будут определены как шестнадцатиричные числа.
Числа ищутся после завершения поиска по всем словарям (которые доступны в текущем контексте, конечно).

Victor__v писал(а):
бит " я словарь" в моём понимании не нужен.

Рассматриваем два словаря. Один указывает на другой. Теперь вопрос - куда он должен указывать? На последнее слово, определенное в том словаре? Но когда в первом словаре появятся новые слова, они будут только из него и видны, а второй словарь будет по-прежнему указывать на то слово, которое было последним в момент его создания. Поэтому нужно вместо продолжения прохода по цепочке полей связи сначала узнать, где вход в словарь-родитель. Для этого и нужен флаг "я словарь", чтобы рассматривать LFA не как указатель на следующее слово в цепочке поиска, а как указатель на вход в цепочку следующего словаря. Ничего страшного тут нет, просто вместо LFA @ словарь делает LFA @ @
Victor__v писал(а):
бит " исключи меня из поиска" может пригодиться, а может и нет. С ним всё сложненько

Зависит от того, как организовать рекурсию. Если такого флага вообще нет, то нельзя писать определения вида

: +
(какое-то условие)
IF (что-нибудь новое) ELSE
+ (старый вариант плюса)
THEN
;

Без SMUDGE новый вариант + тут же найдется. А SMUDGE заставляет вводить специальное слово RECURSE, потому что текущее незавершенное определение вроде уже есть, но внутри самого себя не находится.

Автор:  Victor__v [ Сб фев 18, 2017 19:09 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

Цитата:
Тогда слово, состоящее из шестнадцатериных символов, будет то находиться

Действительно проблема. Можно тогда сделать поиск по контексту словарей, а уже потом если слово не найдено, применять цепочку из значений notfound-полей.

Цитата:
Рассматриваем два словаря. Один указывает на другой. Теперь вопрос - куда он должен указывать? На последнее слово, определенное в том словаре? Но когда в первом словаре появятся новые слова, они будут только из него и видны, а второй словарь будет по-прежнему указывать на то слово, которое было последним в момент его создания

Как-то не понял.
В словаре присутствует слово, которое является другим словарём. И?
Если активировать слово, оно обновит контекст. И из него слова словаря-родителя будут не видны. А внешний словарь не будет иметь доступа к словам внутреннего словаря.

Код:
просто вместо LFA @ словарь делает LFA @ @

создавал набросок системы словарей, где код LFA @ @ .... @ просто приведёт в конце концов к нулю. ( указатель на указатель). Словарь отличается, в моём представлении, дополнительными полями, где и хранится поле связи внутри словаря.

Автор:  mOleg [ Сб фев 18, 2017 20:10 ]
Заголовок сообщения:  Re: структура словарей и поле флагов

возможно, вы не видели, а возможно видели, на всякий случай Устройство словарных статей и словарей в форке.
Кстати, с числами у меня все гораздо проще и интереснее, чем обычно :)

Страница 1 из 4 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/