Commit | Line | Data |
---|---|---|
b803c326 SL |
1 | #ifndef lint |
2 | static char sccsid[] = "@(#)proc.c 4.3 %G%"; | |
3 | #endif | |
088c0627 KM |
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++) | |
c48090b0 SL |
85 | printf("/*%s*/\t\"%s\",\n",tokname(i+FIRSTTOKEN), |
86 | names[i]?names[i]:""); | |
088c0627 KM |
87 | printf("};\n"); |
88 | exit(0); | |
89 | } |