xref: /csrg-svn/old/awk/proc.c (revision 48236)
1*48236Sbostic /*-
2*48236Sbostic  * Copyright (c) 1991 The Regents of the University of California.
3*48236Sbostic  * All rights reserved.
4*48236Sbostic  *
5*48236Sbostic  * %sccs.include.proprietary.c%
6*48236Sbostic  */
7*48236Sbostic 
814474Ssam #ifndef lint
9*48236Sbostic char copyright[] =
10*48236Sbostic "@(#) Copyright (c) 1991 The Regents of the University of California.\n\
11*48236Sbostic  All rights reserved.\n";
12*48236Sbostic #endif /* not lint */
136675Smckusick 
14*48236Sbostic #ifndef lint
15*48236Sbostic static char sccsid[] = "@(#)proc.c	4.4 (Berkeley) 04/17/91";
16*48236Sbostic #endif /* not lint */
17*48236Sbostic 
186675Smckusick #include "awk.h"
196675Smckusick #define NULL 0
206675Smckusick struct xx
216675Smckusick {	int token;
226675Smckusick 	char *name;
236675Smckusick 	char *pname;
246675Smckusick } proc[] = {
256675Smckusick 	{ PROGRAM, "program", NULL},
266675Smckusick 	{ BOR, "boolop", " || "},
276675Smckusick 	{ AND, "boolop", " && "},
286675Smckusick 	{ NOT, "boolop", " !"},
296675Smckusick 	{ NE, "relop", " != "},
306675Smckusick 	{ EQ, "relop", " == "},
316675Smckusick 	{ LE, "relop", " <= "},
326675Smckusick 	{ LT, "relop", " < "},
336675Smckusick 	{ GE, "relop", " >= "},
346675Smckusick 	{ GT, "relop", " > "},
356675Smckusick 	{ ARRAY, "array", NULL},
366675Smckusick 	{ INDIRECT, "indirect", "$("},
376675Smckusick 	{ SUBSTR, "substr", "substr"},
386675Smckusick 	{ INDEX, "sindex", "sindex"},
396675Smckusick 	{ SPRINTF, "asprintf", "sprintf "},
406675Smckusick 	{ ADD, "arith", " + "},
416675Smckusick 	{ MINUS, "arith", " - "},
426675Smckusick 	{ MULT, "arith", " * "},
436675Smckusick 	{ DIVIDE, "arith", " / "},
446675Smckusick 	{ MOD, "arith", " % "},
456675Smckusick 	{ UMINUS, "arith", " -"},
466675Smckusick 	{ PREINCR, "incrdecr", "++"},
476675Smckusick 	{ POSTINCR, "incrdecr", "++"},
486675Smckusick 	{ PREDECR, "incrdecr", "--"},
496675Smckusick 	{ POSTDECR, "incrdecr", "--"},
506675Smckusick 	{ CAT, "cat", " "},
516675Smckusick 	{ PASTAT, "pastat", NULL},
526675Smckusick 	{ PASTAT2, "dopa2", NULL},
536675Smckusick 	{ MATCH, "matchop", " ~ "},
546675Smckusick 	{ NOTMATCH, "matchop", " !~ "},
556675Smckusick 	{ PRINTF, "aprintf", "printf"},
566675Smckusick 	{ PRINT, "print", "print"},
576675Smckusick 	{ SPLIT, "split", "split"},
586675Smckusick 	{ ASSIGN, "assign", " = "},
596675Smckusick 	{ ADDEQ, "assign", " += "},
606675Smckusick 	{ SUBEQ, "assign", " -= "},
616675Smckusick 	{ MULTEQ, "assign", " *= "},
626675Smckusick 	{ DIVEQ, "assign", " /= "},
636675Smckusick 	{ MODEQ, "assign", " %= "},
646675Smckusick 	{ IF, "ifstat", "if("},
656675Smckusick 	{ WHILE, "whilestat", "while("},
666675Smckusick 	{ FOR, "forstat", "for("},
676675Smckusick 	{ IN, "instat", "instat"},
686675Smckusick 	{ NEXT, "jump", "next"},
696675Smckusick 	{ EXIT, "jump", "exit"},
706675Smckusick 	{ BREAK, "jump", "break"},
716675Smckusick 	{ CONTINUE, "jump", "continue"},
726675Smckusick 	{ FNCN, "fncn", "fncn"},
736675Smckusick 	{ GETLINE, "getline", "getline"},
746675Smckusick 	{ 0, ""},
756675Smckusick };
766675Smckusick #define SIZE	LASTTOKEN - FIRSTTOKEN
776675Smckusick char *table[SIZE];
786675Smckusick char *names[SIZE];
main()796675Smckusick main()
806675Smckusick {	struct xx *p;
816675Smckusick 	int i;
826675Smckusick 	printf("#include \"awk.def\"\n");
836675Smckusick 	printf("obj nullproc();\n");
846675Smckusick 	for(p=proc;p->token!=0;p++)
856675Smckusick 		if(p==proc || strcmp(p->name, (p-1)->name))
866675Smckusick 			printf("extern obj %s();\n",p->name);
876675Smckusick 	for(p=proc;p->token!=0;p++)
886675Smckusick 		table[p->token-FIRSTTOKEN]=p->name;
896675Smckusick 	printf("obj (*proctab[%d])() = {\n", SIZE);
906675Smckusick 	for(i=0;i<SIZE;i++)
916675Smckusick 		if(table[i]==0) printf("/*%s*/\tnullproc,\n",tokname(i+FIRSTTOKEN));
926675Smckusick 		else printf("/*%s*/\t%s,\n",tokname(i+FIRSTTOKEN),table[i]);
936675Smckusick 	printf("};\n");
946675Smckusick 	printf("char *printname[%d] = {\n", SIZE);
956675Smckusick 	for(p=proc; p->token!=0; p++)
966675Smckusick 		names[p->token-FIRSTTOKEN] = p->pname;
976675Smckusick 	for(i=0; i<SIZE; i++)
9810794Ssam 		printf("/*%s*/\t\"%s\",\n",tokname(i+FIRSTTOKEN),
9910794Ssam 						names[i]?names[i]:"");
1006675Smckusick 	printf("};\n");
1016675Smckusick 	exit(0);
1026675Smckusick }
103