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
[править] Ссылки
- Страничка языка REXX на IBM
- Коммерческий интерперетатор REXX для Windows, OS/2 и DOS
- Свободно распространяемый кросплатформенный интерпретатор Regina Rexx
- История появления ARexx для AmigaOS
- Краткий обзор ARexx
- ARexx в AmigaOS