summaryrefslogtreecommitdiff
path: root/support/tools/Burg/map.c
diff options
context:
space:
mode:
Diffstat (limited to 'support/tools/Burg/map.c')
-rw-r--r--support/tools/Burg/map.c135
1 files changed, 0 insertions, 135 deletions
diff --git a/support/tools/Burg/map.c b/support/tools/Burg/map.c
deleted file mode 100644
index 588b485eab..0000000000
--- a/support/tools/Burg/map.c
+++ /dev/null
@@ -1,135 +0,0 @@
-char rcsid_map[] = "$Id$";
-
-#include <stdio.h>
-#include <string.h>
-#include "b.h"
-#include "fe.h"
-
-Mapping globalMap;
-
-static void growMapping ARGS((Mapping));
-static int hash ARGS((Item_Set, int));
-
-Mapping
-newMapping(size) int size;
-{
- Mapping m;
-
- m = (Mapping) zalloc(sizeof(struct mapping));
- assert(m);
-
- m->count = 0;
- m->hash = (List*) zalloc(size * sizeof(List));
- m->hash_size = size;
- m->max_size = STATES_INCR;
- m->set = (Item_Set*) zalloc(m->max_size * sizeof(Item_Set));
- assert(m->set);
-
- return m;
-}
-
-static void
-growMapping(m) Mapping m;
-{
- Item_Set *tmp;
-
- m->max_size += STATES_INCR;
- tmp = (Item_Set*) zalloc(m->max_size * sizeof(Item_Set));
- memcpy(tmp, m->set, m->count * sizeof(Item_Set));
- zfree(m->set);
- m->set = tmp;
-}
-
-static int
-hash(ts, mod) Item_Set ts; int mod;
-{
- register Item *p = ts->virgin;
- register int v;
- register Relevant r = ts->relevant;
- register int nt;
-
- if (!ts->op) {
- return 0;
- }
-
- v = 0;
- for (; (nt = *r) != 0; r++) {
- v ^= ((long)p[nt].rule) + (PRINCIPLECOST(p[nt].delta)<<4);
- }
- v >>= 4;
- v &= (mod-1);
- return v;
-}
-
-Item_Set
-encode(m, ts, new) Mapping m; Item_Set ts; int *new;
-{
- int h;
- List l;
-
- assert(m);
- assert(ts);
- assert(m->count <= m->max_size);
-
- if (grammarNts && errorState && m == globalMap) {
- List l;
- int found;
-
- found = 0;
- for (l = grammarNts; l; l = l->next) {
- Symbol s;
- s = (Symbol) l->x;
-
- if (ts->virgin[s->u.nt->num].rule) {
- found = 1;
- break;
- }
- }
- if (!found) {
- *new = 0;
- return errorState;
- }
- }
-
- *new = 0;
- h = hash(ts, m->hash_size);
- for (l = m->hash[h]; l; l = l->next) {
- Item_Set s = (Item_Set) l->x;
- if (ts->op == s->op && equivSet(ts, s)) {
- ts->num = s->num;
- return s;
- }
- }
- if (m->count >= m->max_size) {
- growMapping(m);
- }
- assert(m->count < m->max_size);
- m->set[m->count] = ts;
- ts->num = m->count++;
- *new = 1;
- m->hash[h] = newList(ts, m->hash[h]);
- return ts;
-}
-
-Item_Set
-decode(m, t) Mapping m; ItemSetNum t;
-{
- assert(m);
- assert(t);
- assert(m->count < m->max_size);
- assert(t < m->count);
-
- return m->set[t];
-}
-
-void
-dumpMapping(m) Mapping m;
-{
- int i;
-
- printf("BEGIN Mapping: Size=%d\n", m->count);
- for (i = 0; i < m->count; i++) {
- dumpItem_Set(m->set[i]);
- }
- printf("END Mapping\n");
-}