Module Mlsem_app.PAst

exception SymbolError of string
exception LexicalError of Mlsem_common.Position.t * string
exception SyntaxError of Mlsem_common.Position.t * string

Expr AST

type 'typ lambda_annot = 'typ option
type 'typ vkind =
  1. | Immut
  2. | AnnotMut of 'typ
  3. | Mut
type ('typ, 'v) vdef = 'typ vkind * 'v
type ('a, 'typ, 'gty, 'tag, 'v) pattern =
  1. | PatType of 'typ
  2. | PatVar of ('gty, 'v) vdef
  3. | PatLit of Mlsem_lang.Const.t
  4. | PatTag of 'tag * ('a, 'typ, 'gty, 'tag, 'v) pattern
  5. | PatAnd of ('a, 'typ, 'gty, 'tag, 'v) pattern * ('a, 'typ, 'gty, 'tag, 'v) pattern
  6. | PatOr of ('a, 'typ, 'gty, 'tag, 'v) pattern * ('a, 'typ, 'gty, 'tag, 'v) pattern
  7. | PatTuple of ('a, 'typ, 'gty, 'tag, 'v) pattern list
  8. | PatCons of ('a, 'typ, 'gty, 'tag, 'v) pattern * ('a, 'typ, 'gty, 'tag, 'v) pattern
  9. | PatRecord of (string * ('a, 'typ, 'gty, 'tag, 'v) pattern) list * bool
  10. | PatAssign of ('gty, 'v) vdef * Mlsem_lang.Const.t
and ('a, 'typ, 'gty, 'enu, 'tag, 'v) ast =
  1. | Magic of 'gty
  2. | Const of Mlsem_lang.Const.t
  3. | Var of 'v
  4. | Enum of 'enu
  5. | Tag of 'tag * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  6. | TagProj of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * 'tag
  7. | Suggest of 'v * 'typ list * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  8. | Lambda of 'v * 'gty lambda_annot * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  9. | LambdaRec of ('v * 'gty lambda_annot * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t) list
  10. | Ite of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * 'gty * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  11. | App of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  12. | Let of ('gty, 'v) vdef * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  13. | Declare of ('gty, 'v) vdef * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  14. | Tuple of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t list
  15. | TupleProj of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * int * int
  16. | Cons of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  17. | Hd of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  18. | Tl of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  19. | Record of (string * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t) list
  20. | RecordUpdate of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * string * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t option
  21. | RecordProj of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * string
  22. | TypeCast of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * 'gty * Mlsem_system.Ast.check
  23. | TypeCoerce of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * 'gty * Mlsem_system.Ast.check
  24. | VarAssign of 'v * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  25. | PatMatch of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * (('a, 'typ, 'gty, 'tag, 'v) pattern * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t) list
  26. | Cond of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * 'gty * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t option
  27. | While of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * 'gty * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  28. | Seq of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  29. | Alt of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t * ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  30. | Return of ('a, 'typ, 'gty, 'enu, 'tag, 'v) t
  31. | Break
  32. | Continue
and ('a, 'typ, 'gty, 'enu, 'tag, 'v) t = 'a * ('a, 'typ, 'gty, 'enu, 'tag, 'v) ast

Program AST

type varname = string
module NameMap : Stdlib.Map.S with type key = string
type name_var_map = Mlsem_common.Variable.t NameMap.t
val empty_name_var_map : name_var_map
type element =
  1. | Definitions of ((Mlsem_types.TyExpr.t, string) vdef * pexpr) list
  2. | SigDef of string * bool * Mlsem_types.TyExpr.t
  3. | Types of (string * string list * Mlsem_types.TyExpr.t) list
  4. | AbsType of string * int
  5. | Command of string * Mlsem_lang.Const.t
type program = (annotation * element) list