source: tools/prettyprinter/main.cc@ 65deb18

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new with_gc
Last change on this file since 65deb18 was ae47a23, checked in by Peter A. Buhr <pabuhr@…>, 8 years ago

use getopt_long for pretty print, and update error message

  • Property mode set to 100644
File size: 2.9 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// main.cc --
8//
9// Author : Peter A. Buhr
10// Created On : Wed Jun 28 22:57:26 2017
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Thu Jun 29 13:09:32 2017
13// Update Count : 58
14//
15
16#include <iostream>
17#include <fstream>
18#include <string>
19using namespace std;
20#include <unistd.h> // close
21#include <getopt.h> // getopt
22#include "filter.h"
23
24extern FILE * yyin;
25extern int yydebug;
26extern int yyparse( void );
27
28bool 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
92int main( int argc, char *argv[] ) {
93 yyin = stdin; // defaults
94 filter = Nocode;
95
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"
104 << "] [input-file]"
105 << endl;
106 exit( EXIT_FAILURE ); // TERMINATE
107 } // if
108
109 //yydebug = 1;
110 yyparse();
111
112 if ( yyin != stdin ) fclose( yyin ); // close file, do not delete cin!
113} // main
114
115// Local Variables: //
116// mode: c++ //
117// tab-width: 4 //
118// compile-command: "make install" //
119// End: //
Note: See TracBrowser for help on using the repository browser.