xref: /minix3/external/historical/nawk/dist/proctab.c (revision 84d9c625bfea59e274550651111ae9edfdc40fbd)
1 #if HAVE_NBTOOL_CONFIG_H
2 #include "nbtool_config.h"
3 #endif
4 
5 #include <stdio.h>
6 #include "awk.h"
7 #include "awkgram.h"
8 
9 static const char * const printname[94] = {
10 	"FIRSTTOKEN",	/* 57346 */
11 	"PROGRAM",	/* 57347 */
12 	"PASTAT",	/* 57348 */
13 	"PASTAT2",	/* 57349 */
14 	"XBEGIN",	/* 57350 */
15 	"XEND",	/* 57351 */
16 	"NL",	/* 57352 */
17 	"ARRAY",	/* 57353 */
18 	"MATCH",	/* 57354 */
19 	"NOTMATCH",	/* 57355 */
20 	"MATCHOP",	/* 57356 */
21 	"FINAL",	/* 57357 */
22 	"DOT",	/* 57358 */
23 	"ALL",	/* 57359 */
24 	"CCL",	/* 57360 */
25 	"NCCL",	/* 57361 */
26 	"CHAR",	/* 57362 */
27 	"OR",	/* 57363 */
28 	"STAR",	/* 57364 */
29 	"QUEST",	/* 57365 */
30 	"PLUS",	/* 57366 */
31 	"EMPTYRE",	/* 57367 */
32 	"AND",	/* 57368 */
33 	"BOR",	/* 57369 */
34 	"APPEND",	/* 57370 */
35 	"EQ",	/* 57371 */
36 	"GE",	/* 57372 */
37 	"GT",	/* 57373 */
38 	"LE",	/* 57374 */
39 	"LT",	/* 57375 */
40 	"NE",	/* 57376 */
41 	"IN",	/* 57377 */
42 	"ARG",	/* 57378 */
43 	"BLTIN",	/* 57379 */
44 	"BREAK",	/* 57380 */
45 	"CLOSE",	/* 57381 */
46 	"CONTINUE",	/* 57382 */
47 	"DELETE",	/* 57383 */
48 	"DO",	/* 57384 */
49 	"EXIT",	/* 57385 */
50 	"FOR",	/* 57386 */
51 	"FUNC",	/* 57387 */
52 	"SUB",	/* 57388 */
53 	"GSUB",	/* 57389 */
54 	"IF",	/* 57390 */
55 	"INDEX",	/* 57391 */
56 	"LSUBSTR",	/* 57392 */
57 	"MATCHFCN",	/* 57393 */
58 	"NEXT",	/* 57394 */
59 	"NEXTFILE",	/* 57395 */
60 	"ADD",	/* 57396 */
61 	"MINUS",	/* 57397 */
62 	"MULT",	/* 57398 */
63 	"DIVIDE",	/* 57399 */
64 	"MOD",	/* 57400 */
65 	"ASSIGN",	/* 57401 */
66 	"ASGNOP",	/* 57402 */
67 	"ADDEQ",	/* 57403 */
68 	"SUBEQ",	/* 57404 */
69 	"MULTEQ",	/* 57405 */
70 	"DIVEQ",	/* 57406 */
71 	"MODEQ",	/* 57407 */
72 	"POWEQ",	/* 57408 */
73 	"PRINT",	/* 57409 */
74 	"PRINTF",	/* 57410 */
75 	"SPRINTF",	/* 57411 */
76 	"ELSE",	/* 57412 */
77 	"INTEST",	/* 57413 */
78 	"CONDEXPR",	/* 57414 */
79 	"POSTINCR",	/* 57415 */
80 	"PREINCR",	/* 57416 */
81 	"POSTDECR",	/* 57417 */
82 	"PREDECR",	/* 57418 */
83 	"VAR",	/* 57419 */
84 	"IVAR",	/* 57420 */
85 	"VARNF",	/* 57421 */
86 	"CALL",	/* 57422 */
87 	"NUMBER",	/* 57423 */
88 	"STRING",	/* 57424 */
89 	"REGEXPR",	/* 57425 */
90 	"GETLINE",	/* 57426 */
91 	"GENSUB",	/* 57427 */
92 	"RETURN",	/* 57428 */
93 	"SPLIT",	/* 57429 */
94 	"SUBSTR",	/* 57430 */
95 	"WHILE",	/* 57431 */
96 	"CAT",	/* 57432 */
97 	"NOT",	/* 57433 */
98 	"UMINUS",	/* 57434 */
99 	"POWER",	/* 57435 */
100 	"DECR",	/* 57436 */
101 	"INCR",	/* 57437 */
102 	"INDIRECT",	/* 57438 */
103 	"LASTTOKEN",	/* 57439 */
104 };
105 
106 
107 Cell *(*proctab[94])(Node **, int) = {
108 	nullproc,	/* FIRSTTOKEN */
109 	program,	/* PROGRAM */
110 	pastat,	/* PASTAT */
111 	dopa2,	/* PASTAT2 */
112 	nullproc,	/* XBEGIN */
113 	nullproc,	/* XEND */
114 	nullproc,	/* NL */
115 	array,	/* ARRAY */
116 	matchop,	/* MATCH */
117 	matchop,	/* NOTMATCH */
118 	nullproc,	/* MATCHOP */
119 	nullproc,	/* FINAL */
120 	nullproc,	/* DOT */
121 	nullproc,	/* ALL */
122 	nullproc,	/* CCL */
123 	nullproc,	/* NCCL */
124 	nullproc,	/* CHAR */
125 	nullproc,	/* OR */
126 	nullproc,	/* STAR */
127 	nullproc,	/* QUEST */
128 	nullproc,	/* PLUS */
129 	nullproc,	/* EMPTYRE */
130 	boolop,	/* AND */
131 	boolop,	/* BOR */
132 	nullproc,	/* APPEND */
133 	relop,	/* EQ */
134 	relop,	/* GE */
135 	relop,	/* GT */
136 	relop,	/* LE */
137 	relop,	/* LT */
138 	relop,	/* NE */
139 	instat,	/* IN */
140 	arg,	/* ARG */
141 	bltin,	/* BLTIN */
142 	jump,	/* BREAK */
143 	closefile,	/* CLOSE */
144 	jump,	/* CONTINUE */
145 	awkdelete,	/* DELETE */
146 	dostat,	/* DO */
147 	jump,	/* EXIT */
148 	forstat,	/* FOR */
149 	nullproc,	/* FUNC */
150 	sub,	/* SUB */
151 	gsub,	/* GSUB */
152 	ifstat,	/* IF */
153 	sindex,	/* INDEX */
154 	nullproc,	/* LSUBSTR */
155 	matchop,	/* MATCHFCN */
156 	jump,	/* NEXT */
157 	jump,	/* NEXTFILE */
158 	arith,	/* ADD */
159 	arith,	/* MINUS */
160 	arith,	/* MULT */
161 	arith,	/* DIVIDE */
162 	arith,	/* MOD */
163 	assign,	/* ASSIGN */
164 	nullproc,	/* ASGNOP */
165 	assign,	/* ADDEQ */
166 	assign,	/* SUBEQ */
167 	assign,	/* MULTEQ */
168 	assign,	/* DIVEQ */
169 	assign,	/* MODEQ */
170 	assign,	/* POWEQ */
171 	printstat,	/* PRINT */
172 	awkprintf,	/* PRINTF */
173 	awksprintf,	/* SPRINTF */
174 	nullproc,	/* ELSE */
175 	intest,	/* INTEST */
176 	condexpr,	/* CONDEXPR */
177 	incrdecr,	/* POSTINCR */
178 	incrdecr,	/* PREINCR */
179 	incrdecr,	/* POSTDECR */
180 	incrdecr,	/* PREDECR */
181 	nullproc,	/* VAR */
182 	nullproc,	/* IVAR */
183 	getnf,	/* VARNF */
184 	call,	/* CALL */
185 	nullproc,	/* NUMBER */
186 	nullproc,	/* STRING */
187 	nullproc,	/* REGEXPR */
188 	awkgetline,	/* GETLINE */
189 	gensub,	/* GENSUB */
190 	jump,	/* RETURN */
191 	split,	/* SPLIT */
192 	substr,	/* SUBSTR */
193 	whilestat,	/* WHILE */
194 	cat,	/* CAT */
195 	boolop,	/* NOT */
196 	arith,	/* UMINUS */
197 	arith,	/* POWER */
198 	nullproc,	/* DECR */
199 	nullproc,	/* INCR */
200 	indirect,	/* INDIRECT */
201 	nullproc,	/* LASTTOKEN */
202 };
203 
tokname(int n)204 const char *tokname(int n)
205 {
206 	static char buf[100];
207 
208 	if (n < FIRSTTOKEN || n > LASTTOKEN) {
209 		snprintf(buf, sizeof(buf), "token %d", n);
210 		return buf;
211 	}
212 	return printname[n-FIRSTTOKEN];
213 }
214