#include <stdio.h> #include "awk.h" #include "ytab.h" static char *printname[94] = { (char *) "FIRSTTOKEN", /* 258 */ (char *) "PROGRAM", /* 259 */ (char *) "PASTAT", /* 260 */ (char *) "PASTAT2", /* 261 */ (char *) "XBEGIN", /* 262 */ (char *) "XEND", /* 263 */ (char *) "NL", /* 264 */ (char *) "ARRAY", /* 265 */ (char *) "MATCH", /* 266 */ (char *) "NOTMATCH", /* 267 */ (char *) "MATCHOP", /* 268 */ (char *) "FINAL", /* 269 */ (char *) "DOT", /* 270 */ (char *) "ALL", /* 271 */ (char *) "CCL", /* 272 */ (char *) "NCCL", /* 273 */ (char *) "CHAR", /* 274 */ (char *) "OR", /* 275 */ (char *) "STAR", /* 276 */ (char *) "QUEST", /* 277 */ (char *) "PLUS", /* 278 */ (char *) "EMPTYRE", /* 279 */ (char *) "AND", /* 280 */ (char *) "BOR", /* 281 */ (char *) "APPEND", /* 282 */ (char *) "EQ", /* 283 */ (char *) "GE", /* 284 */ (char *) "GT", /* 285 */ (char *) "LE", /* 286 */ (char *) "LT", /* 287 */ (char *) "NE", /* 288 */ (char *) "IN", /* 289 */ (char *) "ARG", /* 290 */ (char *) "BLTIN", /* 291 */ (char *) "BREAK", /* 292 */ (char *) "CLOSE", /* 293 */ (char *) "CONTINUE", /* 294 */ (char *) "DELETE", /* 295 */ (char *) "DO", /* 296 */ (char *) "EXIT", /* 297 */ (char *) "FOR", /* 298 */ (char *) "FUNC", /* 299 */ (char *) "SUB", /* 300 */ (char *) "GSUB", /* 301 */ (char *) "IF", /* 302 */ (char *) "INDEX", /* 303 */ (char *) "LSUBSTR", /* 304 */ (char *) "MATCHFCN", /* 305 */ (char *) "NEXT", /* 306 */ (char *) "NEXTFILE", /* 307 */ (char *) "ADD", /* 308 */ (char *) "MINUS", /* 309 */ (char *) "MULT", /* 310 */ (char *) "DIVIDE", /* 311 */ (char *) "MOD", /* 312 */ (char *) "ASSIGN", /* 313 */ (char *) "ASGNOP", /* 314 */ (char *) "ADDEQ", /* 315 */ (char *) "SUBEQ", /* 316 */ (char *) "MULTEQ", /* 317 */ (char *) "DIVEQ", /* 318 */ (char *) "MODEQ", /* 319 */ (char *) "POWEQ", /* 320 */ (char *) "PRINT", /* 321 */ (char *) "PRINTF", /* 322 */ (char *) "SPRINTF", /* 323 */ (char *) "ELSE", /* 324 */ (char *) "INTEST", /* 325 */ (char *) "CONDEXPR", /* 326 */ (char *) "POSTINCR", /* 327 */ (char *) "PREINCR", /* 328 */ (char *) "POSTDECR", /* 329 */ (char *) "PREDECR", /* 330 */ (char *) "VAR", /* 331 */ (char *) "IVAR", /* 332 */ (char *) "VARNF", /* 333 */ (char *) "CALL", /* 334 */ (char *) "NUMBER", /* 335 */ (char *) "STRING", /* 336 */ (char *) "REGEXPR", /* 337 */ (char *) "GETLINE", /* 338 */ (char *) "RETURN", /* 339 */ (char *) "SPLIT", /* 340 */ (char *) "SUBSTR", /* 341 */ (char *) "WHILE", /* 342 */ (char *) "CAT", /* 343 */ (char *) "NOT", /* 344 */ (char *) "UMINUS", /* 345 */ (char *) "UPLUS", /* 346 */ (char *) "POWER", /* 347 */ (char *) "DECR", /* 348 */ (char *) "INCR", /* 349 */ (char *) "INDIRECT", /* 350 */ (char *) "LASTTOKEN", /* 351 */ }; Cell *(*proctab[94])(Node **, int) = { nullproc, /* FIRSTTOKEN */ program, /* PROGRAM */ pastat, /* PASTAT */ dopa2, /* PASTAT2 */ nullproc, /* XBEGIN */ nullproc, /* XEND */ nullproc, /* NL */ array, /* ARRAY */ matchop, /* MATCH */ matchop, /* NOTMATCH */ nullproc, /* MATCHOP */ nullproc, /* FINAL */ nullproc, /* DOT */ nullproc, /* ALL */ nullproc, /* CCL */ nullproc, /* NCCL */ nullproc, /* CHAR */ nullproc, /* OR */ nullproc, /* STAR */ nullproc, /* QUEST */ nullproc, /* PLUS */ nullproc, /* EMPTYRE */ boolop, /* AND */ boolop, /* BOR */ nullproc, /* APPEND */ relop, /* EQ */ relop, /* GE */ relop, /* GT */ relop, /* LE */ relop, /* LT */ relop, /* NE */ instat, /* IN */ arg, /* ARG */ bltin, /* BLTIN */ jump, /* BREAK */ closefile, /* CLOSE */ jump, /* CONTINUE */ awkdelete, /* DELETE */ dostat, /* DO */ jump, /* EXIT */ forstat, /* FOR */ nullproc, /* FUNC */ sub, /* SUB */ gsub, /* GSUB */ ifstat, /* IF */ sindex, /* INDEX */ nullproc, /* LSUBSTR */ matchop, /* MATCHFCN */ jump, /* NEXT */ jump, /* NEXTFILE */ arith, /* ADD */ arith, /* MINUS */ arith, /* MULT */ arith, /* DIVIDE */ arith, /* MOD */ assign, /* ASSIGN */ nullproc, /* ASGNOP */ assign, /* ADDEQ */ assign, /* SUBEQ */ assign, /* MULTEQ */ assign, /* DIVEQ */ assign, /* MODEQ */ assign, /* POWEQ */ printstat, /* PRINT */ awkprintf, /* PRINTF */ awksprintf, /* SPRINTF */ nullproc, /* ELSE */ intest, /* INTEST */ condexpr, /* CONDEXPR */ incrdecr, /* POSTINCR */ incrdecr, /* PREINCR */ incrdecr, /* POSTDECR */ incrdecr, /* PREDECR */ nullproc, /* VAR */ nullproc, /* IVAR */ getnf, /* VARNF */ call, /* CALL */ nullproc, /* NUMBER */ nullproc, /* STRING */ nullproc, /* REGEXPR */ awkgetline, /* GETLINE */ jump, /* RETURN */ split, /* SPLIT */ substr, /* SUBSTR */ whilestat, /* WHILE */ cat, /* CAT */ boolop, /* NOT */ arith, /* UMINUS */ arith, /* UPLUS */ arith, /* POWER */ nullproc, /* DECR */ nullproc, /* INCR */ indirect, /* INDIRECT */ nullproc, /* LASTTOKEN */ }; char *tokname(int n) { static char buf[100]; if (n < FIRSTTOKEN || n > LASTTOKEN) { sprintf(buf, "token %d", n); return buf; } return printname[n-FIRSTTOKEN]; }