Module Generator__.Match
val check_arg : Generator__.Instruction.reg_i -> ((int * int) list Analyze.LocalPortMap.t * Generator__.Register_table.reg_tbl) -> int -> Corelang.c_link -> ((int * int) list Analyze.LocalPortMap.t * Generator__.Register_table.reg_tbl) * Generator__.Instruction.lhs_inst list
アトムの引数のリンクのマッチングを行う命令を生成する
val check_ref_neq_of : Generator__.Instruction.reg_i -> Generator__.Instruction.reg_i -> Generator__.Instruction.lhs_inst
リンクの非単射的マッチングを行うための命令
val check_atom : ((int * int) list Analyze.LocalPortMap.t * Generator__.Register_table.reg_tbl) -> Generator__.Instruction.reg_i -> (string * Corelang.c_link list) -> ((int * int) list Analyze.LocalPortMap.t * Generator__.Register_table.reg_tbl) * Generator__.Instruction.lhs_inst list
アトムのマッチングを行う命令を生成する
val functor_of_atom : ('a * 'b list) -> 'a * int
val find_atom : ((int * int) list Analyze.LocalPortMap.t * Generator__.Register_table.reg_tbl) -> (int * (string * Corelang.c_link list)) -> ((int * int) list Analyze.LocalPortMap.t * Generator__.Register_table.reg_tbl) * Generator__.Instruction.lhs_inst list
アトムをアトムリストから適当に peak するか,すでに格納済みでレジスタから dereference するかを決める
- reg_tbl を受け取って,更新した reg_tbl と 生成した中間命令列を返す
val find_atoms : ((int * int) list Analyze.LocalPortMap.t * Generator__.Register_table.reg_tbl) -> (int * (string * Corelang.c_link list)) list -> ((int * int) list Analyze.LocalPortMap.t * Generator__.Register_table.reg_tbl) * Generator__.Instruction.lhs_inst list
引数に (local_port_map, reg_tbl) atoms をとる
val match_ : (Analyze.local_port_map * Analyze.a_atom list) -> Generator__.Register_table.reg_tbl * Generator__.Instruction.lhs_inst list
ルール左辺を中間命令列に変換する 局所リンクのポート情報とアトムのリストを受け取って変換する
- parameter local_port_map
局所リンクのポート情報
- returns
生成したレジスタ割り当てと中間命令列のタプル