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