pp_knowledge *pp_knowledge_open(const char *path) { /* read knowledge from disk into pp_knowledge */ FILE *f = dictopen(path, "r"); pp_knowledge *k = (pp_knowledge *) xalloc (sizeof(pp_knowledge)); if (!f) { prt_error("Fatal Error: Couldn't find post-process knowledge file %s", path); exit(1); } k->lt = pp_lexer_open(f); fclose(f); k->string_set = string_set_create(); k->path = string_set_add(path, k->string_set); read_starting_link_table(k); read_link_sets(k); read_rules(k); initialize_set_of_links_starting_bounded_domain(k); return k; }
pp_knowledge *pp_knowledge_open(const char *path) { /* read knowledge from disk into pp_knowledge */ FILE *f = dictopen(path, "r"); if (NULL == f) { prt_error("Error: Couldn't find post-process knowledge file %s\n", path); return NULL; } pp_knowledge *k = (pp_knowledge *) malloc (sizeof(pp_knowledge)); *k = (pp_knowledge){0}; k->lt = pp_lexer_open(f); fclose(f); if (NULL == k->lt) goto failure; k->string_set = string_set_create(); k->path = string_set_add(path, k->string_set); if (!read_starting_link_table(k)) goto failure; if (!read_link_sets(k)) goto failure; if (!read_rules(k)) goto failure; initialize_set_of_links_starting_bounded_domain(k); /* If the knowledge file was empty, do nothing at all. */ if (0 == k->nStartingLinks) { pp_knowledge_close(k); return NULL; } return k; failure: prt_error("Error: Unable to open knowledge file %s.\n", path); pp_knowledge_close(k); return NULL; }