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.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