Module Skimmel.Eval

Le module Eval fournit un interprète pour Skimmel.

La sémantique du langage source est défini par un interprète de référence, la fonction eval de ce module.

Celle-ci associe aux expressions du langage (de type t) leur valeur (de type value) dans un environnement (de type env). L'environnement détermine la valeur des variables libres de l'expression.

type value =
  1. | VLit of int
    (*

    Les constantes littérales sont des valeurs.

    *)
  2. | VPair of value * value
    (*

    Les paires de valeurs sont des valeurs.

    *)
  3. | VFun of value -> value
    (*

    Les fonctions des valeurs dans les valeurs sont des valeurs.

    *)

Les valeurs sont les résultats possibles de l'évaluation d'une expression du langage source Skimmel.

val pp_value : Format.formatter -> value -> unit

Les valeurs sont affichables.

type env = value Id.Env.t

Les environnements spécifient la valeur des variables libres d'une expression du langage en associant à chacune sa valeur.

val pp_env : Format.formatter -> env -> unit

Les environnements sont affichables.

val initial_env : env

L'environnement initial, vide.

val eval : env -> t -> value

Un appel eval env e renvoie la valeur v de l'expression e, en supposant que la valeur des variables libres de e soit définie par l'environnement env.

Cet appel interrompt l'exécution du programme avec une erreur si l'expression e est mal typée. Par exemple, e pourrait :

  • chercher à appliquer un entier à un argument, comme s'il s'agissait d'une fonction,
  • calculer le ET logique de deux fonctions,
  • faire référence à une variable qui n'est pas définie dans env.

La liste ci-dessus n'est pas exhaustive.