<<< BACK NEXT >>>

ИСПОЛНЕНИЕ ПРОГРАММ CAPER (общие принципы)

Выполнение программы языка 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, также как и любой модуль исходного текста программы, поданного первым на компиляцию и исполнение.

<<< BACK NEXT >>>