1*6674Smckusick /* parse.c 4.1 82/05/07 */ 2*6674Smckusick 3*6674Smckusick #include "awk.def" 4*6674Smckusick #include "awk.h" 5*6674Smckusick #include "stdio.h" 6*6674Smckusick node *ALLOC(n) 7*6674Smckusick { 8*6674Smckusick register node *x; 9*6674Smckusick x = (node *) malloc(sizeof(node) + (n-1)*sizeof(node *)); 10*6674Smckusick if (x == NULL) 11*6674Smckusick error(FATAL, "out of space in ALLOC"); 12*6674Smckusick return(x); 13*6674Smckusick } 14*6674Smckusick node *exptostat(a) node *a; 15*6674Smckusick { 16*6674Smckusick a->ntype = NSTAT; 17*6674Smckusick return(a); 18*6674Smckusick } 19*6674Smckusick node *nullstat; 20*6674Smckusick node *node0(a) 21*6674Smckusick { 22*6674Smckusick register node *x; 23*6674Smckusick x=ALLOC(0); 24*6674Smckusick x->nnext = NULL; 25*6674Smckusick x->nobj=a; 26*6674Smckusick return(x); 27*6674Smckusick } 28*6674Smckusick node *node1(a,b) node *b; 29*6674Smckusick { 30*6674Smckusick register node *x; 31*6674Smckusick x=ALLOC(1); 32*6674Smckusick x->nnext = NULL; 33*6674Smckusick x->nobj=a; 34*6674Smckusick x->narg[0]=b; 35*6674Smckusick return(x); 36*6674Smckusick } 37*6674Smckusick node *node2(a,b,c) node *b, *c; 38*6674Smckusick { 39*6674Smckusick register node *x; 40*6674Smckusick x = ALLOC(2); 41*6674Smckusick x->nnext = NULL; 42*6674Smckusick x->nobj = a; 43*6674Smckusick x->narg[0] = b; 44*6674Smckusick x->narg[1] = c; 45*6674Smckusick return(x); 46*6674Smckusick } 47*6674Smckusick node *node3(a,b,c,d) node *b, *c, *d; 48*6674Smckusick { 49*6674Smckusick register node *x; 50*6674Smckusick x = ALLOC(3); 51*6674Smckusick x->nnext = NULL; 52*6674Smckusick x->nobj = a; 53*6674Smckusick x->narg[0] = b; 54*6674Smckusick x->narg[1] = c; 55*6674Smckusick x->narg[2] = d; 56*6674Smckusick return(x); 57*6674Smckusick } 58*6674Smckusick node *node4(a,b,c,d,e) node *b, *c, *d, *e; 59*6674Smckusick { 60*6674Smckusick register node *x; 61*6674Smckusick x = ALLOC(4); 62*6674Smckusick x->nnext = NULL; 63*6674Smckusick x->nobj = a; 64*6674Smckusick x->narg[0] = b; 65*6674Smckusick x->narg[1] = c; 66*6674Smckusick x->narg[2] = d; 67*6674Smckusick x->narg[3] = e; 68*6674Smckusick return(x); 69*6674Smckusick } 70*6674Smckusick node *stat3(a,b,c,d) node *b, *c, *d; 71*6674Smckusick { 72*6674Smckusick register node *x; 73*6674Smckusick x = node3(a,b,c,d); 74*6674Smckusick x->ntype = NSTAT; 75*6674Smckusick return(x); 76*6674Smckusick } 77*6674Smckusick node *op2(a,b,c) node *b, *c; 78*6674Smckusick { 79*6674Smckusick register node *x; 80*6674Smckusick x = node2(a,b,c); 81*6674Smckusick x->ntype = NEXPR; 82*6674Smckusick return(x); 83*6674Smckusick } 84*6674Smckusick node *op1(a,b) node *b; 85*6674Smckusick { 86*6674Smckusick register node *x; 87*6674Smckusick x = node1(a,b); 88*6674Smckusick x->ntype = NEXPR; 89*6674Smckusick return(x); 90*6674Smckusick } 91*6674Smckusick node *stat1(a,b) node *b; 92*6674Smckusick { 93*6674Smckusick register node *x; 94*6674Smckusick x = node1(a,b); 95*6674Smckusick x->ntype = NSTAT; 96*6674Smckusick return(x); 97*6674Smckusick } 98*6674Smckusick node *op3(a,b,c,d) node *b, *c, *d; 99*6674Smckusick { 100*6674Smckusick register node *x; 101*6674Smckusick x = node3(a,b,c,d); 102*6674Smckusick x->ntype = NEXPR; 103*6674Smckusick return(x); 104*6674Smckusick } 105*6674Smckusick node *stat2(a,b,c) node *b, *c; 106*6674Smckusick { 107*6674Smckusick register node *x; 108*6674Smckusick x = node2(a,b,c); 109*6674Smckusick x->ntype = NSTAT; 110*6674Smckusick return(x); 111*6674Smckusick } 112*6674Smckusick node *stat4(a,b,c,d,e) node *b, *c, *d, *e; 113*6674Smckusick { 114*6674Smckusick register node *x; 115*6674Smckusick x = node4(a,b,c,d,e); 116*6674Smckusick x->ntype = NSTAT; 117*6674Smckusick return(x); 118*6674Smckusick } 119*6674Smckusick node *valtonode(a, b) cell *a; 120*6674Smckusick { 121*6674Smckusick register node *x; 122*6674Smckusick x = node0(a); 123*6674Smckusick x->ntype = NVALUE; 124*6674Smckusick x->subtype = b; 125*6674Smckusick return(x); 126*6674Smckusick } 127*6674Smckusick node *pa2stat(a,b,c) node *a, *b, *c; 128*6674Smckusick { 129*6674Smckusick register node *x; 130*6674Smckusick x = node3(paircnt++, a, b, c); 131*6674Smckusick x->ntype = NPA2; 132*6674Smckusick return(x); 133*6674Smckusick } 134*6674Smckusick node *linkum(a,b) node *a, *b; 135*6674Smckusick { 136*6674Smckusick register node *c; 137*6674Smckusick if(a == NULL) return(b); 138*6674Smckusick else if(b == NULL) return(a); 139*6674Smckusick for(c=a; c->nnext != NULL; c=c->nnext); 140*6674Smckusick c->nnext = b; 141*6674Smckusick return(a); 142*6674Smckusick } 143*6674Smckusick node *genprint() 144*6674Smckusick { 145*6674Smckusick register node *x; 146*6674Smckusick x = stat2(PRINT,valtonode(lookup("$record", symtab, 0), CFLD), nullstat); 147*6674Smckusick return(x); 148*6674Smckusick } 149