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

生成したレジスタ割り当てと中間命令列のタプル