Module Lib.Id

Ce module définit un type d'identifiants commun à tous les langages manipulés, ainsi que les fonctions attenantes.

type t = string

Un type des identifiants (noms de variables) de programme.

Les identifiants sont représentées par des chaînes de caractères par souci de simplicité. On conseille toutefois de passer par les fonctions qui suivent pour les manipuler.

val fresh : string -> t

Chaque appel à fresh hum génère un identifiant qui commence toujours par un tiret de soulignement (underscore) suivi de la chaîne de caractère hum, suivi d'un entier unique entre deux appels à reset.

La chaîne de caractère hum est utile pour générer des identifiants lisibles, mais elle peut être vide.

val reset : unit -> unit

Réinitialise le compteur des identifiants uniques. Vous n'avez a priori pas à appeler cette fonction vous-même.

L'égalité des identifiants est décidable, et ils sont munis d'un ordre total. Les fonctions correspondantes s'exécutent en temps constant.

val equal : t -> t -> bool
val compare : t -> t -> int
val to_string : t -> string

La fonction to_string x produit une représentation textuelle de l'identifiant x. Cette fonction est injective.

val pp : Format.formatter -> t -> unit

Les identifiants peuvent être affichés à l'aide du module Format de la bibliothèque standard.

val print : ?out:out_channel -> t -> unit

L'appel print ~out x affiche l'identifiant x sur le canal de sortie out. Par défaut, l'affichage est réalisé sur la sortie standard du programme, c'est-à-dire Stdlib.stdout.

module Set : sig ... end

Un module fournissant des ensembles finis d'identifiants en utilisant l'interface des ensembles finis de la bibliothèque standard.

module Env : sig ... end

Un module fournissant un environnement, structure de données associative dont les clefs sont les identifiants.

module Scoped : sig ... end

Ce module utilitaire fournit un type dont les éléments sont des valeurs chacune munie d'un identifiant distingué. Il peut être utile pour représenter des objets syntaxiques dans laquelle la variable distinguée doit être considérée comme liée.

module MultiScoped : sig ... end

Ce module utilitaire fournit un type dont les éléments sont des valeurs munies d'un nombre arbitraire (y compris 0) identifiants distingués. Ce module, qui généralise Scoped, peut être utile pour traiter des constructions qui lient simultanément un nombre quelconque d'identifiants.