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