Выполнение программы языка CAPER начинается с подачи на вход машины языка
блока команд с именем MAIN. Обработка блока осуществляется последовательным
выбором составляющих его команд и их исполнением. Управление последовательностью
выбора команд внутри блока осуществляется с помощью традиционных конструкций типа
if <выражение 0>
. . .
[ elseif <выражение 1> ]
. . .
[ elseif <выражение 2> ]
. . .
[ else ]
. . .
endif
или
switch < выражение 0 >
[ case [ < выражение 1 > | < строковый или числовой литерал > ] ]
. . .
[ break ]
. . .
[ case [ < выражение N > | < строковый или числовой литерал > ] ]
. . .
[ break ]
. . .
ends
Все <выражения> в приводимых конструкциях являются арифметическими выражениями (их результатом является число). Ненулевое значение интерпретируется как истина, ноль – ложь.
В Caper представлены операторы итерирования (циклы):
while <выражение>
. . .
endw
и
repeat
. . .
until <выражение>
и команд условного и безусловного перехода
if <выражение> go <метка>
go <метка>
Изменить последовательность выполнения команд внутри циклов можно переходом вовне тела цикла, а также командами
continue
и
break
BREAK принуждает покинуть цикл или switch и перейти на первую команду, следующую за его телом (после закрывающей скобки конструкции: endw, ends, until).
Принудительный повтор можно осуществить как с помощью CONTINUE, так и с помощью команды перехода по метке.
Возможно обусловленное использование данных операторов:
IF <выражение> BREAK
IF <выражение> CONTINUE
Пример:
y := array( 'V', null , a1 )
y[1] := 1, y[2] := 1
i := 0
while ( i += 1 ) < 100
if i == 50 continue
y[ i ] := y[ i-1 ] + y[ i-2 ]
endw
repeat
y[ i ] := y[ i-1 ] + y[ i-2 ]
if y[ i ] > 10000000 break
if y[ i ] < 0 go lab1
until ( y[ i ] > 100000000'G || ( i -= ) > 0 )
. . .
lab1:
. . .
Выполнение каждого элемента блока - команды - называется шагом интерпретации-исполнения.
Стартовый блок MAIN не описывается явно, а порождается при компиляции и
запуске на выполнение исходного текста программы, или же после загрузки
первого объектного модуля CAPER. Впоследствии блок MAIN может быть уничтожен
компиляцией нового текста программы или загрузкой в качестве MAIN нового
объектного модуля.
Стартовым модулем с именем MAIN может стать любой объектный модуль Caper, также как и любой модуль исходного текста программы, поданного первым на компиляцию и исполнение. |