Module Eval
eval.ml
include Eval__.Vm
type vm_atom
= string * link array
and vm_atom_elt
= vm_atom Util.DList.element
and link
=
|
NormalLink of int * vm_atom_elt
(port_i, atom)
|
VMIntData of int
val null_atom_elt : vm_atom_elt
レジスタを初期化するためだけのアドレス(本来はいらない)
val null_link : link
リンクを初期化するためだけのアドレス(本来はいらない)
type registers
= vm_atom_elt array
レジスタ
val init_register : int -> registers
初期状態のレジスタを確保する
val retrieve_normal_link : link -> int * vm_atom_elt
NormalLink コンストラクタを剥がす
val get_functor : ('a * 'b array) Util.DList.element array -> int -> 'a * int
ファンクタを取得する
val free_atom : (string * 'a) Util.DList.element -> (string * 'a) Util.DList.element
Free memory fragment of the given address. Possibly implemented with
option
type and assignNone
.
module AtomLists = Eval__.Vm.AtomLists
アトムリストの Map.
val atom_list : vm_atom Util.DList.t
アトムリスト
val dump_link : (vm_atom * int) list -> link -> vm_dump_link
リンクの解消
val dump_atom : (vm_atom * int) list -> 'a -> ('b * link array) -> 'a * ('b * vm_dump_link list)
val dump_atom_list : vm_atom Util.DList.t AtomLists.t -> (int * (string * vm_dump_link list)) list
val reduce : Eval__.Vm.vm_atom Util.DList.t Eval__.Vm.AtomLists.t -> ('a * (int * (Generator.lhs_inst list * Parse.arg list * Generator.rhs_inst list))) -> ('a * Eval__.Vm.vm_atom Util.DList.t Eval__.Vm.AtomLists.t) option
Try to reduce one step with the given atoms and a rule
- ルール適用に成功したら Some で包んだ更新された atom_list を返す
val run_once : Eval__.Vm.vm_atom Util.DList.t Eval__.Vm.AtomLists.t -> ('a * (int * (Generator.lhs_inst list * Parse.arg list * Generator.rhs_inst list))) list -> ('a * Eval__.Vm.vm_atom Util.DList.t Eval__.Vm.AtomLists.t) option
Try reduce one step with the given atoms and rules
val init_atoms : (int * Generator.rhs_inst list) -> Eval__.Vm.vm_atom Util.DList.t Eval__.Vm.AtomLists.t
push the initial graph and return their references