static char sccsid
[] = "@(#)proc.c 4.3 %G%";
{ PROGRAM
, "program", NULL
},
{ BOR
, "boolop", " || "},
{ AND
, "boolop", " && "},
{ INDIRECT
, "indirect", "$("},
{ SUBSTR
, "substr", "substr"},
{ INDEX
, "sindex", "sindex"},
{ SPRINTF
, "asprintf", "sprintf "},
{ MINUS
, "arith", " - "},
{ DIVIDE
, "arith", " / "},
{ UMINUS
, "arith", " -"},
{ PREINCR
, "incrdecr", "++"},
{ POSTINCR
, "incrdecr", "++"},
{ PREDECR
, "incrdecr", "--"},
{ POSTDECR
, "incrdecr", "--"},
{ 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", " %= "},
{ WHILE
, "whilestat", "while("},
{ FOR
, "forstat", "for("},
{ IN
, "instat", "instat"},
{ BREAK
, "jump", "break"},
{ CONTINUE
, "jump", "continue"},
{ GETLINE
, "getline", "getline"},
#define SIZE LASTTOKEN - FIRSTTOKEN
printf("#include \"awk.def\"\n");
printf("obj nullproc();\n");
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
);
if(table
[i
]==0) printf("/*%s*/\tnullproc,\n",tokname(i
+FIRSTTOKEN
));
else printf("/*%s*/\t%s,\n",tokname(i
+FIRSTTOKEN
),table
[i
]);
printf("char *printname[%d] = {\n", SIZE
);
for(p
=proc
; p
->token
!=0; p
++)
names
[p
->token
-FIRSTTOKEN
] = p
->pname
;
printf("/*%s*/\t\"%s\",\n",tokname(i
+FIRSTTOKEN
),