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