Cognac: query Cobol programs using SOUL

About Cognac

Cognac is a SOUL library tailored for reasoning over COBOL programs. The library consists of three parts:

  • An object-oriented representation of COBOL programs. To obtain this representation, Cognac uses the Koopa COBOL parser generator that extracts a (partial) abstract syntax tree out of COBOL source code. Our representation includes the basic structural elements of COBOL systems (programs, sections, paragraphs), statements that manipulate the control-flow and data-flow of the system (calls, performs, looping constructs, ...), and embedded SQL and CICS statements.
  • Simple static analyses. On top of our structural representation, Cognac provides control-flow and data-flow analyses that identify relationships between the structural elements in our representation.
  • A set of SOUL predicates that quantify over our structural representation, and that provide access to the information obtained from the static analyses.

Andy Kellens and Kris De Schutter


A detailed description of the design of Cognac and its applications can be found in the publications Cognac: a framework for documenting and verifying the design of Cobol systems and Verifying the design of an outsourced COBOL system with IntensiVE.

Installing Cognac

The latest version of LiCoR can be installed by loading the bundle named 'Soul-Cognac' from our DMP store in a fresh Smalltalk image.


Cognac requires the following dependencies to be installed:

  • Soul the implementation of the SOUL program query language
  • The Koopa parser generator
  • JavaConnect in order to communicate with the Koopa parser generator