|
|
1.1 ! root 1: #include "hoc.h" ! 2: #include "y.tab.h" ! 3: ! 4: static Symbol *symlist = 0; /* symbol table: linked list */ ! 5: ! 6: Symbol *lookup(s) /* find s in symbol table */ ! 7: char *s; ! 8: { ! 9: Symbol *sp; ! 10: ! 11: for (sp = symlist; sp != (Symbol *) 0; sp = sp->next) ! 12: if (strcmp(sp->name, s) == 0) ! 13: return sp; ! 14: return 0; /* 0 ==> not found */ ! 15: } ! 16: ! 17: Symbol *install(s, t, d) /* install s in symbol table */ ! 18: char *s; ! 19: int t; ! 20: double d; ! 21: { ! 22: Symbol *sp; ! 23: char *emalloc(); ! 24: ! 25: sp = (Symbol *) emalloc(sizeof(Symbol)); ! 26: sp->name = emalloc(strlen(s)+1); /* +1 for '\0' */ ! 27: strcpy(sp->name, s); ! 28: sp->type = t; ! 29: sp->u.val = d; ! 30: sp->next = symlist; /* put at front of list */ ! 31: symlist = sp; ! 32: return sp; ! 33: } ! 34: ! 35: char *emalloc(n) /* check return from malloc */ ! 36: unsigned n; ! 37: { ! 38: char *p, *malloc(); ! 39: ! 40: p = malloc(n); ! 41: if (p == 0) ! 42: execerror("out of memory", (char *) 0); ! 43: return p; ! 44: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.