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