1 #include <stdio.h> 2 #include "awk.h" 3 #include "y.tab.h" 4 5 static uchar *printname[92] = { 6 (uchar *) "FIRSTTOKEN", /* 57346 */ 7 (uchar *) "PROGRAM", /* 57347 */ 8 (uchar *) "PASTAT", /* 57348 */ 9 (uchar *) "PASTAT2", /* 57349 */ 10 (uchar *) "XBEGIN", /* 57350 */ 11 (uchar *) "XEND", /* 57351 */ 12 (uchar *) "NL", /* 57352 */ 13 (uchar *) "ARRAY", /* 57353 */ 14 (uchar *) "MATCH", /* 57354 */ 15 (uchar *) "NOTMATCH", /* 57355 */ 16 (uchar *) "MATCHOP", /* 57356 */ 17 (uchar *) "FINAL", /* 57357 */ 18 (uchar *) "DOT", /* 57358 */ 19 (uchar *) "ALL", /* 57359 */ 20 (uchar *) "CCL", /* 57360 */ 21 (uchar *) "NCCL", /* 57361 */ 22 (uchar *) "CHAR", /* 57362 */ 23 (uchar *) "OR", /* 57363 */ 24 (uchar *) "STAR", /* 57364 */ 25 (uchar *) "QUEST", /* 57365 */ 26 (uchar *) "PLUS", /* 57366 */ 27 (uchar *) "AND", /* 57367 */ 28 (uchar *) "BOR", /* 57368 */ 29 (uchar *) "APPEND", /* 57369 */ 30 (uchar *) "EQ", /* 57370 */ 31 (uchar *) "GE", /* 57371 */ 32 (uchar *) "GT", /* 57372 */ 33 (uchar *) "LE", /* 57373 */ 34 (uchar *) "LT", /* 57374 */ 35 (uchar *) "NE", /* 57375 */ 36 (uchar *) "IN", /* 57376 */ 37 (uchar *) "ARG", /* 57377 */ 38 (uchar *) "BLTIN", /* 57378 */ 39 (uchar *) "BREAK", /* 57379 */ 40 (uchar *) "CLOSE", /* 57380 */ 41 (uchar *) "CONTINUE", /* 57381 */ 42 (uchar *) "DELETE", /* 57382 */ 43 (uchar *) "DO", /* 57383 */ 44 (uchar *) "EXIT", /* 57384 */ 45 (uchar *) "FOR", /* 57385 */ 46 (uchar *) "FUNC", /* 57386 */ 47 (uchar *) "SUB", /* 57387 */ 48 (uchar *) "GSUB", /* 57388 */ 49 (uchar *) "IF", /* 57389 */ 50 (uchar *) "INDEX", /* 57390 */ 51 (uchar *) "LSUBSTR", /* 57391 */ 52 (uchar *) "MATCHFCN", /* 57392 */ 53 (uchar *) "NEXT", /* 57393 */ 54 (uchar *) "ADD", /* 57394 */ 55 (uchar *) "MINUS", /* 57395 */ 56 (uchar *) "MULT", /* 57396 */ 57 (uchar *) "DIVIDE", /* 57397 */ 58 (uchar *) "MOD", /* 57398 */ 59 (uchar *) "ASSIGN", /* 57399 */ 60 (uchar *) "ASGNOP", /* 57400 */ 61 (uchar *) "ADDEQ", /* 57401 */ 62 (uchar *) "SUBEQ", /* 57402 */ 63 (uchar *) "MULTEQ", /* 57403 */ 64 (uchar *) "DIVEQ", /* 57404 */ 65 (uchar *) "MODEQ", /* 57405 */ 66 (uchar *) "POWEQ", /* 57406 */ 67 (uchar *) "PRINT", /* 57407 */ 68 (uchar *) "PRINTF", /* 57408 */ 69 (uchar *) "SPRINTF", /* 57409 */ 70 (uchar *) "ELSE", /* 57410 */ 71 (uchar *) "INTEST", /* 57411 */ 72 (uchar *) "CONDEXPR", /* 57412 */ 73 (uchar *) "POSTINCR", /* 57413 */ 74 (uchar *) "PREINCR", /* 57414 */ 75 (uchar *) "POSTDECR", /* 57415 */ 76 (uchar *) "PREDECR", /* 57416 */ 77 (uchar *) "VAR", /* 57417 */ 78 (uchar *) "IVAR", /* 57418 */ 79 (uchar *) "VARNF", /* 57419 */ 80 (uchar *) "CALL", /* 57420 */ 81 (uchar *) "NUMBER", /* 57421 */ 82 (uchar *) "STRING", /* 57422 */ 83 (uchar *) "FIELD", /* 57423 */ 84 (uchar *) "REGEXPR", /* 57424 */ 85 (uchar *) "GETLINE", /* 57425 */ 86 (uchar *) "RETURN", /* 57426 */ 87 (uchar *) "SPLIT", /* 57427 */ 88 (uchar *) "SUBSTR", /* 57428 */ 89 (uchar *) "WHILE", /* 57429 */ 90 (uchar *) "CAT", /* 57430 */ 91 (uchar *) "NOT", /* 57431 */ 92 (uchar *) "UMINUS", /* 57432 */ 93 (uchar *) "POWER", /* 57433 */ 94 (uchar *) "DECR", /* 57434 */ 95 (uchar *) "INCR", /* 57435 */ 96 (uchar *) "INDIRECT", /* 57436 */ 97 (uchar *) "LASTTOKEN", /* 57437 */ 98 }; 99 100 101 Cell *(*proctab[92])(Node **, int) = { 102 nullproc, /* FIRSTTOKEN */ 103 program, /* PROGRAM */ 104 pastat, /* PASTAT */ 105 dopa2, /* PASTAT2 */ 106 nullproc, /* XBEGIN */ 107 nullproc, /* XEND */ 108 nullproc, /* NL */ 109 array, /* ARRAY */ 110 matchop, /* MATCH */ 111 matchop, /* NOTMATCH */ 112 nullproc, /* MATCHOP */ 113 nullproc, /* FINAL */ 114 nullproc, /* DOT */ 115 nullproc, /* ALL */ 116 nullproc, /* CCL */ 117 nullproc, /* NCCL */ 118 nullproc, /* CHAR */ 119 nullproc, /* OR */ 120 nullproc, /* STAR */ 121 nullproc, /* QUEST */ 122 nullproc, /* PLUS */ 123 boolop, /* AND */ 124 boolop, /* BOR */ 125 nullproc, /* APPEND */ 126 relop, /* EQ */ 127 relop, /* GE */ 128 relop, /* GT */ 129 relop, /* LE */ 130 relop, /* LT */ 131 relop, /* NE */ 132 instat, /* IN */ 133 arg, /* ARG */ 134 bltin, /* BLTIN */ 135 jump, /* BREAK */ 136 closefile, /* CLOSE */ 137 jump, /* CONTINUE */ 138 adelete, /* DELETE */ 139 dostat, /* DO */ 140 jump, /* EXIT */ 141 forstat, /* FOR */ 142 nullproc, /* FUNC */ 143 sub, /* SUB */ 144 gsub, /* GSUB */ 145 ifstat, /* IF */ 146 sindex, /* INDEX */ 147 nullproc, /* LSUBSTR */ 148 matchop, /* MATCHFCN */ 149 jump, /* NEXT */ 150 arith, /* ADD */ 151 arith, /* MINUS */ 152 arith, /* MULT */ 153 arith, /* DIVIDE */ 154 arith, /* MOD */ 155 assign, /* ASSIGN */ 156 nullproc, /* ASGNOP */ 157 assign, /* ADDEQ */ 158 assign, /* SUBEQ */ 159 assign, /* MULTEQ */ 160 assign, /* DIVEQ */ 161 assign, /* MODEQ */ 162 assign, /* POWEQ */ 163 printstat, /* PRINT */ 164 aprintf, /* PRINTF */ 165 asprintf, /* SPRINTF */ 166 nullproc, /* ELSE */ 167 intest, /* INTEST */ 168 condexpr, /* CONDEXPR */ 169 incrdecr, /* POSTINCR */ 170 incrdecr, /* PREINCR */ 171 incrdecr, /* POSTDECR */ 172 incrdecr, /* PREDECR */ 173 nullproc, /* VAR */ 174 nullproc, /* IVAR */ 175 getnf, /* VARNF */ 176 call, /* CALL */ 177 nullproc, /* NUMBER */ 178 nullproc, /* STRING */ 179 nullproc, /* FIELD */ 180 nullproc, /* REGEXPR */ 181 getline, /* GETLINE */ 182 jump, /* RETURN */ 183 split, /* SPLIT */ 184 substr, /* SUBSTR */ 185 whilestat, /* WHILE */ 186 cat, /* CAT */ 187 boolop, /* NOT */ 188 arith, /* UMINUS */ 189 arith, /* POWER */ 190 nullproc, /* DECR */ 191 nullproc, /* INCR */ 192 indirect, /* INDIRECT */ 193 nullproc, /* LASTTOKEN */ 194 }; 195 196 uchar *tokname(int n) 197 { 198 static uchar buf[100]; 199 200 if (n < FIRSTTOKEN || n > LASTTOKEN) { 201 sprintf(buf, "token %d", n); 202 return buf; 203 } 204 return printname[n-FIRSTTOKEN]; 205 } 206