#include #include #include "../grammar.h" int main(U_ATTR int argc, U_ATTR char **argv) { /* check new_tnt and print it */ TNT *tnt = new_tnt(1, 12); printf("Print a TNT value of type NT: "); print_tnt(tnt); printf("\n"); free(tnt); /* check new_tnt_string */ List *tnt_string = new_tnt_string("tntnt", 5, (T) 1, (NT) 2, (T) 3, (NT) 4, (T) 15); if (!tnt_string) { eprintf("error!\n"); return 1; } /* check new_rule, print_rule, and destroy_rule. */ Rule *rule = new_rule(1, tnt_string); print_rule(rule); destroy_rule(rule, 1); /* check build_grammar, print_grammar, and destroy_grammar */ List *rules = new_list(); List *names = new_list(); for (int i = 0; i < 3; i++) { tnt_string = new_tnt_string("ntn", 3, (NT) 3*(i+1), (T) 3*(i+1)*(i+1), (NT) 3*(i+1)*(i+1)-2); if (!tnt_string) { eprintf("i = %d, cannot create tnt string\n", i); map_list(rules, destroy_rule_and_free_all); destroy_list(rules, 0); destroy_list(names, 1); return 1; } rule = new_rule(i, tnt_string); add_to_list(rules, rule); char *name = MYALLOC(char, 7); snprintf(name, 7, "Rule %d", i); add_to_list(names, name); } Grammar *g = new_grammar(); build_grammar(g, rules, names); print_grammar(g); destroy_grammar(g, 1); free(g); return 0; }