97 lines
2.7 KiB
C
97 lines
2.7 KiB
C
/* Copyright (c) 1984 AT&T */
|
|
/* All Rights Reserved */
|
|
|
|
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
|
|
/* The copyright notice above does not evidence any */
|
|
/* actual or intended publication of such source code. */
|
|
|
|
/* #ident "@(#)awk:proc.c 1.3" */
|
|
#ident "$Header: /proj/irix6.5.7m/isms/eoe/cmd/oawk/RCS/proc.c,v 1.3 1986/09/17 19:38:50 scott Exp $"
|
|
#include "awk.h"
|
|
#define NULL 0
|
|
static char SCCSID[] = "%W";
|
|
struct xx
|
|
{ int token;
|
|
char *name;
|
|
char *pname;
|
|
} proc[] = {
|
|
{ PROGRAM, "program", NULL},
|
|
{ BOR, "boolop", " || "},
|
|
{ AND, "boolop", " && "},
|
|
{ NOT, "boolop", " !"},
|
|
{ NE, "relop", " != "},
|
|
{ EQ, "relop", " == "},
|
|
{ LE, "relop", " <= "},
|
|
{ LT, "relop", " < "},
|
|
{ GE, "relop", " >= "},
|
|
{ GT, "relop", " > "},
|
|
{ ARRAY, "array", NULL},
|
|
{ INDIRECT, "indirect", "$("},
|
|
{ SUBSTR, "substr", "substr"},
|
|
{ INDEX, "sindex", "sindex"},
|
|
{ SPRINTF, "asprintf", "sprintf "},
|
|
{ ADD, "arith", " + "},
|
|
{ MINUS, "arith", " - "},
|
|
{ MULT, "arith", " * "},
|
|
{ DIVIDE, "arith", " / "},
|
|
{ MOD, "arith", " % "},
|
|
{ UMINUS, "arith", " -"},
|
|
{ PREINCR, "incrdecr", "++"},
|
|
{ POSTINCR, "incrdecr", "++"},
|
|
{ PREDECR, "incrdecr", "--"},
|
|
{ POSTDECR, "incrdecr", "--"},
|
|
{ CAT, "cat", " "},
|
|
{ PASTAT, "pastat", NULL},
|
|
{ PASTAT2, "dopa2", NULL},
|
|
{ MATCH, "matchop", " ~ "},
|
|
{ NOTMATCH, "matchop", " !~ "},
|
|
{ PRINTF, "aprintf", "printf"},
|
|
{ PRINT, "print", "print"},
|
|
{ SPLIT, "split", "split"},
|
|
{ ASSIGN, "assign", " = "},
|
|
{ ADDEQ, "assign", " += "},
|
|
{ SUBEQ, "assign", " -= "},
|
|
{ MULTEQ, "assign", " *= "},
|
|
{ DIVEQ, "assign", " /= "},
|
|
{ MODEQ, "assign", " %= "},
|
|
{ IF, "ifstat", "if("},
|
|
{ WHILE, "whilestat", "while("},
|
|
{ FOR, "forstat", "for("},
|
|
{ IN, "instat", "instat"},
|
|
{ NEXT, "jump", "next"},
|
|
{ EXIT, "jump", "exit"},
|
|
{ BREAK, "jump", "break"},
|
|
{ CONTINUE, "jump", "continue"},
|
|
{ FNCN, "fncn", "fncn"},
|
|
{ GETLINE, "getline", "getline"},
|
|
{ 0, ""},
|
|
};
|
|
#define SIZE LASTTOKEN - FIRSTTOKEN
|
|
char *table[SIZE];
|
|
char *names[SIZE];
|
|
main()
|
|
{ struct xx *p;
|
|
int i;
|
|
printf("#include \"awk.def\"\n");
|
|
printf("obj nullproc();\n");
|
|
for (i = SIZE; --i >= 0; )
|
|
names[i] = "";
|
|
for(p=proc;p->token!=0;p++)
|
|
if(p==proc || strcmp(p->name, (p-1)->name))
|
|
printf("extern obj %s();\n",p->name);
|
|
for(p=proc;p->token!=0;p++)
|
|
table[p->token-FIRSTTOKEN]=p->name;
|
|
printf("obj (*proctab[%d])() = {\n", SIZE);
|
|
for(i=0;i<SIZE;i++)
|
|
if(table[i]==0) printf("/*%s*/\tnullproc,\n",tokname(i+FIRSTTOKEN));
|
|
else printf("/*%s*/\t%s,\n",tokname(i+FIRSTTOKEN),table[i]);
|
|
printf("};\n");
|
|
printf("char *printname[%d] = {\n", SIZE);
|
|
for(p=proc; p->token!=0; p++)
|
|
names[p->token-FIRSTTOKEN] = p->pname;
|
|
for(i=0; i<SIZE; i++)
|
|
printf("/*%s*/\t\"%s\",\n",tokname(i+FIRSTTOKEN),names[i]);
|
|
printf("};\n");
|
|
exit(0);
|
|
}
|