#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 < 4; 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); map_list(names, destroy_cpa_and_free_all); destroy_list(names, 0); return 1; } rule = new_rule(i%3, tnt_string); add_to_list(rules, rule); char *name = MYALLOC(char, 7); snprintf(name, 7, "Rule %d", i); utf8* uname = new_utf8(name, 6); str_info info = get_info((str *)uname, 0); NUM *varray = MYALLOC(NUM, 6); NUM vindex = 0; for (NUM index = 0; info.value >= 0 && index < str_length((str *) uname); index += info.step, vindex++) { info = get_info((str *)uname, index); *(varray+vindex) = info.value; } destroy_str((str *) uname, 1); cpa *cpap = MYALLOC(cpa, 1); cpap->array = varray; cpap->size = vindex; add_to_list(names, cpap); } Grammar *g = new_grammar(); build_grammar(g, rules, names); print_grammar(g); destroy_grammar(g, 1); destroy_list(rules, 1); return 0; }