xref: /csrg-svn/old/awk/parse.c (revision 6674)
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