SCANNER.DEF 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. (* Renamed for readability. Semantics unchanged. Original identifiers: see docs/compiler/ + src/compiler/RENAME-MAP.md. *)
  2. DEFINITION MODULE SCANNER;
  3. FROM SYSTEM IMPORT ADDRESS, WORD;
  4. FROM Compiler IMPORT RecordPtr; (* to be sure Compiler is first dependency *)
  5. FROM Files IMPORT FILE;
  6. FROM SymTab IMPORT T1, StringPtr;
  7. (* NOTE: parameter names are single letters AND MUST MATCH the MOD exactly
  8. (Turbo v1.00 rejects DEF/MOD signature mismatches, proven on hardware).
  9. Texts/ComLine/Loader/Doubles/Errors intentionally NOT imported here:
  10. nothing in this interface uses them (verified), the IMPLEMENTATION module
  11. imports them itself, and every imported name counts against the compiler's
  12. fixed import/export name table (proven by overflow experiments). *)
  13. TYPE Ext = ARRAY [0..2] OF CHAR;
  14. T = POINTER TO ARRAY [0..6] OF WORD;
  15. Buf = ARRAY [0..128] OF CHAR;
  16. (*
  17. Identifier = ARRAY [0..14] OF CHAR;
  18. StringPtr = POINTER TO Identifier;
  19. *)
  20. List = POINTER TO ListDesc;
  21. ListDesc = RECORD first: T1; ident: StringPtr END;
  22. TypeOfChar = [0..255];
  23. VAR
  24. scanOpt: BITSET;
  25. curCh: CHAR;
  26. codeFile: FILE;
  27. curSym: CARDINAL;
  28. isLit: BOOLEAN;
  29. cardVal: CARDINAL;
  30. curNode: RecordPtr;
  31. identKd: CARDINAL;
  32. follSet: BITSET;
  33. tokBuf: Buf;
  34. litType: RecordPtr;
  35. scopeCur: T1;
  36. realVal: REAL;
  37. srcFile: FILE;
  38. lrealVal: LONGREAL;
  39. codeBuf: ADDRESS;
  40. codeSize: CARDINAL;
  41. listing: BOOLEAN;
  42. charClas: POINTER TO ARRAY [0..255] OF TypeOfChar;
  43. tokPos: CARDINAL;
  44. tokCol: CARDINAL;
  45. keyHash: PROCEDURE(ADDRESS, BOOLEAN):CARDINAL;
  46. PROCEDURE GetSym;
  47. PROCEDURE NextCh;
  48. PROCEDURE PushWith;
  49. PROCEDURE AcceptSy(s: CARDINAL): BOOLEAN;
  50. PROCEDURE GetStack(VAR m: ADDRESS);
  51. PROCEDURE CheckStk(m: ADDRESS);
  52. PROCEDURE Allocate(VAR a:ADDRESS; n:CARDINAL);
  53. PROCEDURE ExpectSy(s: CARDINAL);
  54. PROCEDURE TestSet(s: BITSET);
  55. PROCEDURE TestR40(s: BITSET);
  56. PROCEDURE TestR13(s: BITSET);
  57. PROCEDURE NeedID;
  58. PROCEDURE ExpectKd(k: CARDINAL);
  59. PROCEDURE NewSized(k:CARDINAL):ADDRESS;
  60. PROCEDURE NewNode(k:CARDINAL):ADDRESS;
  61. PROCEDURE CopyStr(VAR d:ADDRESS; VAR s: ARRAY OF CHAR);
  62. PROCEDURE OpenScop(a:ADDRESS; b: ADDRESS);
  63. PROCEDURE MakeIden(k:CARDINAL):ADDRESS;
  64. PROCEDURE DeclIden(k:CARDINAL):ADDRESS;
  65. PROCEDURE InsertSy(n: T1);
  66. PROCEDURE ExpectSt(VAR p: ARRAY OF CHAR);
  67. PROCEDURE FindIden(l: List; i: ADDRESS; c: BOOLEAN):RecordPtr;
  68. PROCEDURE StrCmp(a,b: ADDRESS; c: BOOLEAN): BOOLEAN; (* v1.00: StringPtr params rejected (pointer-type mismatch); ADDRESS+overlay is codegen-identical *)
  69. PROCEDURE StrLen(VAR s: ARRAY OF CHAR): CARDINAL;
  70. PROCEDURE ChangeEx(VAR f: ARRAY OF CHAR; e: Ext; x: BOOLEAN);
  71. PROCEDURE ScanErr(c: CARDINAL);
  72. PROCEDURE EnterMod(m: ARRAY OF CHAR; k: CARDINAL): CARDINAL;
  73. PROCEDURE InitScan;
  74. PROCEDURE OpenSrc;
  75. PROCEDURE Compile;
  76. END SCANNER.