
Refactoring of parsing command-line arguments * The type [options] is now abstract and implemented as an object type to avoid struggling with scoping and type inference when record types share some common field names. Refactoring of ParserLog for PascaLIGO and CameLIGO * The immediate motivation behind that refactoring was to remove the use of a couple of global references. A consequence is that we have a nicer and more compact code, by threading a state. The files [pascaligo/Tests/pp.ligo] and [ligodity/Tests/pp.mligo]. * Another consequence is that the choice of making strings from AST nodes depends on the CLI (offsets? mode?). After this refactoring, that choice is hardcoded in the simplifiers in a few places (TODO), waiting for a general solution that would have all CL options flow through the compiler. * I removed the use of vendors [x_option.ml], [x_map.ml] and [x_list.ml] when handling optional values. (Less dependencies this way.) Refactoring of the ASTs * I removed the node [local_decl], which was set to [[]] already in a previous commit (which removed local declarations as being redundant, as statements could already be instructions or declarations). * I changed [StrLit] to [String] in the AST of CameLIGO and ReasonLIGO. * I also changed the type [fun_expr] so now either a block is present, and therefore followed by the [with] keyword, or it is not. (Before, the presence of a block was not enforced in the type with the presence of the keyword.) Notes * [LexerMain.ml] and [ParserMain.ml] for CameLIGO and PascaLIGO are almost identical and differ in the same way (language name and file extension), which suggests that they should be in the [shared] folder and instanciated as a functor in the future (TODO). * I removed the blank characters at the end of many lines in the parser of ReasonLIGO.
36 lines
1.1 KiB
OCaml
36 lines
1.1 KiB
OCaml
(** Printing the AST *)
|
|
|
|
(** The type [state] captures the state that is threaded in the
|
|
printing iterators in this module.
|
|
*)
|
|
type state
|
|
|
|
val mk_state :
|
|
offsets:bool -> mode:[`Point|`Byte] -> buffer:Buffer.t -> state
|
|
|
|
(** {1 Printing tokens from the AST in a buffer}
|
|
|
|
Printing the tokens reconstructed from the AST. This is very useful
|
|
for debugging, as the output of [print_token ast] can be textually
|
|
compared to that of [Lexer.trace] (see module [LexerMain]). *)
|
|
|
|
val print_tokens : state -> AST.t -> unit
|
|
val print_path : state -> AST.path -> unit
|
|
val print_pattern : state -> AST.pattern -> unit
|
|
val print_instruction : state -> AST.instruction -> unit
|
|
|
|
(** {1 Printing tokens from the AST in a string} *)
|
|
|
|
val tokens_to_string :
|
|
offsets:bool -> mode:[`Point|`Byte] -> AST.t -> string
|
|
val path_to_string :
|
|
offsets:bool -> mode:[`Point|`Byte] -> AST.path -> string
|
|
val pattern_to_string :
|
|
offsets:bool -> mode:[`Point|`Byte] -> AST.pattern -> string
|
|
val instruction_to_string :
|
|
offsets:bool -> mode:[`Point|`Byte] -> AST.instruction -> string
|
|
|
|
(** {1 Pretty-printing of the AST} *)
|
|
|
|
val pp_ast : state -> AST.t -> unit
|