package catala

  1. Overview
  2. Docs
Compiler and library for the literate programming language for tax code specification

Install

Dune Dependency

Authors

Maintainers

Sources

0.9.0.tar.gz
md5=8f891209d18b6540df9c34b2d1a6a783
sha512=737770b87a057674bceefe77e8526720732552f51f424afcebcb6a628267eab522c4fd993caca1ae8ed7ace65a4a87e485af10c1676e51ca5939509a1b841ac2

doc/index.html

The Catala compiler

Architecture

The architecture of the Catala compiler is inspired by CompCert or the Nanopass framework, and is structured around many intermediate representations connected by successive translations passes.

Here is the recap picture of the different intermediate representations of the Catala compiler (made with an ASCII diagram tool):

                                     +---------------+
                                     |               |
                                     |  Surface AST  |
                                     |               |
                                     +---------------+
                                             |
                                             |
         * Separate code from legislation    |
         * Remove syntactic sugars           |
                                             v
                                   +------------------+
                                   |                  |
                                   |  Desugared AST   |
                                   |                  |
                                   +------------------+
                                             |
                                             |
 * Build rule trees for each definition      |
 * Order variable computations inside scope  |
                                             v
                                  +--------------------+
                                  |                    |
                                  | Scope language AST |
                                  |                    |
                                  +--------------------+
                                             |
                                             |
        * Convert scopes into functions      |
        * Thunking of subscope arguments     |
                                             |
                                             v
                                 +----------------------+
                                 |                      |
                                 | Default calculus AST |
                                 |                      |
                                 +----------------------+
                                             |
                                             |
                                             |
       * Compile the default term            |
                                             |
                                             v
                                 +----------------------+
                                 |                      |
                                 | Lambda calculus AST  |
                                 |                      |
                                 +----------------------+
                                             |
                                             |
        * Turn expressions into statements   |
                                             |
                                             v
                               +--------------------------+
                               |                          |
                               |  Statement calculus AST  |
                               |                          |
                               +--------------------------+

List of top-level modules

Each of those intermediate representation is bundled into its own dune bundle module. Click on the items below if you want to dive straight into the signatures.

More documentation can be found on each intermediate representations here.

Most of these intermediate representations use a shared AST libary. The main compilation chain is defined in Driver.

Additionally, the compiler features a verification plugin that generates verification condition for proof backends. More information can be found here:

Two more modules contain additional features for the compiler:

The Catala runtimes documentation is available here:

Last, it is possible to customize the backend to the compiler using a plugin mechanism. The API is defined inside the following module:

Driver.Plugin

See the examples in the plugins/ subdirectory:

OCaml

Innovation. Community. Security.