1 /* Loglan82 Compiler&Interpreter
2 Copyright (C) 1993 Institute of Informatics, University of Warsaw
3 Copyright (C) 1993, 1994 LITA, Pau
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 =======================================================================
20 /* DATA STRUCTURES COPIED FROM LOGLAN COMPILER */
24 /* compiler symbol table and memory */
26 address * m ; /* "SMALL" M , FOR PROTOTYPES OR CODE FOR ONE UNIT ONLY */
28 int nblus ; /* ADDRESS OF MAIN BLOCK IN IPMEM */
29 int nrint ; /* ADDRESS OF TYPE INTEGER IN IPMEM */
31 /* ADDRESS OF TYPE REAL IN IPMEM */
33 /* ADDRESS OF TYPE BOOLEAN IN IPMEM */
35 /* ADDRESS OF TYPE CHAR IN IPMEM */
37 /* ADDRESS OF TYPE STRING IN IPMEM */
39 /* ADDRESS OF TYPE COROUTINE IN IPMEM */
41 /* ADDRESS OF TYPE PROCESS IN IPMEM */
43 /* THE LAST INDEX BELOW REAL CONSTANTS */
45 /* LAST INDEX OF REAL CONSTANT AREA */
47 /* ACTUAL (I.E. FROM COMPILER) SIZE OF IPMEM */
51 /* INFORMATION ADDED INTO IPMEM : */
53 /* LOWER ADDRESSES ARE OCCUPIED BY COMPILER SYMBOL TABLE */
54 /* UPPER ADDR. ARE USED IN 'CODE' FOR GENERATOR SYMBOL TABLE. */
55 /* EACH (GENERATOR) SYMBOL TABLE ITEM OCCUPIES 3 WORDS : */
56 /* (+0) = STITEM ( --> CODE) */
57 /* (+1) = VALUE OF CONSTANT */
58 /* OR OFFSET OF TEMPORARY VARIABLE, */
59 /* OR POINTER TO THE ATTRIBUTE DESCRIPTION IN COMP.SYM.TABLE */
60 /* (+2) = NEXT USE (QADDR) */
62 /* PROCEDURE 'GENPROT' MODIFIES INFORMATION IN COMPILER SYMBOL TABLE. */
63 /* PROCEDURE 'CODE' NEED THE FOLLOWING EXTRA INFORMATION : */
65 /* FOR EACH UNIT: (-1) = PROTADDR */
66 /* (+0) = ADDRESS OF 'AFTER INNER' STATEMENT */
67 /* ( STORED BY 'CODE' ) */
68 /* FOR EACH OBJECT ATTRIBUTE: */
70 /* (-1) = PROTADDR FOR THAT OBJECT */
71 /* FOR EACH TYPE (CLASS TYPE, FORMAL TYPE OR PRYMITIVE TYPE): */
72 /* (+2) = - ADDRESS OF TYPE DESCRIPTION IN M */
74 /* MOREOVER, EXTRA INFORMATION IS STORED TO LINK REFERENCES TO THE TYPES */
75 /* ( --> BACKPATCH) */
77 address base ; /* TOTAL LENGTH OF JUST PRODUCED CODE;
78 TO BE ADDED TO INDEX IN "SMALL" M */
79 address realbase ; /* BASE FOR REAL CONSTANTS */
81 dprotaddr prefix[ MAXPROT + 1 ] ; /* PROTOTYPE NUMBER OF PREFIX */
82 /* OR DUMMY IF PREFIX ABSENT */
86 /* TYPES OF SOME OBJECTS BELONGING TO THE ADDRESS TYPE HAVE BEEN CHANGED */
87 /* TO INTEGER. THIS HAS BEEN FORCED DUE TO THE REQUIREMENTS OF THE PASCAL */
88 /* COMPILER ACCESSIBLE ON SIEMENS WHICH DEMANDS THAT THE PROCEDURE AND */
89 /* FUNCTION PARAMETERS PASSED BY VARIABLE HAVE STRICTLY THE SAME TYPE AS */
90 /* THEIR FORMAL CORRESPONENTS. */
94 /* Variables of code to follow */
95 /* qaddr0 qcurr ; */ /* CURRENT QUADRUPLE */
96 qaddr qlast ; /* LAST QUADRUPLE */
98 quadruple tuple[ QMAX + 1 ] ;
100 protaddr unitt ; /* CURRENT UNIT */
101 int ipunit ; /* UNIT ADDRES IN IPMEM */
104 int notrick ; /* FOR INTEGER <--> STITEM CONVERSION */
106 /* M^ [ FIRSTLABEL..MEMLIMIT ] IS USED FOR HANDLING LABELS */
108 /* M^ [ MEMLIMIT-L+1 ] < 0 */
109 /* --> = - VALUE OF ALREADY DEFINED LABEL */
110 /* M^ [ MEMLIMIT-L+1 ] > 0 */
111 /* --> = HEAD OF UNSATISFIED REFERENCES LIST */
113 int none ; /* ADDRESS OF 'NONE' IN SYMBOL TABLE */
117 /*CBC added concurrent statements... */
118 protaddr proclist[ MAXPROCLIST + 1 ] ;
120 /* mb vars from back to follow */
127 /*mb vars from gen to follow */
129 filename file_name ; /* text given by the user as a file name */
132 /* OUTPUT FROM LOGLAN COMPILER: */
137 /* PARTICULAR SECTIONS ARE SEPARATED BY '#' OCCURRING IN THE */
138 /* FIRST POSITION OF LINE. ZEROS OCCURRING IN THE SYMBOL TA- */
139 /* BLE ARE COMPRESSED (SEE GETITEM). */
141 /* TEMPORARY FILES: WRITEN BY GENERATOR, READ BY INTERPRETER */
142 FILE * cfile ; /* CODE AND LISTS FOR PROTOTYPES */
143 FILE * pfile ; /* PROTOTYPES */
145 int error ; /* TRUE FOR FAILURE DURING GENERATION */
147 pointprdsc prototype[MAXPROT + 1] ;
149 address ipradr ; /* BASE FOR PRIMITIVE TYPES DESCRIPTIONS */
150 address temporary ; /* ADDRESS OF GLOBAL TEMPORARY VARIABLES */
151 address strings ; /* BASE FOR STRING CONSTANTS */
152 protaddr lastprot ; /* THE LAST USED PROTOTYPE NUMBER */
153 address fre ; /* FIRST FREE CELL IN M */
157 pointer listofref[ MAXPROT + 1 ] ;
158 /* LISTS OF REFERENCE ATTRIBUTES WITH POINTERS TO IPMEM */
160 longpointer listofpar[ MAXPROT + 1 ] ;
161 /* LISTS OF PRODUCED DESCRPTIONS OF FORMAL PARAMETERS */
164 14, 15, 14, 14, 14, 0, 0, 0, 0, 0,
165 8, 8, 9, 0, 9, 9, 0, 0, 0, 10,
166 10, 10, 10, 10, 10, 10, 0, 0, 12, 11,
167 11, 11, 11, 11, 11, 11, 12, 11, 12, 12,
168 11, 11, 11, 9, 9, 11, 11, 11, 11, 11,
169 11, 12, 12, 12, 12, 12, 12, 11, 11, 11,
170 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
171 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
172 11, 11, 11, 12, 12, 12, 12, 12, 12, 12,
173 12, 12, 12, 12, 12, 12, 12, 12, 12, 13,
174 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
175 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
176 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
177 13, 1, 0, 0, 0, 0, 3, 3, 3, 2,
178 2, 0, 2, 3, 4, 2, 2, 2, 3, 3,
179 3, 3, 2, 0, 0, 0, 0, 2, 5, 5,
180 5, 5, 5, 6, 6, 6, 0, 0, 0, 7,
181 0, 0, 0, 0, 1, 0, 1, 1, 0, 0,
182 1, 1, 1, 1, 0, 1, 0, 2, 4, 0,
183 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
184 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
185 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
186 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
187 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 };