Pennington— The Name in Software Engineering Automation

XTRAN Demonstration:  Analyze Knots in PL/I Code

The following analysis used an XTRAN rules file comprising 134 non-comment lines of "meta-code" (XTRAN's rules language) to analyze PL/I code and show any knots it finds.

A knot is the crossing of two GOTOs.  It is an important measure of code quality for two reasons:

Note that the analysis output shows not only the number of knots, but also the actual crossings from which that number was determined.

The XTRAN rules themselves are not specific to PL/I; they are language-independent, and therefore usable without change to analyze any 3GL language that has GOTOs.

The input to and output from XTRAN are untouched, except that line numbers have been added to the PL/I source code for reference.



* Input to XTRAN:  demknt-a.pli

19 prc:    PROCEDURE;
20         DCL i FIXED (31) BIN;
21                                /* Nesting           Range      */
22                                /* ============================ */
23
24 lbl0:   GOTO lbl14;            /* >--------------\  lbl0-lbl14 */
25 lbl1:   i = 1;                 /* <--------\     |             */
26 lbl2:   GOTO lbl10;            /* >-----\  |     |  lbl2-lbl10 */
27 lbl3:   i = 3;                 /*       |  |     |             */
28 lbl4:   GOTO lbl1;             /* >-----x--/     |  lbl1-lbl4  */
29 lbl5:   i = 5;                 /* <-----x-----\  |             */
30 lbl6:   GOTO lbl13;            /* >-----x--\  |  |  lbl6-lbl13 */
31 lbl7:   GOTO lbl9;             /* >--\  |  |  |  |  lbl7-lbl9  */
32 lbl8:   i = 8;                 /*    |  |  |  |  |             */
33 lbl9:   i = 9;                 /* <--/  |  |  |  |             */
34 lbl10:  i = 10;                /* <-----/  |  |  |             */
35 lbl11:  GOTO lbl5;             /* >--------x--/  |  lbl5-lbl11 */
36 lbl12:  i = 12;                /*          |     |             */
37 lbl13:  i = 13;                /* <--------/     |             */
38 lbl14:  i = 14;                /* <--------------/             */
39         END prc;


* Excerpt from XTRAN run log:

Knots found in source code:

demknt-a.pli:  GOTO at line 26 crosses GOTO at line 28
demknt-a.pli:  GOTO at line 26 crosses GOTO at line 30
demknt-a.pli:  GOTO at line 26 crosses GOTO at line 35
demknt-a.pli:  GOTO at line 30 crosses GOTO at line 35

demknt-a.pli has 4 knots.


COPYRIGHT 2012; reproduction prohibited without permission.  Revised 2009-09-11

XTRAN is a trademark of Pennington Systems Incorporated.

  Pennington Systems Incorporated
2820 N. Pinal Avenue, Suite 12
Casa Grande, Arizona 85122-7927
USA


  Phone:  +1(480)626-5503
Fax:  +1(480)626-7618
Email:  Info@Pennington.com
Web:  http://WWW.Pennington.com