A Cobol (Copybook) parser that produces a corresponding class hierarchy
Christophe VG (contact@christophe.vg)
https://github.com/christophevg/cobol-object-mapper
This Cobol parser for this project was generated using the Human Parser Generator. It produces an AST for copybook record definitions. These definitions are transformed in a basic class hierarchy, consisting of classes with properties and associations to other classes, thus mimicking the hierarchical copybook records. Redefining records are transformed into subclasses of the redefined record that is explicitly generated as an additional class.
Disclaimer I'm not aiming for feature completeness and only add support for what I need at a given time ;-)
Given an example copybook:
10 TOP-LEVEL.
20 SUB-LEVEL-1.
30 PROPERTY-1 PIC 9.
30 PROPERTY-2 PIC S9.9.
30 PROPERTY-3 PIC XXX.
20 SUB-LEVEL-2.
30 DATA PIC X(999).
30 DATA-1 REDEFINES DATA.
40 DATA-1-ALPHA PIC X(10).
30 DATA-2 REDEFINES DATA.
40 DATA-2-NUM PIC 9(20).
the Cobol Object Mapper generates the following class hierarchy, in the form of an object Model
constructed from Class
, Property
and Association
classes.
$ make INPUT=assets/example.cobol
*** Importing assets/example.cobol
*** Mapping...
*** Dumping Text format
- SUB-LEVEL-1
- PROPERTY-1 : integer
- PROPERTY-2 : signed float
- PROPERTY-3 : string
- DATA-1 : DATA
- DATA-1-ALPHA : string
- DATA-2 : DATA
- DATA-2-NUM : integer
- DATA
- SUB-LEVEL-2
-> DATA
- TOP-LEVEL
-> SUB-LEVEL-1
-> SUB-LEVEL-2
Besides this textual representation, a Graphviz Dot output format is also provided:
$ make dot INPUT=assets/example.cobol
*** Importing assets/example.cobol
*** Mapping...
*** Dumping Dot format
This generates a PNG file assets/example.cobol.png
(this name can be changed using the OUTPUT=
Makefile variable):