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