Module Lib.Skimmel

Ce module définit la syntaxe abstraite du langage source (type t) ainsi que divers types et fonctions auxiliaires.

La sémantique du langage est définie par le sous-module Eval.

Définitions de types

type t =
  1. | Var of Id.t
    (*

    Une (occurrence de) variable.

    *)
  2. | Lit of int
    (*

    Une constante littérale.

    *)
  3. | Builtin of Builtin.t
    (*

    Un opérateur prédéfini.

    *)
  4. | Fun of t Id.Scoped.t
    (*

    Une fonction anonyme.

    Le paramètre formel de la fonction est géré via le type Id.Scoped.t.

    Par exemple, la valeur Fun Id.Scoped.{ bound = "x"; inscope = Var "x"; } représente l'arbre de syntaxe de la fonction écrite fun x -> x dans la syntaxe concrète.

    *)
  5. | RecFun of t Id.Scoped.t Id.Scoped.t
  6. | App of t * t
    (*

    Une application de fonction.

    *)
  7. | Let of t * t Id.Scoped.t
    (*

    Une définition locale.

    *)
  8. | Seq of t * t
    (*

    Une séquence e1 ; e2. La valeur de l'expression gauche est ignorée, le résultat est celui de l'expression droite.

    *)
  9. | If of t * t * t
    (*

    Une expression conditionnelle.

    *)
  10. | Pair of t * t
    (*

    Une paire.

    *)
  11. | Proj of bool * t
    (*

    Une projection hors d'une paire : si e est une expression Skimmel qui s'évalue vers une paire Pair (v1, v2), alors l'expression Proj (false, e) (respectivement Proj (true, e)) s'évalue vers v1 (respectivement v2).

    *)

Le type des expressions de Skimmel, notre langage source.

Opérations utilitaires

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

Les arbres de syntaxe sont affichables.

val gather_args : t -> t * t list

gather_args e renvoie une paire (e', args) telle que e est l'application de e' à la liste d'arguments args.

Par exemple, si e est de la forme App (App (e1, e2), e3) alors gather_args e renvoie (e1, [e2; e3]).

Si args est vide, alors e par définition n'était pas une application.

module Eval : sig ... end

Le module Eval fournit un interprète pour Skimmel.

module Build : sig ... end

Le module Build fournit diverses fonctions utilitaires qui facilitent la construction d'expression Skimmel.