Skip to content

Commit fba05c4

Browse files
updates based on comments
1 parent bdd007a commit fba05c4

File tree

4 files changed

+34
-18
lines changed

4 files changed

+34
-18
lines changed

main.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
int
77
main(const int argc, const char **argv)
88
{
9-
if(argc != 2 ) return ( EXIT_FAILURE );
9+
if(argc != 2 )
10+
return ( EXIT_FAILURE );
1011
MC::MC_Driver driver;
1112

1213
driver.parse( argv[1] );

mc_driver.cpp

+28-14
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66

77
MC::MC_Driver::~MC_Driver(){
88
delete(scanner);
9+
scanner = nullptr;
910
delete(parser);
11+
parser = nullptr;
1012
}
1113

1214
void
@@ -17,17 +19,29 @@ MC::MC_Driver::parse( const char *filename )
1719
if( ! in_file.good() ) exit( EXIT_FAILURE );
1820

1921
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+
}
2432

2533
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+
}
3145
const int accept( 0 );
3246
if( parser->parse() != accept )
3347
{
@@ -52,16 +66,16 @@ MC::MC_Driver::add_lower()
5266
}
5367

5468
void
55-
MC::MC_Driver::add_word( const std::string &c )
69+
MC::MC_Driver::add_word( const std::string &word )
5670
{
5771
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 ) )
6175
{
6276
lowercase++;
6377
}
64-
else if ( isupper( (*it) ) )
78+
else if ( isupper( c ) )
6579
{
6680
uppercase++;
6781
}

mc_driver.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class MC_Driver{
2424

2525
void add_upper();
2626
void add_lower();
27-
void add_word( const std::string &c );
27+
void add_word( const std::string &word );
2828
void add_newline();
2929
void add_char();
3030

mc_parser.yy

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
%skeleton "lalr1.cc"
2-
%require "2.5"
2+
%require "2.7"
33
%debug
44
%defines
55
%define api.namespace {MC}
@@ -46,7 +46,8 @@
4646
%token CHAR
4747

4848

49-
%destructor { delete( $$ ); } WORD
49+
/* destructor rule for <sval> objects */
50+
%destructor { if ($$) { delete ($$); ($$) = nullptr; } } <sval>
5051

5152

5253
%%

0 commit comments

Comments
 (0)