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