cobol-parser
Python library for parsing IBM Enterprise COBOL source into an AST. Supports dependency extraction, dead code detection, program flow analysis, and CRUD matrices. 99.1% parse success on the NIST COBOL-85 corpus.
Install
pip install -e ".[dev]"
Requires Python 3.11, 3.12, or 3.13.
Install the CLI globally (uv)
To get the cobol-parser command on your PATH in any directory, without
setting up a project virtualenv:
uv tool install . # from a clone of this repo
uv tool install --editable . # dev mode: picks up code changes without reinstalling
uv tool install builds the Cython fast-path extensions as part of the
install, so the CLI runs at full speed. Verify it worked from anywhere:
cobol-parser --version
After pulling new commits (non-editable install only), rerun uv tool install . --reinstall to update.
Quick Start
from cobolparser import parse_cobol
result = parse_cobol(source, filename="prog.cbl")
if result.success:
print(result.ast.program_name)
print(result.ast.to_json())
CLI:
cobol-parser parse program.cbl
cobol-parser analyze program.cbl # dynamic call analysis
cobol-parser dead-code program.cbl # unreferenced paragraphs
cobol-parser lint program.cbl # every analyzer at once, as one list
Lint a program
lint runs several analyzers over a single parse and reports everything they
found as one severity-graded list, instead of one subcommand (and one
re-parse) per concern:
cobol-parser lint program.cbl --format text
program.cbl:6:1: warning [unused-variables] WORKING-STORAGE item WS-NEVER-USED (level 01) is never referenced in the PROCEDURE DIVISION
program.cbl:12:5: error [move-type-check] Illegal MOVE: cannot move NUMERIC item 'WS-COUNTER' to ALPHABETIC item 'WS-ALPHA'
program.cbl:17:1: warning [dead-code] paragraph ORPHAN-PARA is never referenced
3 finding(s): 1 error, 2 warning, 0 info (7 rule(s) ran)
--rule narrows the run (rule ids are the analyzer subcommand names),
--min-severity narrows the output, and --fail-on error exits 3 when
anything at that severity was reported — a CI gate that stays distinct from
exit 1, which still means the run itself failed. --format json (the
default) additionally reports which rules ran, which raised, and what could
not be checked, so a quiet report is never mistaken for a clean program.
from cobolparser import LintAnalyzer, parse_cobol
report = LintAnalyzer().analyze(parse_cobol(source, filename="prog.cbl").ast)
for finding in report.findings:
print(finding.rule, finding.severity, finding.message)
Generate test data from a copybook
gen-data turns a copybook record layout into a CSV of synthetic records —
one column per elementary field, values that always fit the field's PICTURE,
USAGE, and level-88 domain:
cobol-parser gen-data CUSTOMER.cpy --rows 100 --seed 7 -o customers.csv
from cobolparser.generators import CopybookDataGenerator, DataGeneratorOptions
dataset = CopybookDataGenerator(
DataGeneratorOptions(rows=100, seed=7)
).generate_from_file("CUSTOMER.cpy")
print(dataset.to_csv())
A seed makes output byte-identical across runs; omit it and the seed that
was drawn is reported on dataset.seed (and by gen-data --describe) so any
run can be replayed. REDEFINES and FILLER are excluded by default, and
OCCURS tables expand to one column per occurrence.
Commands
# Tests
python -m pytest tests/ -v
python -m pytest --cov=cobolparser --cov-report=html
# Lint / format / type-check
ruff check .
black .
mypy cobolparser/
Documentation
Full reference: .okf/index.md
License
GNU Affero General Public License v3.0 or later — Copyright © 2026 Samuel Dion. See LICENSE.
Metadata
Release files for cobol-parser 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cobol_parser-2.0.0.tar.gz | 1.3 MB | Details |
Built distributions (wheels)
Total release size: 15.0 MB
Release files / cobol_parser-2.0.0.tar.gz
| Download URL | cobol_parser-2.0.0.tar.gz |
|---|---|
| Size | 1.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
142a2f51d3c6e31fa9770eda6be51cf0af522f672adce3a25509f7dc24799a23
|
|
BLAKE2b-256 checksum How to use checksums |
ce73f9de8739717a70b0d20d8ac35a9a61731b084738e97a231884a36c6880dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / cobol_parser-2.0.0-cp313-cp313-win_amd64.whl
| Download URL | cobol_parser-2.0.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e5cacfd868bca430f89387172f1eb5457fa57aada4d1d171695c571532bac07a
|
|
BLAKE2b-256 checksum How to use checksums |
2950d7499fd41d51273f46ec0b8bf48d90dbde4a983461fe3d1f95387685b746
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / cobol_parser-2.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | cobol_parser-2.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
a1b2cef03c6c1e6ad5b2d3ad6a44e2ead13743474c48614638f0702e1cfcf286
|
|
BLAKE2b-256 checksum How to use checksums |
4452803bcea1c126d0f9475396f5302ec3616e6c831ac99eea5aa9dee5157729
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / cobol_parser-2.0.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | cobol_parser-2.0.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b3e269f1091523ed87534a1c814a0a73dd8d78cf2de2e8b469c530f2ee7ee42c
|
|
BLAKE2b-256 checksum How to use checksums |
2d8ff3551f6f0dea9bc5d5cda5215abbbeb9c5639be18fd33b45c5b011309371
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / cobol_parser-2.0.0-cp312-cp312-win_amd64.whl
| Download URL | cobol_parser-2.0.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
282c09a7013a16443b52826d25141ba69564064e54137068ebf5ee8624f29cb4
|
|
BLAKE2b-256 checksum How to use checksums |
27249e2507b2c3fdd718b1b42999a41efb544dd28467632c9a28a1291658a712
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / cobol_parser-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | cobol_parser-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
8052a8d50bd5d87be991a31c288716f4384deee58949edc0330c035781b7e08b
|
|
BLAKE2b-256 checksum How to use checksums |
746690121d2a03afbb45e0d926f8a332a0b3dbd9d40dff4e6fe12e617a599056
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / cobol_parser-2.0.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | cobol_parser-2.0.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
faf7201a79122f60bb2ce89c4172df3135961e6baf7df646240fd16c256b52ee
|
|
BLAKE2b-256 checksum How to use checksums |
db73f2b13c3d5945af6f4236d985b10c0a72cc7b4dbb184c8162a6dbaa3446ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / cobol_parser-2.0.0-cp311-cp311-win_amd64.whl
| Download URL | cobol_parser-2.0.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8f219ad407d5d1b2c6a7958817a8c51c4675d71a9ec77df9fa11bb83500b550f
|
|
BLAKE2b-256 checksum How to use checksums |
b57c23111ef47a3c2c85103f1ea214dc802c9fc1652e3789aee765ad5075b0a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / cobol_parser-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | cobol_parser-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
819f1063f1a62332a86bf7b7975e7976dd8a2bf4f72366f602d8fba51da337ce
|
|
BLAKE2b-256 checksum How to use checksums |
20808d5f7c08b628c9f9658944f7192ad18ebfb849aa332a433102d2cfd58527
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / cobol_parser-2.0.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | cobol_parser-2.0.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ec74c9f50355a50230481720ee2b83332cf4059ef1262e32de91471fe020a76e
|
|
BLAKE2b-256 checksum How to use checksums |
9a1c747072ee3904ca79ca662286237b9a4f114c4eeec3d12bd9c76fa9ab020d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency log