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.10.0.tar.gz
md5=5abd76e8c51a47670645e91b21b57fc5
sha512=9c6fbe50c0b5a60566e877eeddadca0a339e2ce35deb5c1beceb03bc40eb6af2d519313e71859d88645b53fad591d4fa5288c633b185c9d765603da0f5b7dd7b

doc/shared_ast.html

Default calculus

This module contains a generic AST structure, various type definitions and helpers that are reused in various passes of the compiler.

The Shared_ast.Definitions module

The main module Shared_ast is exposed at top-level of the library (so that open Shared_ast gives access to the structures). It defines literals, operators, and in particular the type Shared_ast.naked_gexpr.

The Shared_ast.naked_gexpr type regroups all the cases for the Dcalc and Lcalc ASTs, with unconstrained annotations (used for positions, types, etc.). A GADT is used to eliminate irrelevant cases, so that e.g. (dcalc, _) naked_gexpr doesn't have the ERaise and ECatch cases, while (lcalc, _) naked_gexpr doesn't have EDefault.

For example, Lcalc expressions are then defined as type 'm naked_expr = (Shared_ast.lcalc, 'm) Shared_ast.naked_gexpr.

This makes it possible to write a single function that works on the different ASTs, by having it take a ('a, _) naked_gexpr as input, while retaining a much stricter policy than polymorphic variants.

The module additionally defines the encompassing scope and program structures that are also shared between different compiler passes.

Helper library

The Shared_ast.Var defines 'e Var.Set.t and ('e, _) Var.Map.t types that are useful to handle variables for the different 'e expression types without re-instanciating Set.Make and Map.Make each time.

Shared_ast.Expr contains various helpers to build well-formed expressions, and for traversal.

The following modules are dedicated to handling the program structure around expressions. Note that these don't make sense for the early compiler passes (up to Scopelang).

OCaml

Innovation. Community. Security.