REXX
REXX или Rexx (REstructured eXtended eXecutor, произносится «рекс») — интерпретируемый язык программирования, разработанный фирмой IBM. Существуют как коммерческие, так и свободно распространяемые реализации данного языка.
Пик своего распространения REXX получил в середине 1990-х вместе с популярностью операционной системы OS/2. Это связано с тем, что интерпретатор REXX’а мог вызываться как из командного процессора, который в результате мог исполнять скрипты, состоящие из операторов командной строки (аналогично bash в GNU), так и из любого приложения.
Широкое распространение язык получил в операционной системе AmigaOS (включая последнее издание 3.2 в 2021г.) в вариации ARexx. Язык позволяет интегрировать новые функции в приложения и осуществлять автоматизацию процессов и связь между различными программы.С учетом особенностей операционной системы AmigaOS язык получил множество сторонних расширений через динамические библиотеки включая конструкторы графических интерфейсов, что в свою очередь привело к появлению многих популярных самостоятельных программ и пакетов расширения для различных редакторов. Программы могут вызываться из командной строки, из программ и самостоятельно из иконок на рабочем столе.
В том случае, когда интерпретатор REXX вызывается из cmd.exe (или 4os2.exe) он исполняет командный файл. Если он вызывается из почтового редактора FleetStreet — он исполняет командный файл FleetStreet. Сам по себе REXX не привязан к конкретной части системы и может использоваться любой программой как «свой» язык, при этом каждая из использующих REXX программ может добавить к нему свои функции и операторы, которые будут доступны только при работе REXX’а в контексте этой программы. Например, электронная таблица mesa/2 добавляет в REXX команду, которая позволяет считывать и записывать содержимое ячеек таблиц и т. п.
С тех пор язык получил развитие далеко за пределами OS/2, но традиционно его свойствами остались удобный доступ к командам операционной системы, мощные операции со строками, упрощённая обработка ошибок и встроенный отладчик.
Изначально REXX не был объектно-ориентированным, хотя в настоящее время существуют и такие версии языка (например, Open Object REXX). Синтаксически язык слегка напоминает упрощённый ПЛ/1. Переменные в REXX не типизированы и не требуют декларации.
Из особенностей языка следует отметить мощный и удобный оператор PARSE для разбора строк (похожий на «=~ m/» в Perl, но более простой). Его синтаксис:
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
Пример программы
Пример программы на REXX’е — калькулятор, выполняющий шесть операций (+,-,*,/,//,%), понимающий операции в скобках и произвольное количество переменных:
/* calc.cmd народный калькулятор (с) 1998 */
SAY 'Русский народный калькулятор v0.0'
XX = "X="; X0 = "X=X"
SAY 'Введите выражение или 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
Пример выполнения программы (> обозначен ввод пользователя):
Русский народный калькулятор v0.0
Введите выражение или 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
- Open Object Rexx (ooRexx) — проект с открытым кодом, управляемый Rexx Language Association (RexxLA)
- Обзор Open Object Rexx (рус.)
- История появления ARexx для AmigaOS
- Краткий обзор ARexx