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 

См. также[править | править код]

Ссылки[править | править код]