struct TrieNode * root = getNode(); struct TrieNode * sub_root = getNode(); // 1 insert(sub_root, "1", 0, rule_0); // 2, restore point insert(rule_0, "2", 1, rule_1); // 35 insert(rule_1, "3", 2, rule_2); insert(rule_2, "5", 3, rule_3); // link to next statement, which happens to be a definition // 2, restore point insert(rule_0, "2", 1, rule_4); // 85 insert(rule_4, "8", 2, rule_5); insert(rule_5, "5", 3, rule_3); // link to next statement, which happens to be a definition // 91, restore point insert(rule_3, "9", 2, rule_4); insert(rule_4, "1", 3, rule_5); // link to end // 91, restore point insert(rule_3, "9", 2, rule_6); // 92 insert(rule_6, "9", 2, rule_7); insert(rule_7, "2", 3, rule_5); // link to end // 6, end of rule insert(rule_5, "6", 2, NULL);