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