+let get_rule g (r : n_symbol) : rhs =
+ Node.of_int (g.rules.((Node.to_int r) - g.rules_offset))
+
+let get_id1 (r : rhs) : tn_symbol =
+ Node.of_int(
+ ((Node.to_int r) lsr 6) land 0x7ffffff)
+
+let get_id2 (r : rhs) : tn_symbol =
+ Node.of_int((Node.to_int r) lsr 33)
+
+let get_rank (r : rhs) : int =
+ (Node.to_int r) land 0b11
+
+let get_id1_rank (r : rhs) : int =
+ ((Node.to_int r) lsr 2) land 0b11
+
+let get_id2_pos (r : rhs) : int =
+ ((Node.to_int r) lsr 4) land 0b11
+
+let get_id2_rank (r : rhs) : int =
+ get_rank r + 1 - get_id1_rank r