Forth
http://fforum.winglion.ru/

структура слова
http://fforum.winglion.ru/viewtopic.php?f=24&t=1148
Страница 1 из 1

Автор:  mOleg [ Вт янв 29, 2008 23:59 ]
Заголовок сообщения:  структура слова

Поговорим немного о том, что из себя представляют слова в форте, и как они связываются в словари. Принято разделять словарную статью на четыре следующих стандартных поля:

LFA - поле связи ( link field address )
NFA - поле имени ( name field address )
CFA - поле кода ( code field address )
PFA - поле параметров ( parameter field address )

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

Для выполнения статического кода программы (такого, который не пытается искать слово в словаре, перед тем, как его выполнить) достаточно двух полей CFA и PFA, причем поле PFA может отсутствовать.

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

Если рассмотреть несколько различных фортов, то можно увидеть, что словари в них устроены немножечко по-разному, например, в СПФ словарная статья выглядит следующим образом:
<pre>
LFA: back-link - ссылка на предыдущее слово (в поле имени)
to_cfa - адрес поля кода слова
NFA: word_name - имя слова
aligning - выравнивание начала кода
CFA: - поле кода
PFA: - поле данных (необязательно)
</pre>
Надо сказать, что формат словарной статьи сильно зависит от того, какой процессор используется и какой тип кода ФВМ лежит в основе форт-системы.

А вот так выглядит словарная статья в СМАЛ32:
<pre> ╔════╤═════╤═════╤═══════════╤═════════════════════════════════════════╗
║ ## │ Off │ Len │ Field │ Note
╠════╪═════╪═════╪═══════════╪═════════════════════════════════════════╣
║ 1 │ 0 │ 4 │ HASHPTR │ HASH-указатель. Поле содержит адрес
║ │ │ │ │ словарной статьи слова с тем же
║ │ │ │ │ значением HASH-функции, определенного
║ │ │ │ │ раньше данного.
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 2 │ 4 │ 4 │ RTPTR │ Указатель на таблицу RTABLE (поле с
║ │ │ │ │ тем же именем ), расположенную вслед за
║ │ │ │ │ полем кода и полем параметров (или 0,
║ │ │ │ │ если таблица отсутствует)
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 3 │ 8 │ 4 │ │ Reserved field
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 4 │ 12 │ 4 │ LINK │ Содержит адрес словарной статьи
║ │ │ │ │ предыдущего слова в словаре
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 5 │ 16 │ 4 │ ATTRS │ Поле атрибутов
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 6 │ 20 │ 4 │ CFAPTR │ Адрес поля кода слова. Содержит адрес
║ │ │ │ │ поля CODE этой же словарной статьи
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 7 │ 24 │ 4 │ CODELEN │ Длина поля кода вместе с полем
║ │ │ │ │ параметров (если оно присутствует)
║ │ │ │ │ данной словарной статьи
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 8 │ 28 │ 4 │ VOCID │ Идентификатор словаря, к которому
║ │ │ │ │ принадлежит данное слово
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 9 │ 32 │ 1 │ NAMELEN │ Длина имени слова. Вместе со следующим
║ │ │ │ │ полем образует строку со счетчиком
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 10 │ 33 │ ??? │ NAME │ Имя слова - длиной не более 255
║ │ │ │ │ символов. Допускается использование
║ │ │ │ │ символов кириллицы в именах
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 11 │ ??? │ 1 │ NAMETERM │ Нулевой символ. Вместе с предыдущим
║ │ │ │ │ полем образует строку в формате ASCIIz
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 12 │ ??? │ ??? │ CODE │ Код, определяющий семантику слова
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 13 │ ??? │ ??? │ PARAS │ Поле параметров (может отсутствовать)
╟────┼─────┼─────┼───────────┼─────────────────────────────────────────╢
║ 14 │ ??? │ ??? │ RTABLE │ Таблица настройки слова на новый
║ │ │ │ │ адрес
╚════╧═════╧═════╧═══════════╧═════════════════════════════════════════╝
</pre>

Автор:  Kopa [ Ср янв 30, 2008 13:42 ]
Заголовок сообщения: 

Название топика, с моей точки зрения, не совсем правильно выбрано

т.к. наличие признаков ( например IMMEDIATE), характеризующих варианты использования слова,
тем более способ их хранения отходит от исходно введенного определения слова,
как простого понятия:)

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