package lutin

  1. Overview
  2. Docs

Module CoIdentSource

COMPILATION/EXPANSION : idents et retour au source

------------------------------------------------------------

Identificateurs et remontée au source

C'est un peu du luxe, mais on distingue :

  • les ident source, Syntaxe.ident (sous-entendu avec src_info, donc UNIQUES),
  • les ident target (de simple string, mais uniques par construction).

N.B. ça a beau être de simple string, on en fait quand même un type abstrait, au cas où ...

----------------------------------------------------------

Sourcetype space

remet le module a zero ...

Sourceval new_space : unit -> space
Sourcetype t = string

Ident dans target, unique par nommage

Sourceval to_string : t -> string
Sourceval list_to_string : t list -> string -> string
Sourceval get_fresh : space -> string -> t

L'unicité des idents target est garantie par la fonction suivante, qui prend un préfixe en paramètre

Sourceval get : string -> t

Si on est sûr qu'il n'y aurra pas de problème, on peut forcer un nom

Sourceval of_cpt : int -> t
Sourceval from_string : string -> t

Si le nom doit rester tel quel

REMONTÉE AU SOURCE DANS LE PROGRAMME EXPANSÉ

Sourcetype src_stack = (Lexeme.t * Lexeme.t * Syntaxe.val_exp option) list

Remontée au source d'un "target" depuis le code expansé

Sourcetype scope_stack = Lexeme.t * src_stack

Remontée au source d'un scope depuis le code expansé

Sourceval main_scope : Lexeme.t -> scope_stack

Scope de base

Sourceval get_scope : Lexeme.t -> src_stack -> scope_stack
Sourceval base_stack : unit -> src_stack
Sourceval get_src_stack : Lexeme.t -> scope_stack -> Syntaxe.val_exp option -> src_stack

Avec un scope_stack et une instance de Syntaxe.ident, on fabrique un src_stack complet

Sourceval print_src_stack : src_stack -> unit
Sourceval string_of_src_stack : src_stack -> string
Sourceval head_of_src_stack : src_stack -> Lexeme.t