REXX | это... Что такое REXX? (original) (raw)

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

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

В том случае, когда интерпретатор 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.52+5) X= 330.0 Y=X2 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

См. также

Ссылки

Просмотр этого шаблона Основные языки программирования (сравнениеIDEисторияхронология)
Используемыев разработке АдаAPLЯзык ассемблераActionScriptABAP/4AutoItAWKБейсикСиКоболC++C#ClarionClojureColdFusionCommon LispDdBaseDelphiEiffelErlangEuphoriaF#ФортФортранGambasGoGroovy • HAL/S • HaskellIconJavaJavaScriptLimboLuaМодула-3Object PascalObjective-COCamlOzParserПаскальКомпонентный ПаскальPerlPHPPowerBASICPythonПЛ/1ПрологRubyScalaSchemeSmalltalkSQLPL/SQLTclValaVisual Basic (.NET)
Академические AgdaCleanCurryЛогоMLРЕФАЛСимулаОберон
IEC 61131-3 Instruction ListSTFBDLadder Diagram (LD) • SFC
Прочие АлголАлгол 68Модула-2МирандаHope
Эзотерические HQ9+/HQ9++ • INTERCALBrainfuck • Brainfork • BefungeMalbolgePietSpoonUnlambdaWhitespaceFALSELOLCODE
Визуальные G (LabVIEW) • Microsoft VPLSikuliVisSimАлисаДРАКОНСкретч