| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- DEFINITION MODULE Generator; (* gf 05.01.89 *)
- FROM Scanner IMPORT STRING;
- FROM Interpreter IMPORT INSTR, Command;
- (* EXPORT QUALIFIED Label,
- Gen, GenL, GenS, Gens,
- GetNewLabel, SetLabel,
- CodeStore,
- InitGenerator;
- *)
- CONST maxadr = 1023;
- TYPE Label;
- VAR CodeStore : ARRAY[0..maxadr] OF INSTR;
- PROCEDURE GetNewLabel() : Label;
- (* get a new label to be used by GenL and SetLabel. *)
- PROCEDURE SetLabel(lab: Label);
- (* inserts label 'lab' at current code position. *)
- (* fixes all instuctions which contain this label *)
- (* in their 'val' field, i.e. all instructions *)
- (* which are genereated by GenL(.., .., lab). *)
- PROCEDURE Gen(fct: Command; lev, val: CARDINAL);
- (* emmit instruction *)
- PROCEDURE GenL(fct: Command; lev: CARDINAL; lab: Label);
- (* emmit instruction. the 'val' field contains the *)
- (* address of label 'lab'. if the address of 'lab' *)
- (* is unknown, the 'val' field will be fixed by *)
- (* SetLabel. *)
- PROCEDURE GenS(fct: Command; len: CARDINAL; str: STRING);
- (* emmit instruction. to be used to generate *)
- (* instructions which are followed by a string *)
- (* literal. the length of the string is stored in *)
- (* the 'val' field. *)
- PROCEDURE Gens(fct: Command);
- (* short form of Gen, == Gen(fct, 0, 0) *)
- PROCEDURE InitGenerator;
- END Generator.
|