В своей внутренней памяти интерпретатор PostScript поддерживает несколько структур данных. Большинство команд сценария выполняются в стеке операндов, в котором могут содержаться числа, процедуры, массивы и другие типы объектов. Для того чтобы протолкнуть число в стек операндов, в сценарии просто пишется это число. В следующем фрагменте сценария
34 -5.2 % push 34 then -5.2 onto the stack
% в стек проталкивается сначала 34. а затем -5.2
12 % push 12 on top
% в вершину проталкивается 12
вначале в стек проталкивается число 34, затем -5,2 проталкивается выше 34, и наконец в вершину проталкивается 12. На рис. Г.1 показан стек в виде классического штабеля подносов в кафетерии:
1 См., например, http://www.engin.umd.umich.edu/CIS/course.des/cis400/forth/forth.html, а также книгу Лео Броди «Основы FORTH* [Brodie, Leo/Forth, INC., Starling FORTH, 2d ed. (Engleuood Cliffs, NJ: Prentice-Hall, 1987)].
1004
Приложение Г. Введение в PostScript® по мере того как каждый элемент (item) помещается на вершину, он проталкивает все остальные элементы дальше вниз. х
Мы используем более простую форму записи для иллюстрации того, что содержится в стеке после данной операции: стек показан «сбоку», причем его вершина находится справа. Тогда последовательность проталкиваний, показанная на рис. Г.1, выглядит следующим образом:
<empty> (meaning the stack is empty)
(подразумевается, что стек пуст)
34 -5.2 34 -5.2 12
Г1.3. Некоторые операции со стеком: pop, dup, exch, clear
Существует несколько операторов языка PostScript, называемых «командами», с помощью которых можно легко управлять стеком. Например, команда pop удаляет верхний элемент (и отбрасывает его), поэтому последовательность команд:
34 -5.2 12 pop
оставляет стек в состоянии 34 -5.2.
Мы будем использовать стрелку вправо (-») в качестве стенографического символа вместо слов «оставляет стек в состоянии», тогда команда pop может быть описана так:
34 -5.2 12 pop -* 34 -5.2
Запись будет выглядеть еще короче, если пропускать те элементы, которые находятся глубже в стеке и не влияют на рассматриваемый оператор (то есть числа 34 и -5.2), тогда команда pop будет выглядеть следующим образом: