996
|
1 PLEASE NOTE THAT THIS PROGRAM IS A COMPILER GENERATOR
|
|
2 (IACC - INTERCAL ADVANCED COMPILER COMPILER)
|
|
3
|
|
4 Copyright (c) 2006-2008 Claudio Calvelli, all rights reserved.
|
|
5
|
|
6 CLC-INTERCAL is copyrighted software. However, permission to use, modify,
|
|
7 and distribute it is granted provided that the conditions set out in the
|
|
8 licence agreement are met. See files README and COPYING in the distribution.
|
|
9
|
|
10 TO COMPILE A COMPILER:
|
|
11
|
|
12 sick --preload=iacc --batch compiler.iacc
|
|
13
|
|
14 TO USE A COMPILER COMPILED WITH IACC:
|
|
15
|
|
16 sick --preload=compiler --batch program.i
|
|
17
|
|
18 THIS FILE IS ALSO AVAILABLE AS A PREBUILT COMPILER (iacc.io).
|
|
19 TO REBUILD AFTER MODIFYING THIS FILE:
|
|
20
|
|
21 sick --preload=iacc --batch iacc.iacc
|
|
22
|
|
23 END OF THE USAGE INSTRUCTIONS
|
|
24
|
|
25 PERVERSION "CLC-INTERCAL INTERCAL/Include/iacc.iacc 1.-94.-2"
|
|
26
|
|
27 PLEASE NOTE: INITIAL VALUES FOR REGISTERS
|
|
28 DO %PS <- ?PROGRAM
|
|
29 DO %IS <- #0
|
|
30 DO %FS <- ?CALC_FULL
|
|
31 DO %ES <- ?CALC_EXPR
|
|
32 DO %JS <- ?END_JUNK
|
|
33 DO %SS <- ?SPACE
|
|
34 DO %IO <- ?CLC
|
|
35 DO %CR <- ?ASCII
|
|
36 DO %CW <- ?ASCII
|
|
37 DO ?TYPE <- ?IACC
|
|
38
|
|
39 PLEASE NOTE: DETERMINE WHERE JUNK ENDS
|
|
40 DO CREATE _2 ?END_JUNK ?DO_PLEASE AS ,,
|
|
41
|
|
42 PLEASE NOTE: COMPILER COMPILER STARTS HERE
|
|
43 DO CREATE _2 ?BYTECODE ?SPECIAL_REGISTER=* AS ?SPECIAL_REGISTER
|
|
44 #1
|
|
45
|
|
46 DO CREATE _2 ?BC_OR_CONST ?BYTECODE=* AS ?BYTECODE #1
|
|
47 DO CREATE _2 ?BC_OR_CONST ,#35, ?CONSTANT=1 AS ?CONSTANT #1
|
|
48
|
|
49 DO CREATE _2 ?BC_LIST ?BC_OR_CONST=* AS ?BC_OR_CONST #1
|
|
50 DO CREATE _2 ?BC_LIST ?BC_OR_CONST=* ,#43, ?BC_LIST=* AS
|
|
51 ?BC_OR_CONST #1 + ?BC_LIST #1
|
|
52
|
|
53 DO CREATE _2 ?NONBINARY ,#35, ?CONSTANT AS ?CONSTANT #1
|
|
54 DO CREATE _2 ?NONBINARY ?SPECIAL_REGISTER AS ?SPECIAL_REGISTER
|
|
55 #1
|
|
56 DO CREATE _2 ?NONBINARY ,#44, ,#63, ?E_LIST ,#44, AS MUL +
|
|
57 !E_LIST #1 + ?E_LIST #1
|
|
58 DO CREATE _2 ?NONBINARY ,#63, ?SYMBOL AS ?SYMBOL #1
|
|
59 DO CREATE _2 ?NONBINARY ,#39, ?EXPRESSION ,#39, AS ?EXPRESSION
|
|
60 #1
|
|
61 DO CREATE _2 ?NONBINARY ,#34, ?EXPRESSION ,#34, AS ?EXPRESSION
|
|
62 #1
|
|
63 DO CREATE _2 ?EXPRESSION ?NONBINARY ?MAYBE_BINARY AS
|
|
64 ?MAYBE_BINARY #1 + ?NONBINARY #1
|
|
65 DO CREATE _2 ?MAYBE_BINARY ,, AS ,,
|
|
66 DO CREATE _2 ?MAYBE_BINARY ?BINARY ?EXPRESSION AS ?BINARY #1 +
|
|
67 ?EXPRESSION #1
|
|
68
|
|
69 DO CREATE _2 ?BINARY ,#162, AS RIN
|
|
70 DO CREATE _2 ?BINARY ,#126, AS RSE
|
|
71
|
|
72 DO CREATE _2 ?E_LIST ?EXPRESSION=1 AS ?EXPRESSION #1
|
|
73 DO CREATE _2 ?E_LIST ?EXPRESSION=1 ,#43, ?E_LIST=* AS
|
|
74 ?EXPRESSION #1 + ?E_LIST #1
|
|
75
|
|
76 DO CREATE _2 ?CLEFT ?EXPRESSION AS #0 + ?EXPRESSION #1
|
|
77 DO CREATE _2 ?CLEFT ?TAILS AS #1 + ?TAILS #1
|
|
78 DO CREATE _2 ?CLEFT ,#44, ,#44, AS #1 + STR + #0
|
|
79 DO CREATE _2 ?LEFT ?CLEFT ?MAYBE_COUNT AS ?MAYBE_COUNT #1 +
|
|
80 ?CLEFT #1
|
|
81 DO CREATE _2 ?MAYBE_COUNT ,, AS #0
|
|
82 DO CREATE _2 ?MAYBE_COUNT ,#61, ?CONSTANT AS ?CONSTANT #1
|
|
83 DO CREATE _2 ?MAYBE_COUNT ,#61, ?EXPRESSION AS ?EXPRESSION #1
|
|
84 DO CREATE _2 ?MAYBE_COUNT ,#61, ,#42, AS #65535
|
|
85 DO CREATE _2 ?LEFTS ?LEFT=1 AS ?LEFT #1
|
|
86 DO CREATE _2 ?LEFTS ?LEFT=1 ?LEFTS=* AS ?LEFT #1 + ?LEFTS #1
|
|
87
|
|
88 DO CREATE _2 ?RIGHT ?EXPRESSION ?EXPRESSION AS #0 + ?EXPRESSION
|
|
89 #2 + ?EXPRESSION #1
|
|
90 DO CREATE _2 ?RIGHT ?TAILS ?EXPRESSION AS #1 + ?EXPRESSION #1 +
|
|
91 ?TAILS #1
|
|
92 DO CREATE _2 ?RIGHT ,#44, ,#44, AS #4 + #0
|
|
93 DO CREATE _2 ?RIGHT ?BYTECODE AS #4 + !BYTECODE #1 + ?BYTECODE
|
|
94 #1
|
|
95 DO CREATE _2 ?RIGHT ,#35, ?CONSTANT AS #4 + !CONSTANT #1 +
|
|
96 ?CONSTANT #1
|
|
97 DO CREATE _2 ?RIGHT ,#33, ?EXPRESSION ?EXPRESSION AS #6 +
|
|
98 ?EXPRESSION #2 + ?EXPRESSION #1
|
|
99 DO CREATE _2 ?RIGHT ,#33, ?SYMBOL ?EXPRESSION AS #6 +
|
|
100 ?EXPRESSION #1 + ?SYMBOL #1
|
|
101 DO CREATE _2 ?RIGHT ,#42, AS #15
|
|
102 DO CREATE _2 ?RIGHTS ?RIGHT=1 AS ?RIGHT #1
|
|
103 DO CREATE _2 ?RIGHTS ?RIGHT=1 ,#43, ?RIGHTS=* AS ?RIGHT #1 +
|
|
104 ?RIGHTS #1
|
|
105
|
|
106 DO CREATE _2 ?TAILS ,#44, ?E_LIST ,#44, AS MUL + !E_LIST #1 +
|
|
107 ?E_LIST #1
|
|
108 DO CREATE _2 ?TAILS ,#44, ?SYMBOL ,#44, AS ?SYMBOL #1
|
|
109
|
|
110 DO CREATE _2 ?VERB ?SPECIAL_REGISTER ,#60, ,#45, ?EXPRESSION AS
|
|
111 STO + ?EXPRESSION #1 + ?SPECIAL_REGISTER #1
|
|
112 DO CREATE _2 ?VERB ,STASH, ?SPECIAL_REGISTER AS STA + #1 +
|
|
113 ?SPECIAL_REGISTER #1
|
|
114 DO CREATE _2 ?VERB ,RETRIEVE, ?SPECIAL_REGISTER AS RET + #1 +
|
|
115 ?SPECIAL_REGISTER #1
|
|
116
|
|
117 DO CREATE _2 ?VERB ,INTERNAL, ?BC_LIST AS ?BC_LIST #1
|
|
118
|
|
119 DO CREATE _2 ?VERB ,CREATE, ?GRAMMAR ?EXPRESSION ?LEFTS ,AS,
|
|
120 ?RIGHTS AS CRE + ?GRAMMAR #1 + ?EXPRESSION #1 + !LEFTS #1 +
|
|
121 ?LEFTS #1 + !RIGHTS #1 + ?RIGHTS #1
|
|
122 DO CREATE _2 ?GRAMMAR ,, AS #2
|
|
123 DO CREATE _2 ?GRAMMAR ,_, ?CONSTANT AS ?CONSTANT #1
|
|
124
|
|
125 DO CREATE _2 ?VERB ,#63, ?SYMBOL ,#60, ,#45, ,#63, ?SYMBOL AS
|
|
126 FLA + ?SYMBOL #1 + ?SYMBOL #2
|
|
127
|
|
128 DO CREATE _2 ?VERB ,MAKE, ,NEW, ,OPCODE, ?EXPRESSION ?TAILS
|
|
129 ,AS, ?BC_LIST AS MKG + ?EXPRESSION #1 + ?TAILS #1 + !BC_LIST
|
|
130 #1 + ?BC_LIST #1
|
|
131
|
|
132 PLEASE NOTE: COMPILERS DON'T HAVE REINSTATE
|
|
133 DO CREATE _2 ?VERB ,NOT, ?JUNK AS ,,
|
|
134 DO CREATE _2 ?VERB ,N, ,#39, ,T, ?JUNK AS ,,
|
|
135
|
|
136 PLEASE NOTE: THE VERY LAST FEW STATEMENTS IN A COMPILER
|
|
137 DO CREATE _2 ?VERB ,FREEZE, AS FRZ
|
|
138 DO CREATE _2 ?VERB ,GIVE, ,UP, AS GUP
|
|
139
|
|
140 PLEASE NOTE: COMPILERS DON'T HAVE LABELS OR "%"
|
|
141 DO CREATE _2 ?STATEMENT ?DO_PLEASE ?VERB AS STS + * + ?VERB #1
|
|
142 DO CREATE _2 ?DO_PLEASE ,DO, AS ,,
|
|
143 DO CREATE _2 ?DO_PLEASE ,PLEASE, AS ,,
|
|
144
|
|
145 PLEASE NOTE: THE WHOLE PROGRAM
|
|
146 DO CREATE _2 ?PROGRAM ?STATEMENT AS ?STATEMENT #1
|
|
147
|
|
148 PLEASE NOTE: DEFINITIONS BORROWED FROM THE ASSEMBLER
|
|
149
|
|
150 PLEASE NOTE: NAMES OF "%" REGISTERS
|
|
151 DO CREATE _2 ?SPECIAL_REGISTER ,#37, ?REG69=* AS ?REG69 #1
|
|
152 DO CREATE _2 ?REG69 ,WT,=2 AS %WT
|
|
153 DO CREATE _2 ?REG69 ,AR,=2 AS %AR
|
|
154 DO CREATE _2 ?REG69 ,AW,=2 AS %AW
|
|
155 DO CREATE _2 ?REG69 ,JS,=2 AS %JS
|
|
156 DO CREATE _2 ?REG69 ,SS,=2 AS %SS
|
|
157 DO CREATE _2 ?REG69 ,PS,=2 AS %PS
|
|
158 DO CREATE _2 ?REG69 ,FS,=2 AS %FS
|
|
159 DO CREATE _2 ?REG69 ,ES,=2 AS %ES
|
|
160 DO CREATE _2 ?REG69 ,IS,=2 AS %IS
|
|
161 DO CREATE _2 ?REG69 ,DM,=2 AS %DM
|
|
162 DO CREATE _2 ?REG69 ,SP,=2 AS %SP
|
|
163 DO CREATE _2 ?REG69 ,RT,=2 AS %RT
|
|
164 DO CREATE _2 ?REG69 ,TH,=2 AS %TH
|
|
165 DO CREATE _2 ?REG69 ,RM,=2 AS %RM
|
|
166 DO CREATE _2 ?REG69 ,IO,=2 AS %IO
|
|
167 DO CREATE _2 ?REG69 ,BA,=2 AS %BA
|
|
168 DO CREATE _2 ?REG69 ,CF,=2 AS %CF
|
|
169 DO CREATE _2 ?REG69 ,CR,=2 AS %CR
|
|
170 DO CREATE _2 ?REG69 ,CW,=2 AS %CW
|
|
171 DO CREATE _2 ?REG69 ,OS,=2 AS %OS
|
|
172 DO CREATE _2 ?REG69 ,TM,=2 AS %TM
|
|
173
|
|
174 PLEASE NOTE: NAMES OF "@" REGISTERS
|
|
175 DO CREATE _2 ?SPECIAL_REGISTER ,#64, ?REG68=* AS ?REG68 #1
|
|
176 DO CREATE _2 ?REG68 ,OR,=2 AS @OR
|
|
177 DO CREATE _2 ?REG68 ,OWFH,=2 AS @OWFH
|
|
178 DO CREATE _2 ?REG68 ,ORFH,=2 AS @ORFH
|
|
179 DO CREATE _2 ?REG68 ,OSFH,=2 AS @OSFH
|
|
180 DO CREATE _2 ?REG68 ,SNFH,=2 AS @SNFH
|
|
181 DO CREATE _2 ?REG68 ,TRFH,=2 AS @TRFH
|
|
182
|
|
183 PLEASE NOTE: NAMES OF "^" REGISTERS
|
|
184 DO CREATE _2 ?SPECIAL_REGISTER ,#94, ?REG70=* AS ?REG70 #1
|
|
185 DO CREATE _2 ?REG70 ,AV,=2 AS ^AV
|
|
186 DO CREATE _2 ?REG70 ,EV,=2 AS ^EV
|
|
187
|
|
188 PLEASE NOTE: "BYTECODE" INSTRUCTION NAMES
|
|
189 DO CREATE _2 ?BYTECODE ,ABG,=1 AS ABG
|
|
190 DO CREATE _2 ?BYTECODE ,ABL,=1 AS ABL
|
|
191 DO CREATE _2 ?BYTECODE ,AWC,=1 AS AWC
|
|
192 DO CREATE _2 ?BYTECODE ,BAW,=1 AS BAW
|
|
193 DO CREATE _2 ?BYTECODE ,BBT,=1 AS BBT
|
|
194 DO CREATE _2 ?BYTECODE ,BSW,=1 AS BSW
|
|
195 DO CREATE _2 ?BYTECODE ,BUG,=1 AS BUG
|
|
196 DO CREATE _2 ?BYTECODE ,BUT,=1 AS BUT
|
|
197 DO CREATE _2 ?BYTECODE ,BWC,=1 AS BWC
|
|
198 DO CREATE _2 ?BYTECODE ,CFG,=1 AS CFG
|
|
199 DO CREATE _2 ?BYTECODE ,CFL,=1 AS CFL
|
|
200 DO CREATE _2 ?BYTECODE ,CHO,=1 AS CHO
|
|
201 DO CREATE _2 ?BYTECODE ,CON,=1 AS CON
|
|
202 DO CREATE _2 ?BYTECODE ,CRE,=1 AS CRE
|
|
203 DO CREATE _2 ?BYTECODE ,CSE,=1 AS CSE
|
|
204 DO CREATE _2 ?BYTECODE ,CWB,=1 AS CWB
|
|
205 DO CREATE _2 ?BYTECODE ,DES,=1 AS DES
|
|
206 DO CREATE _2 ?BYTECODE ,DOS,=1 AS DOS
|
|
207 DO CREATE _2 ?BYTECODE ,DSX,=1 AS DSX
|
|
208 DO CREATE _2 ?BYTECODE ,EBC,=1 AS EBC
|
|
209 DO CREATE _2 ?BYTECODE ,ECB,=1 AS ECB
|
|
210 DO CREATE _2 ?BYTECODE ,ENR,=1 AS ENR
|
|
211 DO CREATE _2 ?BYTECODE ,ENS,=1 AS ENS
|
|
212 DO CREATE _2 ?BYTECODE ,FIN,=1 AS FIN
|
|
213 DO CREATE _2 ?BYTECODE ,FLA,=1 AS FLA
|
|
214 DO CREATE _2 ?BYTECODE ,FOR,=1 AS FOR
|
|
215 DO CREATE _2 ?BYTECODE ,FRE,=1 AS FRE
|
|
216 DO CREATE _2 ?BYTECODE ,FRZ,=1 AS FRZ
|
|
217 DO CREATE _2 ?BYTECODE ,GRA,=1 AS GRA
|
|
218 DO CREATE _2 ?BYTECODE ,GUP,=1 AS GUP
|
|
219 DO CREATE _2 ?BYTECODE ,HSN,=1 AS HSN
|
|
220 DO CREATE _2 ?BYTECODE ,HYB,=1 AS HYB
|
|
221 DO CREATE _2 ?BYTECODE ,IGN,=1 AS IGN
|
|
222 DO CREATE _2 ?BYTECODE ,INT,=1 AS INT
|
|
223 DO CREATE _2 ?BYTECODE ,LAB,=1 AS LAB
|
|
224 DO CREATE _2 ?BYTECODE ,LEA,=1 AS LEA
|
|
225 DO CREATE _2 ?BYTECODE ,MKG,=1 AS MKG
|
|
226 DO CREATE _2 ?BYTECODE ,MSP,=1 AS MSP
|
|
227 DO CREATE _2 ?BYTECODE ,MUL,=1 AS MUL
|
|
228 DO CREATE _2 ?BYTECODE ,NOT,=1 AS NOT
|
|
229 DO CREATE _2 ?BYTECODE ,NUM,=1 AS NUM
|
|
230 DO CREATE _2 ?BYTECODE ,NXG,=1 AS NXG
|
|
231 DO CREATE _2 ?BYTECODE ,NXL,=1 AS NXL
|
|
232 DO CREATE _2 ?BYTECODE ,NXT,=1 AS NXT
|
|
233 DO CREATE _2 ?BYTECODE ,OPT,=1 AS OPT
|
|
234 DO CREATE _2 ?BYTECODE ,OSN,=1 AS OSN
|
|
235 DO CREATE _2 ?BYTECODE ,OVM,=1 AS OVM
|
|
236 DO CREATE _2 ?BYTECODE ,OVR,=1 AS OVR
|
|
237 DO CREATE _2 ?BYTECODE ,OWN,=1 AS OWN
|
|
238 DO CREATE _2 ?BYTECODE ,QUA,=1 AS QUA
|
|
239 DO CREATE _2 ?BYTECODE ,REG,=1 AS REG
|
|
240 DO CREATE _2 ?BYTECODE ,REL,=1 AS REL
|
|
241 DO CREATE _2 ?BYTECODE ,REM,=1 AS REM
|
|
242 DO CREATE _2 ?BYTECODE ,RES,=1 AS RES
|
|
243 DO CREATE _2 ?BYTECODE ,RET,=1 AS RET
|
|
244 DO CREATE _2 ?BYTECODE ,RIN,=1 AS RIN
|
|
245 DO CREATE _2 ?BYTECODE ,ROM,=1 AS ROM
|
|
246 DO CREATE _2 ?BYTECODE ,ROR,=1 AS ROR
|
|
247 DO CREATE _2 ?BYTECODE ,ROU,=1 AS ROU
|
|
248 DO CREATE _2 ?BYTECODE ,RSE,=1 AS RSE
|
|
249 DO CREATE _2 ?BYTECODE ,SEL,=1 AS SEL
|
|
250 DO CREATE _2 ?BYTECODE ,SHF,=1 AS SHF
|
|
251 DO CREATE _2 ?BYTECODE ,SMU,=1 AS SMU
|
|
252 DO CREATE _2 ?BYTECODE ,SPL,=1 AS SPL
|
|
253 DO CREATE _2 ?BYTECODE ,SPO,=1 AS SPO
|
|
254 DO CREATE _2 ?BYTECODE ,STA,=1 AS STA
|
|
255 DO CREATE _2 ?BYTECODE ,STE,=1 AS STE
|
|
256 DO CREATE _2 ?BYTECODE ,STO,=1 AS STO
|
|
257 DO CREATE _2 ?BYTECODE ,STR,=1 AS STR
|
|
258 DO CREATE _2 ?BYTECODE ,STS,=1 AS STS
|
|
259 DO CREATE _2 ?BYTECODE ,STU,=1 AS STU
|
|
260 DO CREATE _2 ?BYTECODE ,SUB,=1 AS SUB
|
|
261 DO CREATE _2 ?BYTECODE ,SWA,=1 AS SWA
|
|
262 DO CREATE _2 ?BYTECODE ,SWB,=1 AS SWB
|
|
263 DO CREATE _2 ?BYTECODE ,SYS,=1 AS SYS
|
|
264 DO CREATE _2 ?BYTECODE ,TAI,=1 AS TAI
|
|
265 DO CREATE _2 ?BYTECODE ,TSP,=1 AS TSP
|
|
266 DO CREATE _2 ?BYTECODE ,TYP,=1 AS TYP
|
|
267 DO CREATE _2 ?BYTECODE ,UDV,=1 AS UDV
|
|
268 DO CREATE _2 ?BYTECODE ,UNE,=1 AS UNE
|
|
269 DO CREATE _2 ?BYTECODE ,UNS,=1 AS UNS
|
|
270 DO CREATE _2 ?BYTECODE ,USG,=1 AS USG
|
|
271 DO CREATE _2 ?BYTECODE ,WHP,=1 AS WHP
|
|
272 DO CREATE _2 ?BYTECODE ,WIN,=1 AS WIN
|
|
273
|
|
274 DO GIVE UP
|