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