XTRAN Example — Eliminate Dead PL/I Code
The following example uses a rule set written in XTRAN's rules language ("meta-code") that finds and suppresses every statement that is "dead" (cannot execute). The rules comprise 147 non-comment lines of meta-code.
NOTE that these rules are language-independent; they are exactly the same rules used for similar examples for other languages.
Strategy
- Use statement navigation facilities provided by XTRAN's rules language to follow every execution path through the code, and mark each visited statement as "live".
- Use recursive iterator facilities provided by XTRAN's rules language to visit every statement. If it is not marked "live", suppress its output.
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
Input to XTRAN
prc: PROCEDURE; DCL i FIXED BIN (31); IF i = 0 | i = 1 THEN GOTO lbl2; i = 1; GOTO lbl3; /* * The following code is dead and should therefore be eliminated: */ IF i > 1 THEN GOTO lbl1; i = 2; lbl1: i = 3; GOTO lbl3; /* * The following statement is dead and should therefore be eliminated: */ i = 4; lbl2: i = 4; lbl3: i = 5; END PRC;
Output from XTRAN
prc: PROCEDURE; DECLARE i FIXED BINARY (31); IF i = 0 | i = 1 THEN GOTO lbl2; i = 1; GOTO lbl3; lbl2: i = 4; lbl3: i = 5; END prc;