int main(int argc, char** argv) { if (argc<3) { cout << "Not enough arguments. You must provide a valid infile." << endl; return 0; } ofstream out; out.open(argv[2]); Scanner* s = new Scanner(); try { s->scan(argv[1]); print_toks(s->toks,out); out << "Total Tokens = " << s->toks.size() << endl; out.close(); delete s; } catch (exception& e) { print_toks(s->toks, out); // cout << e.what(); out << e.what(); out.close(); delete s; } }
int main(int argc, char *argv[]) { if (argc != 4) { printf ("USAGE: %s command index file\n", argv[0]); exit (1); } char *cmd = argv[1]; enum mode_t mode = MODE_NONE; if (strcmp (cmd, "rename-toks") == 0) { mode = MODE_RENAME; } else if (strcmp (cmd, "print") == 0) { mode = MODE_PRINT; } else if (strcmp (cmd, "delete-string") == 0) { mode = MODE_DELETE_STRING; } else if (strcmp (cmd, "shorten-string") == 0) { mode = MODE_SHORTEN_STRING; } else if (strcmp (cmd, "x-string") == 0) { mode = MODE_X_STRING; } else if (strcmp (cmd, "shorten-int") == 0) { mode = MODE_SHORTEN_INT; } else if (strcmp (cmd, "remove-asm-comment") == 0) { mode = MODE_REMOVE_ASM_COMMENT; } else if (strcmp (cmd, "remove-asm-line") == 0) { mode = MODE_REMOVE_ASM_LINE; } else if (strcmp (cmd, "collapse-toks") == 0) { mode = MODE_COLLAPSE_TOKS; } else if (strncmp (cmd, "reverse-", 8) == 0) { mode = MODE_REVERSE_TOKS; int res = sscanf (&cmd[8], "%d", &n_toks); assert (res==1); assert (n_toks > 0 && n_toks <= 1000); } else if (strncmp (cmd, "rm-toks-", 8) == 0) { mode = MODE_RM_TOKS; int res = sscanf (&cmd[8], "%d", &n_toks); assert (res==1); assert (n_toks > 0 && n_toks <= 1000); } else if (strncmp (cmd, "rm-tok-pattern-", 15) == 0) { mode = MODE_RM_TOK_PATTERN; int res = sscanf (&cmd[15], "%d", &n_toks); assert (res==1); assert (n_toks > 1 && n_toks <= 8); } else { printf ("error: unknown mode '%s'\n", cmd); exit (50); } int tok_index; int ret = sscanf (argv[2], "%d", &tok_index); assert (ret==1); // printf ("file = '%s'\n", argv[3]); FILE *in = fopen (argv[3], "r"); assert (in); yyin = in; max_toks = initial_length; tok_list = (struct tok_t *) malloc (max_toks * sizeof (struct tok_t)); assert (tok_list); yylex(); // these calls all exit() at the end switch (mode) { case MODE_PRINT: print_toks (); assert (0); case MODE_RENAME: rename_toks (tok_index); assert (0); case MODE_DELETE_STRING: delete_string (tok_index); assert (0); case MODE_SHORTEN_STRING: shorten_string (tok_index); assert (0); case MODE_X_STRING: x_string (tok_index); assert (0); case MODE_SHORTEN_INT: shorten_int (tok_index); assert (0); case MODE_REMOVE_ASM_COMMENT: remove_asm_comment (tok_index); assert (0); case MODE_REMOVE_ASM_LINE: remove_asm_line (tok_index); assert (0); case MODE_COLLAPSE_TOKS: collapse_toks (tok_index); assert (0); case MODE_RM_TOKS: rm_toks (tok_index); assert (0); case MODE_REVERSE_TOKS: reverse_toks (tok_index); assert (0); case MODE_RM_TOK_PATTERN: rm_tok_pattern (tok_index); assert (0); default: assert (0); } }