REXX

REXX (рекс) — интерпретируемый язык программирования, разработанный фирмой IBM. Существуют как коммерческие, так и свободно распространяемые реализации данного языка.

Пик своего распространения REXX получил в середине 90-х вместе с популярностью операционной системы OS/2. Это связано с тем, что интерпретатор REXX’а мог вызывался как из коммандного процессора, который в результате мог исполнять такие скрипты как операторы коммандной строки (аналогично bash в Unix/Linux), так и из любого приложения.

В том случае, когда интеpпpетатоp REXX вызывается из cmd.exe (или 4os2.exe) он исполняет командный файл. Если он вызывается из почтового pедактоpа FleetStreet — он исполняет командный файл FleetStreet. Сам по себе REXX не пpивязан к конкpетной части системы и может использоваться любой пpогpаммой как «свой» язык, пpи этом каждая из использующих pекс пpогpамм может добавить к нему свои функции и опеpатоpы, котоpые будут доступны только пpи pаботе pекса в контексте этой пpогpаммы. Hапpимеp, электpонные таблицы mesa/2 добавляют в pекс команду, котоpая позволяет считывать и записывать содеpжимое ячеек электpонной таблицы, и т. п.

С тех пор язык получил развитие далеко за пределами OS/2, но традиционно его свойствами остались удобный доступ к командам операционой системы, мощные операции со строками, упрощённая обработка ошибок и встроенный дебаггер.

Изначально REXX не был обьектно-ориентированным, хотя в настоящее время существуют и такие версии языка. Синтаксически язык слегка напоминает упрощённый (для человеческого понимания) ПЛ/1. Переменные в REXX не типизированы и не требуют декларации.

Из особенностей языка следует отметить мощный и удобный оператор PARSE для разбора строк. Его синтаксис

   parse [upper] исходник шаблон

позволяет писать легко читаемые конструкции вроде

   myVar = "Вася Иванов"
   parse var MyVar firstName lastName
   say "Имя:" firstName
   say "Фамилия:"  lastName

или, к примеру, если имя написано через запятую, можно указать это в шаблоне

   myVar = "Иванов, Вася"
   parse var MyVar LastName "," FirstName
   say "Имя:" firstName
   say "Фамилия:"  lastName

а также можно пользоваться прямой индексацией столбцов:

   myVar = "(202) 123—1234"
   parse var MyVar 2 AreaCode 5  7 SubNumber
   say "Код города:" AreaCode
   say "Телефон:" SubNumber

выведет следующие строки на экран:

   Код города: 202
   Телефон: 123—1234

Русский народный калькулятор

Пример программы на рексе — калькулятор, выполняющий шесть операций (+,-,*,/,//,%), понимающий операции в скобках и произвольное количество переменных:

 /* calc.cmd  наpодный калькулятоp (с) 1998 */
 SAY 'Русский наpодный калькулятоp v0.0'
 XX = "X="; X0 = "X=X"
   SAY 'Введите выpажение или Q для завершения'
 DO FOREVER
   PULL v
   IF v = 'Q'  THEN  LEAVE 
   S=LEFT(v,1)
   IF(DATATYPE(S,'A'))
     THEN
     DO
       IF(POS('=',v) = 0)
          THEN
          DO  
              INTERPRET XX  v 
              SAY 'X=' X 
          END
          ELSE   
                 INTERPRET  v
     END
   ELSE
     DO  
        INTERPRET X0  v
        SAY 'X=' X 
     END
 END
EXIT

Пример выполнения программы (> обозначен ввод пользователя) :

Русский наpодный калькулятоp v0.0
Введите выpажение или Q для завершения
>300+(12.5*2+5)
X= 330.0
>Y=X*2
>Y+2
X= 662.0
>+33
X= 695.0
>+123
X= 818.0
>/10
X= 81.8
>//2
X= 1.8
>+1024
X= 1025.8
>%4
X= 256

Ссылки



 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home