|
|
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.