Surface.Parser_driver
Wrapping module around parser and lexer that offers the Surface.Parser_driver.parse_source_file
API.
val lines :
Catala_utils.File.t ->
Catala_utils.Global.backend_lang ->
(string
* Lexer_common.line_token
* (Stdlib.Lexing.position * Stdlib.Lexing.position))
Stdlib.Seq.t
Raw file parser that doesn't interpret any includes and returns the flat law structure as is
val load_interface :
?default_module_name:string ->
Catala_utils.File.t Catala_utils.Global.input_src ->
Ast.module_content
Reads only declarations in metadata in the supplied input file, and only keeps type information. The list of submodules is initialised with names only and empty contents.
val load_interface_and_code :
?default_module_name:string ->
Catala_utils.File.t Catala_utils.Global.input_src ->
Ast.module_content
Reads the supplied input file and returns its interface that contains type information as well as scope and topdef definitions. The list of submodules is initialised with names only and empty contents.
val register_included_file_resolver :
filename:string ->
new_content:string Catala_utils.Global.input_src ->
unit
Register an included file dynamic resolver. When the surface's parser encounters an inclusion that correspond to the filename
argument, it will dynamically replace it with the given new_content
.
val parse_top_level_file :
?resolve_included_file:(string -> string Catala_utils.Global.input_src) ->
Catala_utils.File.t Catala_utils.Global.input_src ->
Ast.program
Parses a catala file (handling file includes) and returns a program. Interfaces of the used modules are returned empty, use load_interface
to fill them. When provided resolve_included_file
replaces file includes with an user provided input source. However, it will shadow any existing dynamic resolver registered using register_included_file_resolver
.