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[94] = { 10 "FIRSTTOKEN", /* 57346 */ 11 "PROGRAM", /* 57347 */ 12 "PASTAT", /* 57348 */ 13 "PASTAT2", /* 57349 */ 14 "XBEGIN", /* 57350 */ 15 "XEND", /* 57351 */ 16 "NL", /* 57352 */ 17 "ARRAY", /* 57353 */ 18 "MATCH", /* 57354 */ 19 "NOTMATCH", /* 57355 */ 20 "MATCHOP", /* 57356 */ 21 "FINAL", /* 57357 */ 22 "DOT", /* 57358 */ 23 "ALL", /* 57359 */ 24 "CCL", /* 57360 */ 25 "NCCL", /* 57361 */ 26 "CHAR", /* 57362 */ 27 "OR", /* 57363 */ 28 "STAR", /* 57364 */ 29 "QUEST", /* 57365 */ 30 "PLUS", /* 57366 */ 31 "EMPTYRE", /* 57367 */ 32 "AND", /* 57368 */ 33 "BOR", /* 57369 */ 34 "APPEND", /* 57370 */ 35 "EQ", /* 57371 */ 36 "GE", /* 57372 */ 37 "GT", /* 57373 */ 38 "LE", /* 57374 */ 39 "LT", /* 57375 */ 40 "NE", /* 57376 */ 41 "IN", /* 57377 */ 42 "ARG", /* 57378 */ 43 "BLTIN", /* 57379 */ 44 "BREAK", /* 57380 */ 45 "CLOSE", /* 57381 */ 46 "CONTINUE", /* 57382 */ 47 "DELETE", /* 57383 */ 48 "DO", /* 57384 */ 49 "EXIT", /* 57385 */ 50 "FOR", /* 57386 */ 51 "FUNC", /* 57387 */ 52 "SUB", /* 57388 */ 53 "GSUB", /* 57389 */ 54 "IF", /* 57390 */ 55 "INDEX", /* 57391 */ 56 "LSUBSTR", /* 57392 */ 57 "MATCHFCN", /* 57393 */ 58 "NEXT", /* 57394 */ 59 "NEXTFILE", /* 57395 */ 60 "ADD", /* 57396 */ 61 "MINUS", /* 57397 */ 62 "MULT", /* 57398 */ 63 "DIVIDE", /* 57399 */ 64 "MOD", /* 57400 */ 65 "ASSIGN", /* 57401 */ 66 "ASGNOP", /* 57402 */ 67 "ADDEQ", /* 57403 */ 68 "SUBEQ", /* 57404 */ 69 "MULTEQ", /* 57405 */ 70 "DIVEQ", /* 57406 */ 71 "MODEQ", /* 57407 */ 72 "POWEQ", /* 57408 */ 73 "PRINT", /* 57409 */ 74 "PRINTF", /* 57410 */ 75 "SPRINTF", /* 57411 */ 76 "ELSE", /* 57412 */ 77 "INTEST", /* 57413 */ 78 "CONDEXPR", /* 57414 */ 79 "POSTINCR", /* 57415 */ 80 "PREINCR", /* 57416 */ 81 "POSTDECR", /* 57417 */ 82 "PREDECR", /* 57418 */ 83 "VAR", /* 57419 */ 84 "IVAR", /* 57420 */ 85 "VARNF", /* 57421 */ 86 "CALL", /* 57422 */ 87 "NUMBER", /* 57423 */ 88 "STRING", /* 57424 */ 89 "REGEXPR", /* 57425 */ 90 "GETLINE", /* 57426 */ 91 "GENSUB", /* 57427 */ 92 "RETURN", /* 57428 */ 93 "SPLIT", /* 57429 */ 94 "SUBSTR", /* 57430 */ 95 "WHILE", /* 57431 */ 96 "CAT", /* 57432 */ 97 "NOT", /* 57433 */ 98 "UMINUS", /* 57434 */ 99 "POWER", /* 57435 */ 100 "DECR", /* 57436 */ 101 "INCR", /* 57437 */ 102 "INDIRECT", /* 57438 */ 103 "LASTTOKEN", /* 57439 */ 104 }; 105 106 107 Cell *(*proctab[94])(Node **, int) = { 108 nullproc, /* FIRSTTOKEN */ 109 program, /* PROGRAM */ 110 pastat, /* PASTAT */ 111 dopa2, /* PASTAT2 */ 112 nullproc, /* XBEGIN */ 113 nullproc, /* XEND */ 114 nullproc, /* NL */ 115 array, /* ARRAY */ 116 matchop, /* MATCH */ 117 matchop, /* NOTMATCH */ 118 nullproc, /* MATCHOP */ 119 nullproc, /* FINAL */ 120 nullproc, /* DOT */ 121 nullproc, /* ALL */ 122 nullproc, /* CCL */ 123 nullproc, /* NCCL */ 124 nullproc, /* CHAR */ 125 nullproc, /* OR */ 126 nullproc, /* STAR */ 127 nullproc, /* QUEST */ 128 nullproc, /* PLUS */ 129 nullproc, /* EMPTYRE */ 130 boolop, /* AND */ 131 boolop, /* BOR */ 132 nullproc, /* APPEND */ 133 relop, /* EQ */ 134 relop, /* GE */ 135 relop, /* GT */ 136 relop, /* LE */ 137 relop, /* LT */ 138 relop, /* NE */ 139 instat, /* IN */ 140 arg, /* ARG */ 141 bltin, /* BLTIN */ 142 jump, /* BREAK */ 143 closefile, /* CLOSE */ 144 jump, /* CONTINUE */ 145 awkdelete, /* DELETE */ 146 dostat, /* DO */ 147 jump, /* EXIT */ 148 forstat, /* FOR */ 149 nullproc, /* FUNC */ 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 gensub, /* GENSUB */ 190 jump, /* RETURN */ 191 split, /* SPLIT */ 192 substr, /* SUBSTR */ 193 whilestat, /* WHILE */ 194 cat, /* CAT */ 195 boolop, /* NOT */ 196 arith, /* UMINUS */ 197 arith, /* POWER */ 198 nullproc, /* DECR */ 199 nullproc, /* INCR */ 200 indirect, /* INDIRECT */ 201 nullproc, /* LASTTOKEN */ 202 }; 203 204 const 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