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