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
814473Ssam #ifndef lint
9*48236Sbostic static char sccsid[] = "@(#)parse.c 4.3 (Berkeley) 04/17/91";
10*48236Sbostic #endif /* not lint */
116674Smckusick
126674Smckusick #include "awk.def"
136674Smckusick #include "awk.h"
146674Smckusick #include "stdio.h"
ALLOC(n)156674Smckusick node *ALLOC(n)
166674Smckusick {
176674Smckusick register node *x;
186674Smckusick x = (node *) malloc(sizeof(node) + (n-1)*sizeof(node *));
196674Smckusick if (x == NULL)
206674Smckusick error(FATAL, "out of space in ALLOC");
216674Smckusick return(x);
226674Smckusick }
exptostat(a)236674Smckusick node *exptostat(a) node *a;
246674Smckusick {
256674Smckusick a->ntype = NSTAT;
266674Smckusick return(a);
276674Smckusick }
286674Smckusick node *nullstat;
node0(a)296674Smckusick node *node0(a)
306674Smckusick {
316674Smckusick register node *x;
326674Smckusick x=ALLOC(0);
336674Smckusick x->nnext = NULL;
346674Smckusick x->nobj=a;
356674Smckusick return(x);
366674Smckusick }
node1(a,b)376674Smckusick node *node1(a,b) node *b;
386674Smckusick {
396674Smckusick register node *x;
406674Smckusick x=ALLOC(1);
416674Smckusick x->nnext = NULL;
426674Smckusick x->nobj=a;
436674Smckusick x->narg[0]=b;
446674Smckusick return(x);
456674Smckusick }
node2(a,b,c)466674Smckusick node *node2(a,b,c) node *b, *c;
476674Smckusick {
486674Smckusick register node *x;
496674Smckusick x = ALLOC(2);
506674Smckusick x->nnext = NULL;
516674Smckusick x->nobj = a;
526674Smckusick x->narg[0] = b;
536674Smckusick x->narg[1] = c;
546674Smckusick return(x);
556674Smckusick }
node3(a,b,c,d)566674Smckusick node *node3(a,b,c,d) node *b, *c, *d;
576674Smckusick {
586674Smckusick register node *x;
596674Smckusick x = ALLOC(3);
606674Smckusick x->nnext = NULL;
616674Smckusick x->nobj = a;
626674Smckusick x->narg[0] = b;
636674Smckusick x->narg[1] = c;
646674Smckusick x->narg[2] = d;
656674Smckusick return(x);
666674Smckusick }
node4(a,b,c,d,e)676674Smckusick node *node4(a,b,c,d,e) node *b, *c, *d, *e;
686674Smckusick {
696674Smckusick register node *x;
706674Smckusick x = ALLOC(4);
716674Smckusick x->nnext = NULL;
726674Smckusick x->nobj = a;
736674Smckusick x->narg[0] = b;
746674Smckusick x->narg[1] = c;
756674Smckusick x->narg[2] = d;
766674Smckusick x->narg[3] = e;
776674Smckusick return(x);
786674Smckusick }
stat3(a,b,c,d)796674Smckusick node *stat3(a,b,c,d) node *b, *c, *d;
806674Smckusick {
816674Smckusick register node *x;
826674Smckusick x = node3(a,b,c,d);
836674Smckusick x->ntype = NSTAT;
846674Smckusick return(x);
856674Smckusick }
op2(a,b,c)866674Smckusick node *op2(a,b,c) node *b, *c;
876674Smckusick {
886674Smckusick register node *x;
896674Smckusick x = node2(a,b,c);
906674Smckusick x->ntype = NEXPR;
916674Smckusick return(x);
926674Smckusick }
op1(a,b)936674Smckusick node *op1(a,b) node *b;
946674Smckusick {
956674Smckusick register node *x;
966674Smckusick x = node1(a,b);
976674Smckusick x->ntype = NEXPR;
986674Smckusick return(x);
996674Smckusick }
stat1(a,b)1006674Smckusick node *stat1(a,b) node *b;
1016674Smckusick {
1026674Smckusick register node *x;
1036674Smckusick x = node1(a,b);
1046674Smckusick x->ntype = NSTAT;
1056674Smckusick return(x);
1066674Smckusick }
op3(a,b,c,d)1076674Smckusick node *op3(a,b,c,d) node *b, *c, *d;
1086674Smckusick {
1096674Smckusick register node *x;
1106674Smckusick x = node3(a,b,c,d);
1116674Smckusick x->ntype = NEXPR;
1126674Smckusick return(x);
1136674Smckusick }
stat2(a,b,c)1146674Smckusick node *stat2(a,b,c) node *b, *c;
1156674Smckusick {
1166674Smckusick register node *x;
1176674Smckusick x = node2(a,b,c);
1186674Smckusick x->ntype = NSTAT;
1196674Smckusick return(x);
1206674Smckusick }
stat4(a,b,c,d,e)1216674Smckusick node *stat4(a,b,c,d,e) node *b, *c, *d, *e;
1226674Smckusick {
1236674Smckusick register node *x;
1246674Smckusick x = node4(a,b,c,d,e);
1256674Smckusick x->ntype = NSTAT;
1266674Smckusick return(x);
1276674Smckusick }
valtonode(a,b)1286674Smckusick node *valtonode(a, b) cell *a;
1296674Smckusick {
1306674Smckusick register node *x;
1316674Smckusick x = node0(a);
1326674Smckusick x->ntype = NVALUE;
1336674Smckusick x->subtype = b;
1346674Smckusick return(x);
1356674Smckusick }
pa2stat(a,b,c)1366674Smckusick node *pa2stat(a,b,c) node *a, *b, *c;
1376674Smckusick {
1386674Smckusick register node *x;
1396674Smckusick x = node3(paircnt++, a, b, c);
1406674Smckusick x->ntype = NPA2;
1416674Smckusick return(x);
1426674Smckusick }
linkum(a,b)1436674Smckusick node *linkum(a,b) node *a, *b;
1446674Smckusick {
1456674Smckusick register node *c;
1466674Smckusick if(a == NULL) return(b);
1476674Smckusick else if(b == NULL) return(a);
1486674Smckusick for(c=a; c->nnext != NULL; c=c->nnext);
1496674Smckusick c->nnext = b;
1506674Smckusick return(a);
1516674Smckusick }
genprint()1526674Smckusick node *genprint()
1536674Smckusick {
1546674Smckusick register node *x;
1556674Smckusick x = stat2(PRINT,valtonode(lookup("$record", symtab, 0), CFLD), nullstat);
1566674Smckusick return(x);
1576674Smckusick }
158