Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/prettyprinter/main.cc

    rae47a23 rc9383ee  
    11//
    2 // Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
     2// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
    33//
    44// The contents of this file are covered under the licence agreement in the
     
    1010// Created On       : Wed Jun 28 22:57:26 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jun 29 13:09:32 2017
    13 // Update Count     : 58
     12// Last Modified On : Thu Jun 29 09:02:37 2017
     13// Update Count     : 15
    1414//
    1515
     
    1919using namespace std;
    2020#include <unistd.h>                                                                             // close
    21 #include <getopt.h>                                                                             // getopt
    2221#include "filter.h"
    2322
    2423extern FILE * yyin;
     24extern int yylineno;
    2525extern int yydebug;
    2626extern int yyparse( void );
    2727
    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_opts
    39         int long_index;
    40 
    41         opterr = 0;                                                                                     // (global) prevent getopt from printing error messages
    42 
    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 option
    69                                 cerr << "Unknown option: " << argv[optind - 1] << endl;
    70                         } // if
    71                         return false;
    72                   default:
    73                         abort();
    74                 } // switch
    75         } // while
    76 
    77         if ( optind != argc ) {                                                         // input files ?
    78                 if ( optind == argc - 1 ) {                                             // any commands after the flags ? => input file name
    79                         yyin = fopen( argv[ optind ], "r" );
    80                         if ( yyin == nullptr ) {
    81                                 cerr << "Open failure for input file \"" << argv[ optind ] << "\"" << endl;
    82                                 return false;
    83                         } // if
    84                 } else {
    85                         cerr << "Too many input files " << argv[ optind + 1 ] << endl;
    86                         return false;
    87                 } // if
    88         } // if
    89         return true;
    90 } // parse_cmdline
    91 
    9228int main( int argc, char *argv[] ) {
    93         yyin = stdin;                                                                           // defaults
     29        yyin = stdin;
    9430        filter = Nocode;
    9531
    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"
    10469                         << "] [input-file]"
    10570                         << endl;
    10671                exit( EXIT_FAILURE );                                                   // TERMINATE
    107         } // if
     72        } // try
    10873
    10974        //yydebug = 1;
Note: See TracChangeset for help on using the changeset viewer.