Связь с администрацией сайта:       

demo

Среди толпы я одинок

13. Словарь и лексический анализ в Z-машине

13.1 Хранение
Таблица «Словарь» хранится в статической памяти , и ее адрес байта хранится в слове заголовка на $ 08.
 
 
13.2 Заголовок
Таблица начинается с короткого заголовка:
  n     list of keyboard input codes   entry-length  number-of-entries
 byte      ------n bytes-----------------       byte             2-byte word
 Входные данные с клавиатуры, то есть коды "слова-разделители"(word-separators): как правило (в Inform в обязательном порядке) эти коды ZSCII для точки, запятой и двойных кавычек. Обратите внимание, что символ пробела (32) никогда не должен быть словом-разделителем. "Длина входа"(entry length) длина записи каждого слова в таблице «Словарь». (Он должен быть в версиях от 1 до 3, по крайней мере в 4, и по меньшей мере 6 и в более поздних версиях.)
13.2.1
Обратите внимание, что таблица слов-разделителей могут содержать только коды, которые определены в ZSCII для ввода и вывода.
 
В версиях от 1 до 3, каждое слово имеет запись в виде
encoded text of word        bytes of data
  ------- 4 bytes ------   (entry length-4) bytes
 Интерпретатор игнорирует байт данных (предположительно парсер игры будет использовать его). Закодированный текст содержит 6 Z-символов (он всегда дополняется с Z-символа 5, чтобы сделать до 4 байт: см S 3). Текст может содержать пробелы или другие слова-разделители (хотя, если это так, то интерпретатор никогда не будет соответствовать любому текста из словаря, а именно слову в вопросе: удивительно, что это может быть полезным и трюк используется в библиотеке Inform).
 
13.4 Записи (более поздние версии)
В версии 4 и более поздних, закодированный текст имеет 6 байт и всегда содержит 9 Z-символов.
 
Записи слова следуют сразу после словарного заголовка и должны быть приведены в порядке возрастания номеров кодированного текста (когда кодированный текст рассматривается как 32 или 48-битное двоичное число с наиболее значимым байтом). Он не должен содержать две записи с одинаковым закодированным текстом.
 
13.6 Лексический анализ
Лексический анализ происходит в двух случаях: по запросу опкода tokenise  (в этом случае он может использовать любую таблицу словаря) , а также во время ввода команды игры (в этом случае используется стандартный словарь).
13.6.1
Во-первых, текст разбивается на слова. Пробелы разделяют слова и в данном случае они игнорируются. Разделители слов также разделяют слова. Таким образом, текст «fred,go fishing» делится на четыре слова:
fred / , / go / fishing
 13.6.2
Каждое слово затем кодируется как строка Z-машины в словарной форме, и затем следует поиск по словарю.
13.6.3
А "синтаксический анализ"(parse table) затем записывается, записывая количество слов, длину и положение каждого слова и адрес каждого слова в словаре, которое находится там. Для формата см опкод read.
 
Примечание.
Обычно (в Inform, в обязательном порядке) есть три байта данных в словарных записях, так что длина словарных записей 7 и 9 в начале и конце Z-машины, соответственно.
Крайне важно, чтобы словарные записи в цифровом порядке байтов были зашифрованы текстом, так что интерпретаторы могут искать словарь разными способами (например, с помощью алгоритма binary-chop). Поскольку буквы в A0 расположены в алфавитном порядке, поскольку биты упорядочены в правильном направлении, и потому что строка ввода 5 меньше, чем значения для букв, то численное упорядочение соответствует нормальному английскому словарю в алфавитном порядке для обычных слов. (Например, "an" идет перед "anaconda ".)
Все скомпилированные игры Infocom и Inform содержат слова, чей начальный символ не является буквой (например, "#record").
Linards Ticmanis сообщает, что некоторые из интерпретаторов Infocomпреобразуют пробелы в знаки вопроса перед лексическим анализом. Это поведение не по Стандарту. (Таким образом, набрав в "Zork I" фразу "What is a grue?" больше не сработает. Игрок должен набрать вместо этого "What is a grue")
 
Rate this item
(0 votes)
Login to post comments