.:Публикации:. [www.karlson.ru]


Вперед: Организация вызовов Вверх: Приложение Б. Псевдокод системы Назад: Структура виртуальной машины и   Содержание

Основные команды языка

a. push string1, string2, ..., stringn Команда записывает в стек строки. Сначала в стек записывается string1, потом string2 и т.д. Т.е. string1 оказывается глубже всех остальных строк в стеке. b. concat Команда склеивает две строки, находящиеся на стеке (более глубокая строка становится началом новой строки, верхняя -- концом). c. getcgi Имя CGI-переменной, лежащее на стеке, заменяется ее значением. Если переменной нет, возвращается пустая строка. d. setcgi На стеке лежит имя переменной и ее значение. Операция присваивает переменной это значение. e. getslot Имя слота, лежащее на стеке, заменяется его значением. Если такого слота нет, на стек кладется пустая строка. f. setslot На стеке лежит имя слота и его значение. Операция присваивает слоту это значение. g. call n, m Вызов модуля. При этом на стеке (от верха стека вниз): - m пар вида (имя слота, значение). - n значений упорядоченных аргументов - имя вызываемого модуля Если значение слота равно undef, в модуль передается значение слота текущего модуля. Если у call указан только один аргумент, m=0, если ни одного аргумента - и n, и m равны 0. Модуль обязан положить на стек некоторое значение. Если значение отсутствует, на стек кладется пустая строка. h. callm n, m, ...метки.. Вызов модуля без вычисления аргументов. При этом стек содержит (от верха стека вниз): - m имен слотов - имя вызываемого модуля Затем в коде идут участки кода, которые вычисляют тот или иной параметр. В вызове callm передается таблица смещений конца участков кода, ответственных за вычисление аргументов. К моменту вычисления аргументов со стека уже сняты имена слотов и имя вызываемого модуля. Код, вычисляющий аргумент, должен оставить на вершине стека вычисленное значение. Пример:
push "<FORM>"
...
push "if", L1, L2, L3
push "user_id"
getcgi
L1: push "save_button"
call
L2: push "user_is_not_registered"
call
L3: ...
push "</FORM">
Код рисует HTML-форму. Если установлена CGI-переменная user_id, код рисует кнопку "Save" через модуль "save_button" иначе возвращается значение "user_is_not_registered". i. redirect Команда останавливает формирование HTML-страницы и производит redirect на URL, который лежит на стеке. Примечание: Команды getslot/setslot, getcgi/setcgi являются простыми сокращениями вызовов соответствующих методов класса Library. Возможно, что будут введены и другие сокращения.

...домик на крыше...,поиск,гостевая книга,cv. Be free, use Linux!