diff options
Diffstat (limited to 'utils/Burg/rule.c')
-rw-r--r-- | utils/Burg/rule.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/utils/Burg/rule.c b/utils/Burg/rule.c new file mode 100644 index 0000000..ee5c89e --- /dev/null +++ b/utils/Burg/rule.c @@ -0,0 +1,49 @@ +char rcsid_rule[] = "$Id$"; + +#include "b.h" +#include <stdio.h> + +RuleNum max_rule; +int max_erule_num; + +struct rule stub_rule; + +List rules; + +Rule +newRule(delta, erulenum, lhs, pat) DeltaPtr delta; ERuleNum erulenum; NonTerminal lhs; Pattern pat; +{ + Rule p; + + p = (Rule) zalloc(sizeof(struct rule)); + assert(p); + ASSIGNCOST(p->delta, delta); + p->erulenum = erulenum; + if (erulenum > max_erule_num) { + max_erule_num = erulenum; + } + p->num = max_rule++; + p->lhs = lhs; + p->pat = pat; + + rules = newList(p, rules); + + return p; +} + +void +dumpRule(p) Rule p; +{ + dumpNonTerminal(p->lhs); + printf(" : "); + dumpPattern(p->pat); + printf(" "); + dumpCost(p->delta); + printf("\n"); +} + +void +dumpRuleList(l) List l; +{ + foreachList((ListFn)dumpRule, l); +} |