Язык процедур 2-REXX для OS-2


INTERPRET


Инструкция INTERPRET используется для выполнения инструкций, построенных динамически в процессе вычисления выражения.

Выражение вычисляется, а затем обрабатывается (интерпретируется) так, как если бы результирующая цепочка символов была строкой, вставленной в исходный файл (и ограниченной DO; и END;).

Допустимы любые инструкции (включая инструкции INTERPRET), но конструкции типа DO ... END и SELECT ... END должны иметь завершенный вид. Например, строка инструкций, которая интерпретируется, не может содержать инструкции LEAVE или ITERATE (действительные только внутри повторяющегося цикла DO), если она при этом не содержит полную повторяющуюся конструкцию DO ... END.

Для удобства пользователя в конце выражения подразумевается точка с запятой.

Пример: data='FRED' interpret data '= 4' /* a) построит строку "FRED = 4" */ /* b) вычислит FRED = 4; */ /* Теперь переменной "FRED" будет присвоено значение "4" */

Пример: data='do 3; say "Привет!"; end' interpret data /* Выведет: */ /* Привет! */ /* Привет! */ /* Привет! */

Примечания:

1      Метки внутри интерпретируемой строки не являются неизменными и поэтому игнорируются. Поэтому выполнение инструкции SIGNAL из интерпретируемой строки приведет к немедленному выходу из этой строки до того, как начнется поиск метки.
 2      Если концепция инструкции INTERPRET для Вас нова и получаемые результаты непонятны, то полезно выполнить эту инструкцию, указывав в процедуре TRACE R или TRACE I.

Пример: /* Мы имеем небольшую программу. */ Trace Int name='Китти' indirect='name' interpret 'say "Привет"' indirect'"!"'

При выполнении этой процедуры на экран выводится следующая информация: [C:\]kitty kitty 3 *-* name='Китти' >L> "Китти" 4 *-* indirect='name' >L> "name" 5 *-* interpret 'say "Привет"' indirect'"!"' >L> "say "Привет"" >V> "name" >O> "say "Привет" name" >L> ""!"" >O> "say "Привет" name"!"" *-* say "Привет" name"!" >L> "Привет" >V> "Китти" >O> "Привет Китти" >L> "!" >O> "Привет Китти!" Привет Китти! [C:\]

Строки 3 и 4 устанавливают переменные, используемые в строке 5. Вычисление строки 5 происходит в два этапа. Сначала строится строка, которая будет интерпретироваться при помощи текстовой строки, переменной (INDIRECT) и еще одного литерала. Затем результирующая строка, состоящая только из символов, интерпретируется так, как если бы она была частью исходной программы. Так как полученная строка является новым предложением, то она трассируется следующим образом (второй трассировочный флаг *-* под строкой 5), а затем выполняется. После этого текстовая строка объединяется со значением переменной (NAME) и вторым литералом, и окончательный результат выводится на экран в следующем виде: Привет Китти!

 3      Во многих случаях вместо инструкции INTERPRET можно использовать функцию VALUE. Например, строку 5 в последнем примере можно заменить следующей: say "Привет" value(indirect)"!"

Использование инструкции INTERPRET обычно требуется лишь в специальных случаях, например, когда за один раз должно быть интерпретировано несколько операторов.



Содержание раздела