Changes in tools/prettyprinter/main.cc [ae47a23:c9383ee]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/prettyprinter/main.cc
rae47a23 rc9383ee 1 1 // 2 // Cforall Version 1.0.0 Copyright (C) 201 7University of Waterloo2 // Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo 3 3 // 4 4 // The contents of this file are covered under the licence agreement in the … … 10 10 // Created On : Wed Jun 28 22:57:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jun 29 13:09:32201713 // Update Count : 5812 // Last Modified On : Thu Jun 29 09:02:37 2017 13 // Update Count : 15 14 14 // 15 15 … … 19 19 using namespace std; 20 20 #include <unistd.h> // close 21 #include <getopt.h> // getopt22 21 #include "filter.h" 23 22 24 23 extern FILE * yyin; 24 extern int yylineno; 25 25 extern int yydebug; 26 26 extern int yyparse( void ); 27 27 28 bool parse_cmdline( int argc, char * argv[] ) {29 enum { Html, Identity, Latex, Nocode, ParseTree, };30 31 static struct option long_opts[] = {32 { "html", no_argument, nullptr, Html },33 { "identity", no_argument, nullptr, Identity },34 { "latex", no_argument, nullptr, Latex },35 { "nocode", no_argument, nullptr, Nocode },36 { "parse-tree", no_argument, nullptr, ParseTree },37 { nullptr, 0, nullptr, 0 }38 }; // long_opts39 int long_index;40 41 opterr = 0; // (global) prevent getopt from printing error messages42 43 int c;44 while ( (c = getopt_long( argc, argv, "hilnp", long_opts, &long_index )) != -1 ) {45 switch ( c ) {46 case Html:47 case 'h':48 filter = HTML;49 break;50 case Identity:51 case 'i':52 filter = ::Identity;53 break;54 case Latex:55 case 'l':56 filter = LaTeX;57 break;58 case Nocode:59 case 'n':60 filter = ::Nocode;61 break;62 case ParseTree:63 case 'p':64 filter = Parse_Tree;65 case '?':66 if ( optopt ) { // short option ?67 cerr << "Unknown option: -" << (char)optopt << endl;68 } else { // long option69 cerr << "Unknown option: " << argv[optind - 1] << endl;70 } // if71 return false;72 default:73 abort();74 } // switch75 } // while76 77 if ( optind != argc ) { // input files ?78 if ( optind == argc - 1 ) { // any commands after the flags ? => input file name79 yyin = fopen( argv[ optind ], "r" );80 if ( yyin == nullptr ) {81 cerr << "Open failure for input file \"" << argv[ optind ] << "\"" << endl;82 return false;83 } // if84 } else {85 cerr << "Too many input files " << argv[ optind + 1 ] << endl;86 return false;87 } // if88 } // if89 return true;90 } // parse_cmdline91 92 28 int main( int argc, char *argv[] ) { 93 yyin = stdin; // defaults29 yyin = stdin; 94 30 filter = Nocode; 95 31 96 if ( ! parse_cmdline( argc, argv ) ) { 97 cerr << "Usage: " << argv[0] 98 << " [" 99 << "-h/--html | " 100 << "-i/--identity | " 101 << "-l/--latex | " 102 << "-n/--nocode | " 103 << "-p/--parse-tree" 32 try { 33 switch ( argc ) { 34 case 3: 35 yyin = fopen( argv[ 2 ], "r" ); 36 if ( yyin == nullptr ) { 37 throw ios_base::failure( "unknown printer option arguments" ); 38 } // if 39 // FALL THROUGH 40 case 2: { 41 string arg( argv[1] ); 42 43 if ( arg == "-identity" ) { 44 filter = Identity; 45 } else if ( arg == "-parse_tree" ) { 46 filter = Parse_Tree; 47 } else if ( arg == "-nocode" ) { 48 filter = Nocode; 49 } else if ( arg == "-latex" ) { 50 filter = LaTeX; 51 } else if ( arg == "-html" ) { 52 filter = HTML; 53 } else { 54 throw ios_base::failure( "unknown printer option arguments" ); 55 } // if 56 break; 57 } 58 default: 59 throw ios_base::failure( "wrong number of arguments" ); 60 } // switch 61 } catch( ios_base::failure err ) { 62 cerr << err.what() << endl; 63 cerr << "Usage: [" << argv[0] 64 << "-identity |" 65 << "-parse_tree |" 66 << "-nocode |" 67 << "-latex |" 68 << "-html" 104 69 << "] [input-file]" 105 70 << endl; 106 71 exit( EXIT_FAILURE ); // TERMINATE 107 } // if72 } // try 108 73 109 74 //yydebug = 1;
Note: See TracChangeset
for help on using the changeset viewer.