merge from sun
[unix-history] / usr / src / old / awk / proc.c
CommitLineData
c48090b0 1/* proc.c 4.2 83/02/09 */
088c0627
KM
2
3#include "awk.h"
4#define NULL 0
5struct 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
62char *table[SIZE];
63char *names[SIZE];
64main()
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++)
c48090b0
SL
83 printf("/*%s*/\t\"%s\",\n",tokname(i+FIRSTTOKEN),
84 names[i]?names[i]:"");
088c0627
KM
85 printf("};\n");
86 exit(0);
87}