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