This representation is the third in the compilation chain (see Architecture). Its main difference with the previous desugared representation is that inside a scope, the definitions are ordered according to their computational dependency order, and each definition is a Dcalc.Ast.expr.EDefault tree instead of a flat list of rules.
The module describing the abstract syntax tree is:
Scopelang.Ast Abstract syntax tree of the scope languagePrinting helpers can be found in Scopelang.Print.
This intermediate representation corresponds to the scope language presented in the Catala formalization.
The translation from the scope language to the default calculus involves three big features:
1 and 3 involve computing dependency graphs for respectively the structs and enums on one hand, and the inter-scope dependencies on the other hand. Both can be found in Scopelang.Dependency, while Scopelang.Scope_to_dcalc is mostly responsible for 2.
Related modules:
Scopelang.Dependency Graph representation of the dependencies between scopes in the Catala program. Vertices are functions, x -> y if x is used in the definition of y.Scopelang.Scope_to_dcalc Scope language to default calculus translator