XTRAN Example — Create abstract of COBOL code
Scenario — you have inherited a body of COBOL code, and you want to review it without getting ensnared in its gory details.
XTRAN to the rescue!The following example uses an XTRAN rules file comprising 288 non-comment lines of XTRAN's rules language ("meta-code") to create an abstract of COBOL from the code itself. The rules took 4 hours to write and 3 hours to debug. (That's right, only 7 hours total!)
The XTRAN rules used for this example are not specific to COBOL; they can be used unchanged to abstract any 3GL language.
The rules are also command-driven, allowing you to easily create a wide variety of different kinds of abstracts. They allow you to specify, via commands, categories of statements. For each category, you can specify:
- What statement types are in the category.
- What to do with each statement whose type is in the
category:
- Don't show the statement or its children in the abstract.
- Don't show the statement in the abstract, but do show its children.
- Show the statement in the abstract, but don't show its children.
- Show only the first in a series of statements in the category at the same level, effectively collapsing the sequence.
- A description to show in the abstract.
For this example, we specified, via commands, the following categories and their properties (only those relevant to the example are shown):
| Category's statement types |
Show statement? |
Show children? |
Collapse statement sequences? |
Description for abstract |
|---|---|---|---|---|
ENVIRONMENT DIVISION |
Yes | No | N/A | Environment division |
IDENTIFICATION DIVISION |
Yes | No | N/A | Identification division |
PROCEDURE DIVISION |
Yes | Yes | N/A | Procedure division |
WORKING-STORAGE SECTION |
Yes | Yes | N/A | Working storage |
IF |
Yes | Yes | No | If |
ELSE |
Yes | Yes | No | Else |
EVALUATE |
Yes | Yes | No | Selection |
WHEN |
Yes | Yes | No | Selection value |
STOP RUN |
Yes | N/A | No | Exit program |
| (Data declaration) | Yes | No | Yes | Data declarations |
ADD, COMPUTE, SUBTRACT |
Yes | N/A | Yes | Arithmetic |
MOVE |
Yes | N/A | Yes | Data movement |
END-EVALUATE, END-IF |
No | N/A | N/A | N/A |
How can such powerful code abstraction be automated in only 7 hours and only 288 code lines of XTRAN rules? Because there is so much capability already available as part of XTRAN's rules language. These rules take advantage of the following functionality:
- Text file input and output (to read the commands)
- Text manipulation
- Delimited list manipulation (to parse the commands)
- Environment variable manipulation (to specify the output file)
- Content-addressable data bases (to store the abstracting specs)
- "Per statement" recursive iterator (to process all statements)
- Access to XTRAN's Internal Representation, or XIR (to get statements' types)
- XIR's language-independent properties
- Navigation in XIR (to explore a statement's context)
- Creating new meta-functions written in meta-code, which we call user meta-functions
The input to and output from XTRAN are untouched.
Process Flowchart
Here is a flowchart for this process, in which the elements are color coded:
- BLUE for XTRAN versions (runnable programs)
- ORANGE for XTRAN rules (text files)
- RED for
code - PURPLE for text data files
Input to XTRAN:
IDENTIFICATION DIVISION.
PROGRAM-ID. ABSTRACTING-EXAMPLE.
AUTHOR. KELLY A DEVELOPER.
INSTALLATION. SOME COBOL SHOP SOMEWHERE.
DATE-WRITTEN. MAY 2018.
DATE-COMPILED. May 2018.
*REMARKS. JUST TO SHOW OFF XTRAN.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. WHIZ-BANG-1000.
OBJECT-COMPUTER. WHIZ-BANG-1000.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AMT PIC 9(7)V99.
01 PAGE-TOTAL PIC 9(8)V99 VALUE 0.
01 DIFF PIC 9(7)V99.
01 TOTAL PIC 9(7)V99.
PROCEDURE DIVISION.
DO-IT.
ADD AMT TO PAGE-TOTAL
SUBTRACT AMT FROM TOTAL GIVING DIFF
COMPUTE AMT = AMT + 1
IF AMT < 1.00 THEN
MOVE 1.0 TO AMT
MOVE 2 TO TOTAL
ELSE
ADD 2 TO AMT
MOVE AMT TO TOTAL
MOVE TOTAL TO PAGE-TOTAL
EVALUATE AMT
WHEN 1
MOVE 2 TO AMT
MOVE 1 TO DIFF
ADD 1 TO AMT
SUBTRACT 1 FROM TOTAL
WHEN OTHER
ADD 1 TO AMT
COMPUTE TOTAL = AMT + 2
END-EVALUATE
END-IF
ADD 1 TO AMT
COMPUTE TOTAL = 1
STOP RUN.
Output from XTRAN:
Identification division
Environment division
Data division
Working storage
Data declarations
Procedure division
Arithmetic
If
Data movement
Else
Arithmetic
Data movement
Selection
Selection value
Data movement
Arithmetic
Selection value
Arithmetic
Arithmetic
Exit program