About cookies on this site Our websites require some cookies to function properly (required). In addition, other cookies may be used with your consent to analyze site usage, improve the user experience and for advertising. For more information, please review your options. By visiting our website, you agree to our processing of information as described in IBM’sprivacy statement. To provide a smooth navigation, your cookie preferences will be shared across the IBM web domains listed here.
Publication
PASTE 1999
Conference paper
Identifying Procedural Structure in Cobol Programs
Abstract
The principal control-flow abstraction mechanism in the Cobol language is the PERFORM statement. Normally, PERFORM statements are used in a straightforward manner to define parameterless procedures (where global variables are used to pass data into and out of procedure bodies). However, unlike most procedural constructs, distinct PERFORMed procedures can share code in arbitrarily complicated ways. In addition, PERFORMS can also be used in such a way as to cause transfers of control that do not correspond to normal call/return semantics. In this paper, we show how a Cobol program can be efficiently transformed into a semantically-equivalent procedurally well-structured representation, in which conventional procedures (i.e., with the usual call and return semantics and without code sharing) and procedure call statements replace PERFORMed code and PERFORM statements. This transformation process properly accounts for the non-procedural control flow that can result from ill-behaved PERFORM statements. The program representation derived from our analysis can be used directly in program understanding applications, program restructuring tools, and inter-language translators. In addition, it can be used as the starting point for a variety of context-sensitive program analyses, e.g., program slicing.