Module Lib.Builtin

Le module définissant les opérateurs prédéfinis communs à tous les langages du sujet.

Toutes les opérations prédéfinies du langage source manipulent des entiers, y compris les opérations logiques et les comparaisons.

Les booléens sont donc encodés comme des entiers, selon la même convention qu'en langage C : la valeur 0 représente false, toute valeur non-nulle représente true.

Les fonctions suivantes effectuent la conversion selon ce principe. La fonction int_of_bool envoie true vers 1 par convention.

val bool_of_int : int -> bool
val int_of_bool : bool -> int
type t =
  1. | Add
  2. | Sub
  3. | Mul
  4. | Div
  5. | Or
  6. | And
  7. | Not
  8. | Eq
  9. | Diff
  10. | Le
  11. | Lt
  12. | Ge
  13. | Gt
  14. | PrintInt

Le type des opérations prédéfinies du langage source.

Les opérations n'ayant pas de résultat significatif renvoient un entier arbitraire. Actuellement la seule opération de cette sorte est Builtin.t.PrintInt.

val to_string : t -> string

to_string op donne une représentation sous forme de chaîne de caractère de l'opérateur op.

val arity : t -> int

arity op renvoie l'arité de l'opérateur op, c'est-à-dire son nombre d'opérandes.

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

Les opérateurs prédéfinis sont affichables.

type sem =
  1. | Fun of int -> sem
  2. | Res of int

Le type sem ci-dessous représente la sémantique d'un opérateur, qui est une fonction n-aire travaillant sur les entiers.

val eval : t -> sem

eval op renvoie la sémantique de l'opérateur prédéfini op.

val out : out_channel ref

Le canal sur lequel l'opérateur prédéfini print_int écrira, positionné à stdout par défaut.