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