nawk-20250116-proctab.c (4284B)
1 #include <stdio.h> 2 #include "awk.h" 3 #include "awkgram.tab.h" 4 5 static const char * const printname[95] = { 6 "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 */ 28 "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 */ 101 }; 102 103 104 Cell *(*proctab[95])(Node **, int) = { 105 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 */ 127 nullproc, /* ZERO */ 128 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 dosub, /* SUB */ 149 dosub, /* 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 202 const char *tokname(int n) 203 { 204 static char buf[100]; 205 206 if (n < FIRSTTOKEN || n > LASTTOKEN) { 207 snprintf(buf, sizeof(buf), "token %d", n); 208 return buf; 209 } 210 return printname[n-FIRSTTOKEN]; 211 }