1*6675Smckusick /* proc.c 4.1 82/05/07 */ 2*6675Smckusick 3*6675Smckusick #include "awk.h" 4*6675Smckusick #define NULL 0 5*6675Smckusick struct xx 6*6675Smckusick { int token; 7*6675Smckusick char *name; 8*6675Smckusick char *pname; 9*6675Smckusick } proc[] = { 10*6675Smckusick { PROGRAM, "program", NULL}, 11*6675Smckusick { BOR, "boolop", " || "}, 12*6675Smckusick { AND, "boolop", " && "}, 13*6675Smckusick { NOT, "boolop", " !"}, 14*6675Smckusick { NE, "relop", " != "}, 15*6675Smckusick { EQ, "relop", " == "}, 16*6675Smckusick { LE, "relop", " <= "}, 17*6675Smckusick { LT, "relop", " < "}, 18*6675Smckusick { GE, "relop", " >= "}, 19*6675Smckusick { GT, "relop", " > "}, 20*6675Smckusick { ARRAY, "array", NULL}, 21*6675Smckusick { INDIRECT, "indirect", "$("}, 22*6675Smckusick { SUBSTR, "substr", "substr"}, 23*6675Smckusick { INDEX, "sindex", "sindex"}, 24*6675Smckusick { SPRINTF, "asprintf", "sprintf "}, 25*6675Smckusick { ADD, "arith", " + "}, 26*6675Smckusick { MINUS, "arith", " - "}, 27*6675Smckusick { MULT, "arith", " * "}, 28*6675Smckusick { DIVIDE, "arith", " / "}, 29*6675Smckusick { MOD, "arith", " % "}, 30*6675Smckusick { UMINUS, "arith", " -"}, 31*6675Smckusick { PREINCR, "incrdecr", "++"}, 32*6675Smckusick { POSTINCR, "incrdecr", "++"}, 33*6675Smckusick { PREDECR, "incrdecr", "--"}, 34*6675Smckusick { POSTDECR, "incrdecr", "--"}, 35*6675Smckusick { CAT, "cat", " "}, 36*6675Smckusick { PASTAT, "pastat", NULL}, 37*6675Smckusick { PASTAT2, "dopa2", NULL}, 38*6675Smckusick { MATCH, "matchop", " ~ "}, 39*6675Smckusick { NOTMATCH, "matchop", " !~ "}, 40*6675Smckusick { PRINTF, "aprintf", "printf"}, 41*6675Smckusick { PRINT, "print", "print"}, 42*6675Smckusick { SPLIT, "split", "split"}, 43*6675Smckusick { ASSIGN, "assign", " = "}, 44*6675Smckusick { ADDEQ, "assign", " += "}, 45*6675Smckusick { SUBEQ, "assign", " -= "}, 46*6675Smckusick { MULTEQ, "assign", " *= "}, 47*6675Smckusick { DIVEQ, "assign", " /= "}, 48*6675Smckusick { MODEQ, "assign", " %= "}, 49*6675Smckusick { IF, "ifstat", "if("}, 50*6675Smckusick { WHILE, "whilestat", "while("}, 51*6675Smckusick { FOR, "forstat", "for("}, 52*6675Smckusick { IN, "instat", "instat"}, 53*6675Smckusick { NEXT, "jump", "next"}, 54*6675Smckusick { EXIT, "jump", "exit"}, 55*6675Smckusick { BREAK, "jump", "break"}, 56*6675Smckusick { CONTINUE, "jump", "continue"}, 57*6675Smckusick { FNCN, "fncn", "fncn"}, 58*6675Smckusick { GETLINE, "getline", "getline"}, 59*6675Smckusick { 0, ""}, 60*6675Smckusick }; 61*6675Smckusick #define SIZE LASTTOKEN - FIRSTTOKEN 62*6675Smckusick char *table[SIZE]; 63*6675Smckusick char *names[SIZE]; 64*6675Smckusick main() 65*6675Smckusick { struct xx *p; 66*6675Smckusick int i; 67*6675Smckusick printf("#include \"awk.def\"\n"); 68*6675Smckusick printf("obj nullproc();\n"); 69*6675Smckusick for(p=proc;p->token!=0;p++) 70*6675Smckusick if(p==proc || strcmp(p->name, (p-1)->name)) 71*6675Smckusick printf("extern obj %s();\n",p->name); 72*6675Smckusick for(p=proc;p->token!=0;p++) 73*6675Smckusick table[p->token-FIRSTTOKEN]=p->name; 74*6675Smckusick printf("obj (*proctab[%d])() = {\n", SIZE); 75*6675Smckusick for(i=0;i<SIZE;i++) 76*6675Smckusick if(table[i]==0) printf("/*%s*/\tnullproc,\n",tokname(i+FIRSTTOKEN)); 77*6675Smckusick else printf("/*%s*/\t%s,\n",tokname(i+FIRSTTOKEN),table[i]); 78*6675Smckusick printf("};\n"); 79*6675Smckusick printf("char *printname[%d] = {\n", SIZE); 80*6675Smckusick for(p=proc; p->token!=0; p++) 81*6675Smckusick names[p->token-FIRSTTOKEN] = p->pname; 82*6675Smckusick for(i=0; i<SIZE; i++) 83*6675Smckusick printf("/*%s*/\t\"%s\",\n",tokname(i+FIRSTTOKEN),names[i]); 84*6675Smckusick printf("};\n"); 85*6675Smckusick exit(0); 86*6675Smckusick } 87