| char rcsid_string[] = "$Id$"; |
| |
| #include <stdio.h> |
| #include <string.h> |
| #include "b.h" |
| #include "fe.h" |
| |
| static StrTableElement newStrTableElement ARGS((void)); |
| |
| StrTable |
| newStrTable() |
| { |
| return (StrTable) zalloc(sizeof(struct strTable)); |
| } |
| |
| static StrTableElement |
| newStrTableElement() |
| { |
| return (StrTableElement) zalloc(sizeof(struct strTableElement)); |
| } |
| |
| void |
| dumpStrTable(t) StrTable t; |
| { |
| List e; |
| IntList r; |
| |
| printf("Begin StrTable\n"); |
| for (e = t->elems; e; e = e->next) { |
| StrTableElement el = (StrTableElement) e->x; |
| printf("%s: ", el->str); |
| for (r = el->erulenos; r; r = r->next) { |
| int i = r->x; |
| printf("(%d)", i); |
| } |
| printf("\n"); |
| } |
| printf("End StrTable\n"); |
| } |
| |
| StrTableElement |
| addString(t, s, eruleno, new) StrTable t; char *s; int eruleno; int *new; |
| { |
| List l; |
| StrTableElement ste; |
| |
| assert(t); |
| for (l = t->elems; l; l = l->next) { |
| StrTableElement e = (StrTableElement) l->x; |
| |
| assert(e); |
| if (!strcmp(s, e->str)) { |
| e->erulenos = newIntList(eruleno, e->erulenos); |
| *new = 0; |
| return e; |
| } |
| } |
| ste = newStrTableElement(); |
| ste->erulenos = newIntList(eruleno, 0); |
| ste->str = (char *) zalloc(strlen(s) + 1); |
| strcpy(ste->str, s); |
| t->elems = newList(ste, t->elems); |
| *new = 1; |
| return ste; |
| } |