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