368
интерпретатор своих команд. Оператор ADDRESS задает имя программы-
среды, в которую передается команда.
Оба типа развитых командных языков наряду с одинаковыми
алгоритмическими возможностями обладают также еще одним
принципиально важным общим свойством – они являются языками
интерпретирующего типа. Командный файл REXX или sell не требует
компиляции. Эта означает, что полный анализ такого файла не
производится (или производится только в первом приближении), и
интерпретатор выполняет его команда за командой, "не заглядывая"
вперед. Переменные командного файла имеют единственный тип – "строка
символов", и основные манипуляции над ними представляют собой
строковые операции. При выполнении арифметики строковые данные
прозрачно преобразуются в числовые, а результат операции вновь
преобразуется в строку. Результаты выполнения программ, вызываемых в
командном файле. При выполнении каждого очередного оператора
командного файла производится подстановка вместо переменных shell-
или REXX-программы их значений. В обоих языках предусмотрены
средства "экранирования", защищающие строковые литералы от
интерпретации их как переменных. Строка, полученная после выполнения
подстановки, интерпретируется как оператор командного языка или – если
это невозможно – как команда ОС (или другой целевой среды). В REXX
имеется возможность даже сформировать символьную строку в
переменной REXX-программы, а затем выполнить ее как оператор языка.
Таким образом, командные языки ОС обладают всеми
возможностями языков программирования, и, в принципе, пригодны для
создания не только командных процедур, но и некоторых программ
обработки данных. Выполнение командных файлов в режиме
интерпретации, конечно, делает такие программы менее эффективными,
чем программы, написанные на языках компилирующего типа, но создает