Module Generator__.Register_table
type reg_tbl={matched_functors : (Generator__.Instruction.functor_ * Generator__.Instruction.reg_i) list;ルール左辺でマッチしたアトムのファンクタとその参照が格納されているレジスタ番号の連想リスト
- アトムの非単射的マッチングを避けるために用いる
matched_local_links : int 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空のレジスタ