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