REXX Guide, Meaning , Facts, Information and Description
REXX (Restructured Extended Executor) is a programming language which was developed at IBM, and several implementations are available under open source licenses. It is a structured high-level programming language which was designed to be both easy to learn and easy to read. Both commercial and open source Interpreters for REXX are available on a wide range of computing platforms, and compilers are available for IBM mainframes.
| Table of contents |
|
2 History 3 Syntax 4 Flexible Variables 5 SIGNAL: A negative example 6 Error and exception treatment in REXX 7 Under OS/2 8 Spelling 9 External links |
REXX syntax looks similar to PL/I, but has fewer notations; this makes it harder to parse (by program) but easier to use.
It was first described in public at the SHARE 56 conference in Houston, Texas, in 1981, where customer reaction, championed by Ted Johnston of SLAC, led to it being shipped as an IBM product in 1982.
Over the years IBM included REXX in almost all of its operating systems (VM/CMS, VM/GCS, MVS TSO/E, AS/400, OS/2, VSE/ESA, AIX, CICS/ESA, and PC-DOS), and has made versions available for Novell Netware, Windows, Java, and Linux.
The first non-IBM version was written for PC-DOS by Charles Daney in 1984/5. Other versions have also been developed for Atari, Amiga, Unix (many variants), Solaris, DEC, Windows, WinCE, PocketPC, MS-DOS, Palm OS, QNX, OS/2, Linux, BeOS, EPOC32, AtheOS, OpenVMS, OpenEdition, Macintosh, and MacOS X.
Several freeware versions are available. In 1992, the two most widely-used open-source ports appeared: Ian Collier's REXX/imc for Unix and Anders Christensen's Regina (later adopted by Mark Hessling) for Windows and Linux. BREXX is well-known for WinCE and PocketPC platforms.
In 1996 ANSI published a standard for REXX:
ANSI X3.274–1996 “Information Technology – Programming Language REXX”. More than two dozen books on REXX have been published since 1985.
Since the mid-1990s, two newer variants of REXX have appeared:
Rexx marked its 25th anniversary on 20 March 2004, which was celebrated at the REXX Language Association]’s 15th International REXX Symposium in Böblingen, Germany, in May 2004.
On October 12 2004, IBM announced their plan to release their ObjectRexx implementation under the Common Public License
The DO control structure always begins with a DO and ends with an END.
DO UNTIL:
DO WHILE:
Stepping through a variable:
Looping forever until exiting with LEAVE:
Looping a fixed number of times
Testing conditions with IF
For single instructions, DO and END can also be omitted:
SELECT is REXX’s CASE structure
NOP indicates no instruction is to be executed.
The PARSE instruction is particularly powerful; it combines some useful string-handling functions. Its syntax is:
where origin specifies the source:
Examples:
Using a list of variables as template
displays the following
Using a delimiter as template:
also displays the following
Using column number delimiters:
displays the following
A template can use a combination of variables, literal delimiters, and column number delimiters.
Afterwards the following variables with the following values exist: stem.1 = 9, stem.2 = 8, stem.3 = 7...
The drop stem. instruction unsets all ten variables of the form stem.i.
Unlike arrays, the index for a stem variable is not required to have an integer value. For example, the following code is valid:
Features
REXX has the following characteristics and features:
REXX has just twenty-three, largely self-evident, instructions (e.g., call, parse, and select) with minimal punctuation and formatting requirements. It is essentially a free-form language with only one data-type, the character string; this philosophy means that all data are visible (symbolic) and debugging and tracing are simplified.History
REXX was designed and first implemented as an ‘own-time’ project between 20 March 1979 and mid-1982 by Mike Cowlishaw of IBM, originally as a scripting programming language to replace the languages EXEC and EXEC 2. It was designed to be a macro or scripting language for any system. As such, REXX is considered a precursor to Tcl and Python.
In 1990, Cathy Dager of SLAC organized the first independent REXX symposium, which led to the forming of the REXX Language Association. Symposiums are held annually. Syntax
Looping
do until [condition]
[instructions]
end
do while [condition is true]
[instructions]
end
do i = x to y by z
[instructions]
end
do forever
if [condition] then leave
end
do i = x to y by z for a
[instructions]
end
Conditionals
if [condition] then
do
[instructions]
end
else
do
[instructions]
end
if [condition] then
[instruction]
else
[instruction]
Testing for multiple conditions
select
when [condition] then
[instruction]
when [condition] then
do
[instructions]
end
otherwise
[instructions] or NOP
end
PARSE
parse [upper] origin template
and template can be:
upper is optional; it you specify it, data will be converted to upper case. myVar = "John Smith"
parse var MyVar firstName lastName
say "First name is:" firstName
say "Last name is:" lastName
First name is: John
Last name is: Smith
myVar = "Smith, John"
parse var MyVar LastName "," FirstName
say "First name is:" firstName
say "Last name is:" lastName
First name is: John
Last name is: Smith
myVar = "(202) 123-1234"
parse var MyVar 2 AreaCode 5 7 SubNumber
say "Area code is:" AreaCode
say "Subscriber number is:" SubNumber
Area code is: 202
Subscriber number is: 123-1234
Flexible Variables
Variables in REXX are typeless, and initially are evaluated as their names, in upper case. Thus a variable's type can vary with its use in the program: do
say hello => HELLO
hello = 25
say hello => 25
hello = "say 5 + 3"
say hello => say 5 + 3
interpret hello => 8
drop hello
say hello => HELLO
end
Array support
REXX does not have explicit variable declarations, and likewise no arrays. However, a stem structure, similar to an array can be produced easily: do i = 1 to 10
stem.i = 10 - i
end
i = 'Monday'
stem.i = 2
SIGNAL: A negative example
The REXX SIGNAL instruction is equivalent to the GOTO in other languages. When correctly used, it can be a very useful instruction, for example to intercept errors or other exceptional cases. But one can also produce illegible, difficult to read code: /* A Rexx Program */
signal define;
use:
say a
signal end;
define:
a = "hello world"
signal use;
end:
exit
| error | Positive RC from a system command |
| failure | Negative RC from a system command |
| halt | Abnormal termination |
| novalue | An unset variable was referenced |
| syntax | Invalid REXX program syntax |
When a condition is handled by SIGNAL ON, the SIGL and RC system variables can be analyzed to understand the situation. RC contains the REXX error code and SIGL contains the line number where the error arose.
REXX is included in the base operating system of OS/2, and is also used as the macro language in many applications.
Under OS/2, a REXX program begins with matched comment delimiters, /* */, to indicate to the operating system that it is a REXX program:
Instructions between quotes are passed to the OS:
In plain text, Cowlishaw seems to prefer Rexx, whereas IBM documents and the majority of the web uses REXX. The ANSI standard uses the form preferred by the standardization committee, which has small capitals for the final three letters: REXX.
This is an Article on REXX. Page Contains Information, Facts Details or Explanation Guide About REXX Under OS/2
/* sample.cmd */
say "Hello World"
/* sample.cmd */
'dir /p /w'
Spelling
Literature
External links
