void dumpCover(NODEPTR p, int goalnt, int indent) { int eruleno = burm_rule(STATE_LABEL(p), goalnt); short *nts = burm_nts[eruleno]; NODEPTR kids[10]; int i; std::cerr << "\t\t"; for (i = 0; i < indent; i++) std::cerr << " "; std::cerr << burm_string[eruleno] << "\n"; burm_kids(p, eruleno, kids); for (i = 0; nts[i]; i++) dumpCover(kids[i], nts[i], indent + 1); }
static void burm_label1(NODEPTR_TYPE p) { burm_assert(p, PANIC("NULL tree in burm_label\n")); switch (burm_arity[OP_LABEL(p)]) { case 0: STATE_LABEL(p) = burm_state(OP_LABEL(p), 0, 0); break; case 1: burm_label1(LEFT_CHILD(p)); STATE_LABEL(p) = burm_state(OP_LABEL(p), STATE_LABEL(LEFT_CHILD(p)), 0); break; case 2: burm_label1(LEFT_CHILD(p)); burm_label1(RIGHT_CHILD(p)); STATE_LABEL(p) = burm_state(OP_LABEL(p), STATE_LABEL(LEFT_CHILD(p)), STATE_LABEL(RIGHT_CHILD(p))); break; } }
struct burm_state *burm_state_label(NODEPTR p) { burm_assert(p, PANIC("NULL tree in burm_state_label\n")); return STATE_LABEL(p); }
struct burm_state *burm_label(NODEPTR p) { burm_label1(p); return ((struct burm_state *)STATE_LABEL(p))->rule.burm_stmt ? STATE_LABEL(p) : 0; }
STATE_TYPE burm_state_label(NODEPTR_TYPE p) { burm_assert(p, PANIC("NULL tree in burm_state_label\n")); return STATE_LABEL(p); }