REXXTACY: The REXX to C Translator

Anthony T. Green

Ruddock and Associates, Inc.


*** Introduction

* REXXTACY - The REXX to C translator

REXXTACY is a package which allows you to convert a REXX program into a
DOS or OS/2 executable. It does this by first translating the REXX source 
into C code. You must then invoke the Microsoft C compiler, and link the 
resulting object file with the REXXTACY runtime library.

The process of converting a REXX program to into C code consists of invoking 
the REXXTACY program with your REXX source file as an argument.
REXXTACY will analyse the REXX source (myprog.cmd), perform some optimizations
on the code, and emit a C source file (myprog.c).
This C source is ready to compile with the Microsoft C compiler.

* Using this manual

The organization of this manual has been loosly based on IBM's OS/2 REXX
reference manual. Most sections of that manual have corresponding sections
in this document. This will make it easier for the user who wishes to find
any implementation differences between particular commands or control 
structures.

Since there are only a small number of differences or omissions from REXX in
REXXTACY, the manual will seem rather sparse at points. Please be aware that
this manual is not intended to be a REXX reference manual - but rather a
description of the REXXTACY implementation.

* Using REXXTACY

REXXTACY has a number of command line options. Run REXXTACY -? for 
usage information... 

REXXTACY 2.0 - (C) 1992 Ruddock and Associates.  All rights reserved.

Options	-o      Optimize REXX program
        -p      Debug parser.
        -z      Debug peephole optimizer.
        -u      Debug du & ud chain generation.
        -g      Debug constant and copy propagations.
        -b      Dump basic block information.
        -h      Display this message.
        -?      Display this message.

C files created with REXXTACY have the same name as the REXX file name, 
but ending in .c.

Most of the other switches are for debugging (and entertainment) purposes
only. They tell REXXTACY to emit information pertaining to REXXTACY's 
internal optimization efforts. If ever you encounter a bug in REXXTACY you
should run it again with all of these switches on, and pipe the output to a 
file. This file is very useful in helping the author track down problems.

Many errors in a REXX program will be caught at compile time by REXXTACY.
However, REXXTACY provides extensive runtime error checks. A compiled REXX
program processing faulty data will emit descriptive error messages ---
with line numbers that refer back to the original REXX source file.


*** General Concepts

* Structure and General Syntax

REXXTACY input can be structured exactly like REXX input. It supports implicit
and explicit end of statement markers, statement continuation markers and C
style comments. However, hexadecimal and binary strings are not supported at
this time.

* Expressions and Operators

All of REXX's logical, arithmentic and comparison expressions and operators are
supported by REXXTACY --- including string abuttals and operator precedence 
orders.

* Clauses and Instructions

REXXTACY supports all five REXX clause types:

	1. NULL Clauses
        2. Labels
        3. Assignments
        4. Keyword Instructions
        5. Commands

* Assignments and Symbols

Constant symbols, simple symbols, compound symbols and stems are all supported
by REXXTACY. Assignments to these symbol types operate exactly as they do 
in REXX. One limitation of the current version of REXXTACY is that REXX 
keywords are are always recognized as keywords, independent of the lexical 
context in which they appear. This means that, for instance, you may not have 
a variable called SAY.

* Commands to External Environments

The only command processing environment that REXXTACY currently supports is 
CMD (for OS/2) and COMMAND (for DOS). Commands to this environment may be 
issued exactly as they are in REXX, however, they are executed in a subcommand
shell rather than as a callback to the parent shell (as in the case of OS/2).


*** Keyword Instructions

* ADDRESS

Not implemented. All commands are routed to the OS/2 or DOS command shell.


* ARG

Implementation identical to that of REXX.


* CALL

Implementation identical to that of REXX, with the omission of:
	* CALL ON
        * CALL OFF


* DO

Implementation identical to that of REXX.


* DROP

Not implemented.


* EXIT

Implementation identical to that of REXX.


* IF

Implementation identical to that of REXX.


* INTERPRET

Not implemented.


* ITERATE

Not implemented.


* LEAVE

Not implemented.


* NOP

Implementation identical to that of REXX.


* NUMERIC

Not implemented.


* OPTIONS

Not implemented.


* PARSE

Implementation identical to that of REXX except for the omissions of
	* PARSE SOURCE.


* PROCEDURE

Implementation identical to that of REXX.


* PULL

Implementation identical to that of REXX.


* PUSH

Not implemented.


* QUEUE

Not implemented.


* RETURN

Implementation identical to that of REXX.


* SAY

Implementation identical to that of REXX.


* SELECT

Implementation identical to that of REXX.


* SIGNAL

Not implemented.


* TRACE

Not implemented.


*** Functions

Function calls in REXXTACY operate exactly as they do in REXX. Built in
functions that are supported in REXXTACY include:

	* LENGTH
        * LINEIN (No support for device names, line or count parameters)
        * LINES (No support for device names)

