Implementations
This page is a catalog of CCL parser implementations the project is aware of. It is not exhaustive — if you’ve published a CCL parser and want it listed, open an issue on CatConfLang/website.
For what “conformant” means and how implementations differ within the spec, see Canonical Semantics and Variants.
Reference Implementation
Section titled “Reference Implementation”chshersh/ccl (OCaml)
Section titled “chshersh/ccl (OCaml)”- Repository:
chshersh/ccl - Language: OCaml
- Parsing strategy: Greedy recursive-descent (“pacman”), implemented with the Angstrom combinator library (~91 lines for
lib/parser.ml). - Status: Canonical reference. Authored by the language inventor. Where the spec is ambiguous, this implementation’s behavior is the answer the test suite asserts. See Canonical Semantics.
- Variant target:
reference_compliant.
Community Implementations
Section titled “Community Implementations”tylerbutler/ccl-typescript (TypeScript)
Section titled “tylerbutler/ccl-typescript (TypeScript)”- Repository:
tylerbutler/ccl-typescript - Language: TypeScript
- Parsing strategy: Line-oriented indent-stack (
packages/ccl-ts/src/ccl.ts). - Status: Community implementation maintained alongside this site.
tylerbutler/ccl_gleam (Gleam)
Section titled “tylerbutler/ccl_gleam (Gleam)”- Repository:
tylerbutler/ccl_gleam - Language: Gleam
- Parsing strategy: Line-oriented indent-stack (
src/ccl/parser.gleam). - Status: Community implementation. Useful as a worked example of indent-stack in a functional language.
tylerbutler/ccl-ocaml (OCaml, fork)
Section titled “tylerbutler/ccl-ocaml (OCaml, fork)”- Repository:
tylerbutler/ccl-ocaml - Language: OCaml
- Parsing strategy: Same as upstream
chshersh/ccl(pacman / Angstrom). - Status: Fork of the canonical implementation. The upstream reference is
chshersh/ccl; prefer it unless you need a specific change in this fork.
Picking an Implementation
Section titled “Picking an Implementation”If you’re choosing a library to consume:
- Match your language first.
- If multiple options exist in your language (e.g. OCaml), prefer the one whose declared variant matches what your test fixtures expect — most consumers should target
reference_compliant. - Cross-check against the test suite before relying on edge-case behavior, and consult the Behavior Reference for the conflict pairs (continuation tabs, top-level indent, delimiter, CRLF) that legitimately differ between conformant implementations.
If you’re authoring a new implementation, start with Implementing CCL, pick a parsing strategy, and validate against ccl-test-data. The Test Suite Guide covers how to declare your behavior choices so the right fixtures apply.