|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include "pico.h" ! 3: ! 4: int uniq = 0; ! 5: ! 6: Node * ! 7: newhile(lcondi, lbody) ! 8: Node *lcondi, *lbody; ! 9: { ! 10: Node *n = new(OCOMMA, lbody, new(GOTO, Z, Z, uniq), Z); ! 11: ! 12: return new(LABL, new(CONDI, n, Z, lcondi), Z, uniq++); ! 13: } ! 14: ! 15: Node * ! 16: newuntil(lbody, lcondi) ! 17: Node *lbody, *lcondi; ! 18: { ! 19: Node *n; ! 20: ! 21: n = new(GOTO, Z, Z, uniq); ! 22: n = new(OCOMMA, lbody, new(CONDI, n, Z, lcondi), Z); ! 23: ! 24: return new(LABL, n, Z, uniq++); ! 25: } ! 26: ! 27: Node * ! 28: newloop(linit, lcondi, lincr, lbody) ! 29: Node *linit, *lcondi, *lincr, *lbody; ! 30: { ! 31: Node *n; ! 32: ! 33: n = new(OCOMMA, new(OCOMMA, lbody, lincr, Z), new(GOTO, Z, Z, uniq), Z); ! 34: n = new(LABL, new(CONDI, n, Z, lcondi), Z, uniq++); ! 35: ! 36: return new(OCOMMA, linit, n, Z); ! 37: } ! 38: ! 39: commacount(n) ! 40: Node *n; ! 41: { ! 42: if (n == Z) ! 43: return 0; ! 44: if (n->type != OCOMMA && n->type != ACOMMA) ! 45: return 1; ! 46: return commacount(n->right) + commacount(n->left); ! 47: } ! 48: ! 49: argcount(nrp, n, s) ! 50: long nrp; ! 51: Node *n; ! 52: char *s; ! 53: { ! 54: int pcnt; ! 55: ! 56: if ((pcnt=commacount(n)) != (int) nrp) ! 57: if (strcmp(s, "println") != 0 && strcmp(s, "printf") != 0) ! 58: { fprintf(stderr, "function %s takes %d ", s, nrp); ! 59: fprintf(stderr, "argumen%s, ", (nrp==1)?"t":"ts"); ! 60: yyerror("found %d", pcnt); ! 61: } ! 62: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.