int main(int argc, char *argv[]) { clock_t rdp_finish_time, rdp_start_time = clock(); int rdp_symbol_statistics = 0, /* show symbol_ table statistics flag */ rdp_line_echo_all = 0, /* make a listing on all passes flag */ rdp_filter = 0, /* filter flag */ rdp_line_echo = 0, /* make listing flag */ rdp_lexicalise = 0; /* print lexicalised output flag */ unsigned long rdp_textsize = 35000l; /* size of scanner text array */ unsigned long rdp_tabwidth = 8l; /* tab expansion width */ char* rdp_vcg_filename = NULL; /* filename for -V option */ rdp_tree_node_data* rdp_tree = (rdp_tree_node_data*) graph_insert_graph("RDP derivation tree"); /* hook for derivation tree */ rdp_tree_node_data* rdp_tree_root; arg_message("rdparser\n" RDP_STAMP "\n\n""Usage: rdparser [options] source"); arg_message(""); arg_boolean('f', "Filter mode (read from stdin and write to stdout)", &rdp_filter); arg_boolean('l', "Make a listing", &rdp_line_echo); arg_boolean('L', "Print lexicalised source file", &rdp_lexicalise); arg_string ('o', "Write output to filename", &rdp_outputfilename); arg_boolean('s', "Echo each scanner symbol as it is read", &rdp_symbol_echo); arg_boolean('S', "Print summary symbol table statistics", &rdp_symbol_statistics); arg_numeric('t', "Tab expansion width (default 8)", &rdp_tabwidth); arg_numeric('T', "Text buffer size in bytes for scanner (default 20000)", &rdp_textsize); arg_boolean('v', "Set verbose mode", &rdp_verbose); arg_string ('V', "Write derivation tree to filename in VCG format", &rdp_vcg_filename); rdp_sourcefilenames = arg_process(argc, argv); /* Fix up filetypes */ for (rdp_sourcefilenumber = 0; rdp_sourcefilenames[rdp_sourcefilenumber] != NULL; rdp_sourcefilenumber++) rdp_sourcefilenames[rdp_sourcefilenumber] = text_default_filetype(rdp_sourcefilenames[rdp_sourcefilenumber], ""); if (rdp_filter) { rdp_sourcefilenames[0] = "-"; rdp_outputfilename = "-"; rdp_sourcefilenames[1] = NULL; /* make sure no further filenames are taken from the array */ } if ((rdp_sourcefilename = rdp_sourcefilenames[0]) == NULL) arg_help("no source files specified"); if (rdp_sourcefilenames[1] != NULL) text_message(TEXT_FATAL, "multiple source files not allowed\n"); text_init(rdp_textsize, 25, 100, (int) rdp_tabwidth); scan_init(0, 0, 0, rdp_symbol_echo, rdp_tokens); if (rdp_lexicalise) scan_lexicalise(); rdp_set_initialise(); rdp_load_keywords(); if (rdp_verbose) text_printf("\nrdparser\n" RDP_STAMP "\n\n"); for (rdp_pass = 1; rdp_pass <= RDP_PASSES; rdp_pass++) { rdp_tree_update = rdp_pass == RDP_PASSES; text_echo(rdp_line_echo_all || (rdp_line_echo && rdp_pass == RDP_PASSES)); for (rdp_sourcefilenumber = 0; (rdp_sourcefilename = rdp_sourcefilenames[rdp_sourcefilenumber]) != NULL; rdp_sourcefilenumber++) { if (text_open(rdp_sourcefilename) == NULL) arg_help("unable to open source file"); text_get_char(); scan_(); alt(rdp_tree_root = rdp_add_node("alt", rdp_tree)); /* call parser at top level */ if (text_total_errors() != 0) text_message(TEXT_FATAL, "error%s detected in source file ''\n", text_total_errors() == 1 ? "" : "s", rdp_sourcefilename); /* crash quietly */ graph_epsilon_prune_rdp_tree(rdp_tree_root, sizeof(rdp_tree_edge_data)); } } rdp_sourcefilename = rdp_sourcefilenames[0]; /* Reset filename to first file in the list */ graph_set_root(rdp_tree, rdp_tree_root); if (rdp_vcg_filename != NULL) { FILE *rdp_vcg_file; if (*rdp_vcg_filename == '\0') /* No filename supplied */ rdp_vcg_filename = "rdparser"; rdp_vcg_file = fopen((rdp_vcg_filename = text_default_filetype(rdp_vcg_filename, "vcg")), "w"); if (rdp_vcg_file == NULL) text_message(TEXT_FATAL, "unable to open VCG file '%s' for write\n", rdp_vcg_filename); if (rdp_verbose) text_message(TEXT_INFO, "Dumping derivation tree to VCG file '%s'\n", rdp_vcg_filename); text_redirect(rdp_vcg_file); graph_vcg(rdp_tree, NULL, scan_vcg_print_node, scan_vcg_print_edge); text_redirect(stdout); fclose(rdp_vcg_file); } printTreeRec((rdp_tree_node_data*) graph_root(rdp_tree), 0); if (rdp_symbol_statistics) { symbol_print_all_table_statistics(11); symbol_print_all_table(); } text_print_total_errors(); if (rdp_verbose) { rdp_finish_time = clock(); text_message(TEXT_INFO, "%.3f CPU seconds used\n", ((double) (rdp_finish_time-rdp_start_time)) / CLOCKS_PER_SEC); } return rdp_error_return; }
int main(int argc, char *argv[]) { clock_t rdp_finish_time, rdp_start_time = clock(); int rdp_symbol_statistics = 0, /* show symbol_ table statistics flag */ rdp_line_echo_all = 0, /* make a listing on all passes flag */ rdp_filter = 0, /* filter flag */ rdp_line_echo = 0, /* make listing flag */ rdp_lexicalise = 0; /* print lexicalised output flag */ unsigned long rdp_textsize = 35000l; /* size of scanner text array */ unsigned long rdp_tabwidth = 8l; /* tab expansion width */ char* rdp_vcg_filename = NULL; /* filename for -V option */ arg_message("Mini_syn V1.50 (c) Adrian Johnstone 1997\n" RDP_STAMP "\n\n""Usage: mini_syn [options] source[.m]"); arg_message(""); arg_boolean('f', "Filter mode (read from stdin and write to stdout)", &rdp_filter); arg_boolean('l', "Make a listing", &rdp_line_echo); arg_boolean('L', "Print lexicalised source file", &rdp_lexicalise); arg_string ('o', "Write output to filename", &rdp_outputfilename); arg_boolean('s', "Echo each scanner symbol as it is read", &rdp_symbol_echo); arg_boolean('S', "Print summary symbol table statistics", &rdp_symbol_statistics); arg_numeric('t', "Tab expansion width (default 8)", &rdp_tabwidth); arg_numeric('T', "Text buffer size in bytes for scanner (default 20000)", &rdp_textsize); arg_boolean('v', "Set verbose mode", &rdp_verbose); arg_string ('V', "Write derivation tree to filename in VCG format", &rdp_vcg_filename); rdp_sourcefilenames = arg_process(argc, argv); /* Fix up filetypes */ for (rdp_sourcefilenumber = 0; rdp_sourcefilenames[rdp_sourcefilenumber] != NULL; rdp_sourcefilenumber++) rdp_sourcefilenames[rdp_sourcefilenumber] = text_default_filetype(rdp_sourcefilenames[rdp_sourcefilenumber], "m"); if (rdp_filter) { rdp_sourcefilenames[0] = "-"; rdp_outputfilename = "-"; rdp_sourcefilenames[1] = NULL; /* make sure no further filenames are taken from the array */ } if ((rdp_sourcefilename = rdp_sourcefilenames[0]) == NULL) arg_help("no source files specified"); if (rdp_sourcefilenames[1] != NULL) text_message(TEXT_FATAL, "multiple source files not allowed\n"); text_init(rdp_textsize, 25, 100, (int) rdp_tabwidth); scan_init(0, 0, 0, rdp_symbol_echo, rdp_tokens); if (rdp_lexicalise) scan_lexicalise(); rdp_set_initialise(); rdp_load_keywords(); if (rdp_verbose) text_printf("\nMini_syn V1.50 (c) Adrian Johnstone 1997\n" RDP_STAMP "\n\n"); for (rdp_pass = 1; rdp_pass <= RDP_PASSES; rdp_pass++) { text_echo(rdp_line_echo_all || (rdp_line_echo && rdp_pass == RDP_PASSES)); for (rdp_sourcefilenumber = 0; (rdp_sourcefilename = rdp_sourcefilenames[rdp_sourcefilenumber]) != NULL; rdp_sourcefilenumber++) { if (text_open(rdp_sourcefilename) == NULL) arg_help("unable to open source file"); text_get_char(); scan_(); program(); /* call parser at top level */ if (text_total_errors() != 0) text_message(TEXT_FATAL, "error%s detected in source file ''\n", text_total_errors() == 1 ? "" : "s", rdp_sourcefilename); /* crash quietly */ } } rdp_sourcefilename = rdp_sourcefilenames[0]; /* Reset filename to first file in the list */ if (rdp_symbol_statistics) { symbol_print_all_table_statistics(11); symbol_print_all_table(); } text_print_total_errors(); if (rdp_verbose) { rdp_finish_time = clock(); text_message(TEXT_INFO, "%.3f CPU seconds used\n", ((double) (rdp_finish_time-rdp_start_time)) / CLOCKS_PER_SEC); } return rdp_error_return; }
static void TestSelector() { TestText text; USet* excluded_sets[3] = { NULL }; int32_t i, testCaseIdx; if (!getAvailableNames()) { return; } if (!text_open(&text)) { releaseAvailableNames();; } excluded_sets[0] = uset_openEmpty(); for(i = 1 ; i < 3 ; i++) { excluded_sets[i] = uset_open(i*30, i*30+500); } for(testCaseIdx = 0; testCaseIdx < UPRV_LENGTHOF(getEncodingsFns); testCaseIdx++) { int32_t excluded_set_id; int32_t num_encodings; const char **encodings = getEncodingsFns[testCaseIdx](&num_encodings); if (getTestOption(QUICK_OPTION) && num_encodings > 25) { uprv_free((void *)encodings); continue; } /* * for(excluded_set_id = 0 ; excluded_set_id < 3 ; excluded_set_id++) * * This loop was replaced by the following statement because * the loop made the test run longer without adding to the code coverage. * The handling of the exclusion set is independent of the * set of encodings, so there is no need to test every combination. */ excluded_set_id = testCaseIdx % UPRV_LENGTHOF(excluded_sets); { UConverterSelector *sel_rt, *sel_fb; char *buffer_fb = NULL; UErrorCode status = U_ZERO_ERROR; sel_rt = ucnvsel_open(encodings, num_encodings, excluded_sets[excluded_set_id], UCNV_ROUNDTRIP_SET, &status); if (num_encodings == gCountAvailable) { /* test the special "all converters" parameter values */ sel_fb = ucnvsel_open(NULL, 0, excluded_sets[excluded_set_id], UCNV_ROUNDTRIP_AND_FALLBACK_SET, &status); } else if (uset_isEmpty(excluded_sets[excluded_set_id])) { /* test that a NULL set gives the same results as an empty set */ sel_fb = ucnvsel_open(encodings, num_encodings, NULL, UCNV_ROUNDTRIP_AND_FALLBACK_SET, &status); } else { sel_fb = ucnvsel_open(encodings, num_encodings, excluded_sets[excluded_set_id], UCNV_ROUNDTRIP_AND_FALLBACK_SET, &status); } if (U_FAILURE(status)) { log_err("ucnv_sel_open(encodings %ld) failed - %s\n", testCaseIdx, u_errorName(status)); ucnvsel_close(sel_rt); uprv_free((void *)encodings); continue; } text_reset(&text); for (;;) { UBool *manual_rt, *manual_fb; static UChar utf16[10000]; char *s; int32_t length8, length16; s = text_nextString(&text, &length8); if (s == NULL || (getTestOption(QUICK_OPTION) && text.number > 3)) { break; } manual_rt = getResultsManually(encodings, num_encodings, s, length8, excluded_sets[excluded_set_id], UCNV_ROUNDTRIP_SET); manual_fb = getResultsManually(encodings, num_encodings, s, length8, excluded_sets[excluded_set_id], UCNV_ROUNDTRIP_AND_FALLBACK_SET); /* UTF-8 with length */ status = U_ZERO_ERROR; verifyResult(ucnvsel_selectForUTF8(sel_rt, s, length8, &status), manual_rt); verifyResult(ucnvsel_selectForUTF8(sel_fb, s, length8, &status), manual_fb); /* UTF-8 NUL-terminated */ verifyResult(ucnvsel_selectForUTF8(sel_rt, s, -1, &status), manual_rt); verifyResult(ucnvsel_selectForUTF8(sel_fb, s, -1, &status), manual_fb); u_strFromUTF8(utf16, UPRV_LENGTHOF(utf16), &length16, s, length8, &status); if (U_FAILURE(status)) { log_err("error converting the test text (string %ld) to UTF-16 - %s\n", (long)text.number, u_errorName(status)); } else { if (text.number == 0) { sel_fb = serializeAndUnserialize(sel_fb, &buffer_fb, &status); } if (U_SUCCESS(status)) { /* UTF-16 with length */ verifyResult(ucnvsel_selectForString(sel_rt, utf16, length16, &status), manual_rt); verifyResult(ucnvsel_selectForString(sel_fb, utf16, length16, &status), manual_fb); /* UTF-16 NUL-terminated */ verifyResult(ucnvsel_selectForString(sel_rt, utf16, -1, &status), manual_rt); verifyResult(ucnvsel_selectForString(sel_fb, utf16, -1, &status), manual_fb); } } uprv_free(manual_rt); uprv_free(manual_fb); } ucnvsel_close(sel_rt); ucnvsel_close(sel_fb); uprv_free(buffer_fb); } uprv_free((void *)encodings); } releaseAvailableNames(); text_close(&text); for(i = 0 ; i < 3 ; i++) { uset_close(excluded_sets[i]); } }