- struct TrieNode * root = getNode();
- struct TrieNode * sub_root = getNode();
- // i:
- // s1
- insert(sub_root, "1", 0, rule_0);
- // s2, b, restore point
- insert(rule_0, "2", 1, rule_1);
- // C
- // s3
- insert(rule_1, "3", 2, rule_2);
- // s5
- insert(rule_2, "5", 3, rule_3); // link to next statement, which happens to be a definition
- // C
- // s2, restore point
- insert(rule_0, "2", 1, rule_4);
- // s8
- insert(rule_4, "8", 2, rule_5);
- // s5
- insert(rule_5, "5", 3, rule_3); // link to next statement, which happens to be a definition
- // e
- // s9, b, restore point, because that this is directly after a previous branch the restore point is set to the start of this branch
- // C
- // s9
- insert(rule_3, "9", 2, rule_4);
- // s1
- insert(rule_4, "1", 3, rule_5); // link to end
- // C
- // s9, restore point
- insert(rule_3, "9", 2, rule_6);
- // s9
- insert(rule_6, "9", 2, rule_7);
- // s2
- insert(rule_7, "2", 3, rule_5); // link to end
- // s6, end of rule
- insert(rule_5, "6", 2, NULL);