6
6
7
7
MC::MC_Driver::~MC_Driver (){
8
8
delete (scanner);
9
+ scanner = nullptr ;
9
10
delete (parser);
11
+ parser = nullptr ;
10
12
}
11
13
12
14
void
@@ -17,17 +19,29 @@ MC::MC_Driver::parse( const char *filename )
17
19
if ( ! in_file.good () ) exit ( EXIT_FAILURE );
18
20
19
21
delete (scanner);
20
- scanner = nullptr ;
21
- scanner = new MC::MC_Scanner ( &in_file );
22
- /* check to see if its initialized */
23
- assert ( scanner != nullptr );
22
+ try
23
+ {
24
+ scanner = new MC::MC_Scanner ( &in_file );
25
+ }
26
+ catch ( std::bad_alloc &ba )
27
+ {
28
+ std::cerr << " Failed to allocate scanner: (" <<
29
+ ba.what () << " ), exiting!!\n " ;
30
+ exit ( EXIT_FAILURE );
31
+ }
24
32
25
33
delete (parser);
26
- parser = nullptr ;
27
- parser = new MC::MC_Parser ( (*scanner) /* scanner */ ,
28
- (*this ) /* driver */ );
29
- assert ( parser != nullptr );
30
-
34
+ try
35
+ {
36
+ parser = new MC::MC_Parser ( (*scanner) /* scanner */ ,
37
+ (*this ) /* driver */ );
38
+ }
39
+ catch ( std::bad_alloc &ba )
40
+ {
41
+ std::cerr << " Failed to allocate parser: (" <<
42
+ ba.what () << " ), exiting!!\n " ;
43
+ exit ( EXIT_FAILURE );
44
+ }
31
45
const int accept ( 0 );
32
46
if ( parser->parse () != accept )
33
47
{
@@ -52,16 +66,16 @@ MC::MC_Driver::add_lower()
52
66
}
53
67
54
68
void
55
- MC::MC_Driver::add_word ( const std::string &c )
69
+ MC::MC_Driver::add_word ( const std::string &word )
56
70
{
57
71
words++;
58
- chars += c .length ();
59
- for (auto it (c. begin ()); it != c. end (); ++it ){
60
- if ( islower ( (*it) ) )
72
+ chars += word .length ();
73
+ for (const char &c : word ){
74
+ if ( islower ( c ) )
61
75
{
62
76
lowercase++;
63
77
}
64
- else if ( isupper ( (*it) ) )
78
+ else if ( isupper ( c ) )
65
79
{
66
80
uppercase++;
67
81
}
0 commit comments