Семь уроков по PostScript


Траектория отсечения - часть 4


В интерпретаторе имеется два встроенных словаря, называющихся systemdict и userdict (в PostScript Level 2 к ним добавился ещё один словарь – globaldict). Первый из них связывает (ассоциирует) имена всех операторов языка с их значениями (т. е. действиями, которые выполняются самим интерпретатором). Второй словарь предназначен для связи имён переменных среды с их значениями. Оба встроенных словаря находятся внизу стека (userdict над systemdict) и не могут быть из него удалены.

 

Операторы для работы со словарями

 

Создать пустой словарь ёмкостью N элементов можно с помощью оператора dict. Его синтаксис:

число_элементов dict à словарь

Этот пустой словарь помещается в стек операндов. Аргумент число_элементов

не может быть отрицательным.

Оператор currentdict выполняет обратное действие – помещает копию текущего словаря в стек операндов.

Синтаксис: - currentdict à словарь

Оператор countdictstack пересчитывает число словарей, находящихся в стеке словарей, и помещает это число в стек операндов.

 

Синтаксис: - countdictstack à int

 

Оператор cleardictstack извлекает из стека все словари, кроме постоянных.

Синтаксис: - cleardictstack à -

 

Для замены или внесения нового элемента в словарь используется оператор put. На самом деле этот оператор полиморфен и позволяет также заменять элементы массивов и строк.

Синтаксис:

массив индекс значение put à -

словарь ключ значение put à -

строка индекс целое

put à -

 

Если первый операнд массив или строка, то второй рассматривается как индекс, значение которого лежит в диапазоне от 0 до n-1 (где n – длина строки или массива). Элемент с этим индексом замещается третьим операндом.

Если первый операнд — массив, то второй —  рассматривается как ключ и в словаре сохраняется пара ключ--значение, если данный ключ не будет найден, либо замещается только значение, если пара с таким ключом уже существует. Конечно, при создании нового входа в словарь интерпретатор проверяет наличие там свободного места и выдаёт сообщение об ошибке dictfull, если число входов уже исчерпано.




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