|
|
1.1 root 1: #include "awk.h"
2: #include "y.tab.h"
3:
4: Cell *nullproc();
5: extern Cell *program();
6: extern Cell *boolop();
7: extern Cell *relop();
8: extern Cell *array();
9: extern Cell *indirect();
10: extern Cell *substr();
11: extern Cell *sub();
12: extern Cell *gsub();
13: extern Cell *sindex();
14: extern Cell *asprintf();
15: extern Cell *arith();
16: extern Cell *incrdecr();
17: extern Cell *cat();
18: extern Cell *pastat();
19: extern Cell *dopa2();
20: extern Cell *matchop();
21: extern Cell *intest();
22: extern Cell *aprintf();
23: extern Cell *print();
24: extern Cell *closefile();
25: extern Cell *delete();
26: extern Cell *split();
27: extern Cell *assign();
28: extern Cell *condexpr();
29: extern Cell *ifstat();
30: extern Cell *whilestat();
31: extern Cell *forstat();
32: extern Cell *dostat();
33: extern Cell *instat();
34: extern Cell *jump();
35: extern Cell *bltin();
36: extern Cell *call();
37: extern Cell *arg();
38: extern Cell *getnf();
39: extern Cell *getline();
40: static uchar *printname[93] = {
41: (uchar *) "FIRSTTOKEN", /* 257 */
42: (uchar *) "FATAL", /* 258 */
43: (uchar *) "PROGRAM", /* 259 */
44: (uchar *) "PASTAT", /* 260 */
45: (uchar *) "PASTAT2", /* 261 */
46: (uchar *) "XBEGIN", /* 262 */
47: (uchar *) "XEND", /* 263 */
48: (uchar *) "NL", /* 264 */
49: (uchar *) "ARRAY", /* 265 */
50: (uchar *) "MATCH", /* 266 */
51: (uchar *) "NOTMATCH", /* 267 */
52: (uchar *) "MATCHOP", /* 268 */
53: (uchar *) "FINAL", /* 269 */
54: (uchar *) "DOT", /* 270 */
55: (uchar *) "ALL", /* 271 */
56: (uchar *) "CCL", /* 272 */
57: (uchar *) "NCCL", /* 273 */
58: (uchar *) "CHAR", /* 274 */
59: (uchar *) "OR", /* 275 */
60: (uchar *) "STAR", /* 276 */
61: (uchar *) "QUEST", /* 277 */
62: (uchar *) "PLUS", /* 278 */
63: (uchar *) "AND", /* 279 */
64: (uchar *) "BOR", /* 280 */
65: (uchar *) "APPEND", /* 281 */
66: (uchar *) "EQ", /* 282 */
67: (uchar *) "GE", /* 283 */
68: (uchar *) "GT", /* 284 */
69: (uchar *) "LE", /* 285 */
70: (uchar *) "LT", /* 286 */
71: (uchar *) "NE", /* 287 */
72: (uchar *) "IN", /* 288 */
73: (uchar *) "ARG", /* 289 */
74: (uchar *) "BLTIN", /* 290 */
75: (uchar *) "BREAK", /* 291 */
76: (uchar *) "CLOSE", /* 292 */
77: (uchar *) "CONTINUE", /* 293 */
78: (uchar *) "DELETE", /* 294 */
79: (uchar *) "DO", /* 295 */
80: (uchar *) "EXIT", /* 296 */
81: (uchar *) "FOR", /* 297 */
82: (uchar *) "FUNC", /* 298 */
83: (uchar *) "SUB", /* 299 */
84: (uchar *) "GSUB", /* 300 */
85: (uchar *) "IF", /* 301 */
86: (uchar *) "INDEX", /* 302 */
87: (uchar *) "LSUBSTR", /* 303 */
88: (uchar *) "MATCHFCN", /* 304 */
89: (uchar *) "NEXT", /* 305 */
90: (uchar *) "ADD", /* 306 */
91: (uchar *) "MINUS", /* 307 */
92: (uchar *) "MULT", /* 308 */
93: (uchar *) "DIVIDE", /* 309 */
94: (uchar *) "MOD", /* 310 */
95: (uchar *) "ASSIGN", /* 311 */
96: (uchar *) "ASGNOP", /* 312 */
97: (uchar *) "ADDEQ", /* 313 */
98: (uchar *) "SUBEQ", /* 314 */
99: (uchar *) "MULTEQ", /* 315 */
100: (uchar *) "DIVEQ", /* 316 */
101: (uchar *) "MODEQ", /* 317 */
102: (uchar *) "POWEQ", /* 318 */
103: (uchar *) "PRINT", /* 319 */
104: (uchar *) "PRINTF", /* 320 */
105: (uchar *) "SPRINTF", /* 321 */
106: (uchar *) "ELSE", /* 322 */
107: (uchar *) "INTEST", /* 323 */
108: (uchar *) "CONDEXPR", /* 324 */
109: (uchar *) "POSTINCR", /* 325 */
110: (uchar *) "PREINCR", /* 326 */
111: (uchar *) "POSTDECR", /* 327 */
112: (uchar *) "PREDECR", /* 328 */
113: (uchar *) "VAR", /* 329 */
114: (uchar *) "IVAR", /* 330 */
115: (uchar *) "VARNF", /* 331 */
116: (uchar *) "CALL", /* 332 */
117: (uchar *) "NUMBER", /* 333 */
118: (uchar *) "STRING", /* 334 */
119: (uchar *) "FIELD", /* 335 */
120: (uchar *) "REGEXPR", /* 336 */
121: (uchar *) "GETLINE", /* 337 */
122: (uchar *) "RETURN", /* 338 */
123: (uchar *) "SPLIT", /* 339 */
124: (uchar *) "SUBSTR", /* 340 */
125: (uchar *) "WHILE", /* 341 */
126: (uchar *) "CAT", /* 342 */
127: (uchar *) "NOT", /* 343 */
128: (uchar *) "UMINUS", /* 344 */
129: (uchar *) "POWER", /* 345 */
130: (uchar *) "DECR", /* 346 */
131: (uchar *) "INCR", /* 347 */
132: (uchar *) "INDIRECT", /* 348 */
133: (uchar *) "LASTTOKEN", /* 349 */
134: };
135:
136:
137: Cell *(*proctab[93])() = {
138: nullproc, /* FIRSTTOKEN */
139: nullproc, /* FATAL */
140: program, /* PROGRAM */
141: pastat, /* PASTAT */
142: dopa2, /* PASTAT2 */
143: nullproc, /* XBEGIN */
144: nullproc, /* XEND */
145: nullproc, /* NL */
146: array, /* ARRAY */
147: matchop, /* MATCH */
148: matchop, /* NOTMATCH */
149: nullproc, /* MATCHOP */
150: nullproc, /* FINAL */
151: nullproc, /* DOT */
152: nullproc, /* ALL */
153: nullproc, /* CCL */
154: nullproc, /* NCCL */
155: nullproc, /* CHAR */
156: nullproc, /* OR */
157: nullproc, /* STAR */
158: nullproc, /* QUEST */
159: nullproc, /* PLUS */
160: boolop, /* AND */
161: boolop, /* BOR */
162: nullproc, /* APPEND */
163: relop, /* EQ */
164: relop, /* GE */
165: relop, /* GT */
166: relop, /* LE */
167: relop, /* LT */
168: relop, /* NE */
169: instat, /* IN */
170: arg, /* ARG */
171: bltin, /* BLTIN */
172: jump, /* BREAK */
173: closefile, /* CLOSE */
174: jump, /* CONTINUE */
175: delete, /* DELETE */
176: dostat, /* DO */
177: jump, /* EXIT */
178: forstat, /* FOR */
179: nullproc, /* FUNC */
180: sub, /* SUB */
181: gsub, /* GSUB */
182: ifstat, /* IF */
183: sindex, /* INDEX */
184: nullproc, /* LSUBSTR */
185: matchop, /* MATCHFCN */
186: jump, /* NEXT */
187: arith, /* ADD */
188: arith, /* MINUS */
189: arith, /* MULT */
190: arith, /* DIVIDE */
191: arith, /* MOD */
192: assign, /* ASSIGN */
193: nullproc, /* ASGNOP */
194: assign, /* ADDEQ */
195: assign, /* SUBEQ */
196: assign, /* MULTEQ */
197: assign, /* DIVEQ */
198: assign, /* MODEQ */
199: assign, /* POWEQ */
200: print, /* PRINT */
201: aprintf, /* PRINTF */
202: asprintf, /* SPRINTF */
203: nullproc, /* ELSE */
204: intest, /* INTEST */
205: condexpr, /* CONDEXPR */
206: incrdecr, /* POSTINCR */
207: incrdecr, /* PREINCR */
208: incrdecr, /* POSTDECR */
209: incrdecr, /* PREDECR */
210: nullproc, /* VAR */
211: nullproc, /* IVAR */
212: getnf, /* VARNF */
213: call, /* CALL */
214: nullproc, /* NUMBER */
215: nullproc, /* STRING */
216: nullproc, /* FIELD */
217: nullproc, /* REGEXPR */
218: getline, /* GETLINE */
219: jump, /* RETURN */
220: split, /* SPLIT */
221: substr, /* SUBSTR */
222: whilestat, /* WHILE */
223: cat, /* CAT */
224: boolop, /* NOT */
225: arith, /* UMINUS */
226: arith, /* POWER */
227: nullproc, /* DECR */
228: nullproc, /* INCR */
229: indirect, /* INDIRECT */
230: nullproc, /* LASTTOKEN */
231: };
232:
233: uchar *tokname(n)
234: {
235: static uchar buf[100];
236:
237: if (n < FIRSTTOKEN || n > LASTTOKEN) {
238: sprintf(buf, "token %d", n);
239: return buf;
240: }
241: return printname[n-257];
242: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.