78 lines
1.2 KiB
OCaml
78 lines
1.2 KiB
OCaml
|
|
||
|
type bool =
|
||
|
| True
|
||
|
| False
|
||
|
|
||
|
val negb : bool -> bool
|
||
|
|
||
|
type nat =
|
||
|
| O
|
||
|
| S of nat
|
||
|
|
||
|
type 'a option =
|
||
|
| Some of 'a
|
||
|
| None
|
||
|
|
||
|
type sumbool =
|
||
|
| Left
|
||
|
| Right
|
||
|
|
||
|
val add : nat -> nat -> nat
|
||
|
|
||
|
val mul : nat -> nat -> nat
|
||
|
|
||
|
val sub : nat -> nat -> nat
|
||
|
|
||
|
val eqb : nat -> nat -> bool
|
||
|
|
||
|
val leb : nat -> nat -> bool
|
||
|
|
||
|
val bool_dec : bool -> bool -> sumbool
|
||
|
|
||
|
type ascii =
|
||
|
| Ascii of bool * bool * bool * bool * bool * bool * bool * bool
|
||
|
|
||
|
val ascii_dec : ascii -> ascii -> sumbool
|
||
|
|
||
|
type string =
|
||
|
| EmptyString
|
||
|
| String of ascii * string
|
||
|
|
||
|
val string_dec : string -> string -> sumbool
|
||
|
|
||
|
val eqb_string : string -> string -> bool
|
||
|
|
||
|
type 'a total_map = string -> 'a
|
||
|
|
||
|
val t_update : 'a1 total_map -> string -> 'a1 -> string -> 'a1
|
||
|
|
||
|
type state = nat total_map
|
||
|
|
||
|
type aexp =
|
||
|
| ANum of nat
|
||
|
| AId of string
|
||
|
| APlus of aexp * aexp
|
||
|
| AMinus of aexp * aexp
|
||
|
| AMult of aexp * aexp
|
||
|
|
||
|
type bexp =
|
||
|
| BTrue
|
||
|
| BFalse
|
||
|
| BEq of aexp * aexp
|
||
|
| BLe of aexp * aexp
|
||
|
| BNot of bexp
|
||
|
| BAnd of bexp * bexp
|
||
|
|
||
|
val aeval : state -> aexp -> nat
|
||
|
|
||
|
val beval : state -> bexp -> bool
|
||
|
|
||
|
type com =
|
||
|
| CSkip
|
||
|
| CAss of string * aexp
|
||
|
| CSeq of com * com
|
||
|
| CIf of bexp * com * com
|
||
|
| CWhile of bexp * com
|
||
|
|
||
|
val ceval_step : state -> com -> nat -> state option
|