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