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