| 1 | (* "We use the word _temporary_ to mean a value that is temporarily held in a |
| 2 | * register, and the word _label_ to mean some machine-language location whose |
| 3 | * exact address is yet to be determined - just like a label in assembly |
| 4 | * language." ch. 6.2, p. 139 *) |
| 5 | |
| 6 | (* "temp" is an abstract name of "local variable" *) |
| 7 | module Temp : sig |
| 8 | type t |
| 9 | |
| 10 | val gen : unit -> t |
| 11 | (** "newtemp" - new temporary from an infinite set of temps. *) |
| 12 | |
| 13 | val to_string : t -> string |
| 14 | end |
| 15 | |
| 16 | (* "label" is an abstract name for "static memory address" *) |
| 17 | module Label : sig |
| 18 | type t |
| 19 | |
| 20 | val gen : unit -> t |
| 21 | (** "newlabel" - new label from an infinite set of labels. *) |
| 22 | |
| 23 | val of_string : string -> t |
| 24 | (** "namedlabel" - new label whose assembly-language name is string. *) |
| 25 | |
| 26 | val to_string : t -> string |
| 27 | end |