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