Module Generator__.Register_table

type reg_tbl = {
matched_functors : (Generator__.Instruction.functor_ * Generator__.Instruction.reg_i) list;

ルール左辺でマッチしたアトムのファンクタとその参照が格納されているレジスタ番号の連想リスト

  • アトムの非単射的マッチングを避けるために用いる
atom2reg_i : (int * Generator__.Instruction.reg_i) list;

マッチしたアトムのアドレスを格納しているレジスタ番号の連想リスト

  • 局所リンクは必ず参照先のアトムもルール左辺で明示的に与えられるので,これがあれば十分なはず
free2reg_i : (string * (Generator__.Instruction.reg_i * int)) list;

ルール左辺でマッチした自由リンクを持つアトムが格納されているレジスタ番号とポートの番号の組への連想リスト

free_reg_i : int;

まだ使っていないレジスタ番号の最小値(= レジスタの数)

}

An environment for the matching and pushout

  • マッチしたレジスタを記録するために, 簡易的に連想リストを用いているが,マップを使った方が良いかも知れない
val empty_reg_tbl : reg_tbl

空のレジスタ

val get_free_reg_i : reg_tbl -> int * reg_tbl

まだ使っていないレジスタ番号を取得する