1*10794Ssam /* proc.c 4.2 83/02/09 */ 26675Smckusick 36675Smckusick #include "awk.h" 46675Smckusick #define NULL 0 56675Smckusick struct xx 66675Smckusick { int token; 76675Smckusick char *name; 86675Smckusick char *pname; 96675Smckusick } proc[] = { 106675Smckusick { PROGRAM, "program", NULL}, 116675Smckusick { BOR, "boolop", " || "}, 126675Smckusick { AND, "boolop", " && "}, 136675Smckusick { NOT, "boolop", " !"}, 146675Smckusick { NE, "relop", " != "}, 156675Smckusick { EQ, "relop", " == "}, 166675Smckusick { LE, "relop", " <= "}, 176675Smckusick { LT, "relop", " < "}, 186675Smckusick { GE, "relop", " >= "}, 196675Smckusick { GT, "relop", " > "}, 206675Smckusick { ARRAY, "array", NULL}, 216675Smckusick { INDIRECT, "indirect", "$("}, 226675Smckusick { SUBSTR, "substr", "substr"}, 236675Smckusick { INDEX, "sindex", "sindex"}, 246675Smckusick { SPRINTF, "asprintf", "sprintf "}, 256675Smckusick { ADD, "arith", " + "}, 266675Smckusick { MINUS, "arith", " - "}, 276675Smckusick { MULT, "arith", " * "}, 286675Smckusick { DIVIDE, "arith", " / "}, 296675Smckusick { MOD, "arith", " % "}, 306675Smckusick { UMINUS, "arith", " -"}, 316675Smckusick { PREINCR, "incrdecr", "++"}, 326675Smckusick { POSTINCR, "incrdecr", "++"}, 336675Smckusick { PREDECR, "incrdecr", "--"}, 346675Smckusick { POSTDECR, "incrdecr", "--"}, 356675Smckusick { CAT, "cat", " "}, 366675Smckusick { PASTAT, "pastat", NULL}, 376675Smckusick { PASTAT2, "dopa2", NULL}, 386675Smckusick { MATCH, "matchop", " ~ "}, 396675Smckusick { NOTMATCH, "matchop", " !~ "}, 406675Smckusick { PRINTF, "aprintf", "printf"}, 416675Smckusick { PRINT, "print", "print"}, 426675Smckusick { SPLIT, "split", "split"}, 436675Smckusick { ASSIGN, "assign", " = "}, 446675Smckusick { ADDEQ, "assign", " += "}, 456675Smckusick { SUBEQ, "assign", " -= "}, 466675Smckusick { MULTEQ, "assign", " *= "}, 476675Smckusick { DIVEQ, "assign", " /= "}, 486675Smckusick { MODEQ, "assign", " %= "}, 496675Smckusick { IF, "ifstat", "if("}, 506675Smckusick { WHILE, "whilestat", "while("}, 516675Smckusick { FOR, "forstat", "for("}, 526675Smckusick { IN, "instat", "instat"}, 536675Smckusick { NEXT, "jump", "next"}, 546675Smckusick { EXIT, "jump", "exit"}, 556675Smckusick { BREAK, "jump", "break"}, 566675Smckusick { CONTINUE, "jump", "continue"}, 576675Smckusick { FNCN, "fncn", "fncn"}, 586675Smckusick { GETLINE, "getline", "getline"}, 596675Smckusick { 0, ""}, 606675Smckusick }; 616675Smckusick #define SIZE LASTTOKEN - FIRSTTOKEN 626675Smckusick char *table[SIZE]; 636675Smckusick char *names[SIZE]; 646675Smckusick main() 656675Smckusick { struct xx *p; 666675Smckusick int i; 676675Smckusick printf("#include \"awk.def\"\n"); 686675Smckusick printf("obj nullproc();\n"); 696675Smckusick for(p=proc;p->token!=0;p++) 706675Smckusick if(p==proc || strcmp(p->name, (p-1)->name)) 716675Smckusick printf("extern obj %s();\n",p->name); 726675Smckusick for(p=proc;p->token!=0;p++) 736675Smckusick table[p->token-FIRSTTOKEN]=p->name; 746675Smckusick printf("obj (*proctab[%d])() = {\n", SIZE); 756675Smckusick for(i=0;i<SIZE;i++) 766675Smckusick if(table[i]==0) printf("/*%s*/\tnullproc,\n",tokname(i+FIRSTTOKEN)); 776675Smckusick else printf("/*%s*/\t%s,\n",tokname(i+FIRSTTOKEN),table[i]); 786675Smckusick printf("};\n"); 796675Smckusick printf("char *printname[%d] = {\n", SIZE); 806675Smckusick for(p=proc; p->token!=0; p++) 816675Smckusick names[p->token-FIRSTTOKEN] = p->pname; 826675Smckusick for(i=0; i<SIZE; i++) 83*10794Ssam printf("/*%s*/\t\"%s\",\n",tokname(i+FIRSTTOKEN), 84*10794Ssam names[i]?names[i]:""); 856675Smckusick printf("};\n"); 866675Smckusick exit(0); 876675Smckusick } 88