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