+ location action_location;
+} rule;
+
+extern rule *rules;
+
+/* A function that selects a rule. */
+typedef bool (*rule_filter) (rule *);
+
+/* Return true IFF the rule has a `number' smaller than NRULES. */
+bool rule_useful_p (rule *r);
+
+/* Return true IFF the rule has a `number' higher than NRULES. */
+bool rule_useless_p (rule *r);
+
+/* Return true IFF the rule is not flagged as useful *and* is useful.
+ In other words, it was discarded because of conflicts. */
+bool rule_never_reduced_p (rule *r);
+
+/* Print this rule's number and lhs on OUT. If a PREVIOUS_LHS was
+ already displayed (by a previous call for another rule), avoid
+ useless repetitions. */
+void rule_lhs_print (rule *r, symbol *previous_lhs, FILE *out);
+
+/* Return the length of the RHS. */
+int rule_rhs_length (rule *r);
+
+/* Print this rule's RHS on OUT. */
+void rule_rhs_print (rule *r, FILE *out);
+
+/* Print this rule on OUT. */
+void rule_print (rule *r, FILE *out);
+