aboutsummaryrefslogtreecommitdiffstats
path: root/utils/Burg/rule.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils/Burg/rule.c')
-rw-r--r--utils/Burg/rule.c49
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);
+}