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 Shared_ast.base_gexpr.EDefault tree instead of a flat list of rules.
Overloaded operators are also resolved during the translation to this representation.
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 Scopelang.From_desugared pass performs a few important transformation:
Shared_ast.base_gexpr.EDefault) from the list of prioritized rulesShared_ast.Typing)The rest of the pass is performed on the scopelang ast:
Scopelang.Dependency analyses inter-scope dependencies as well as the well-foundedness of types