diff --git a/Parser.cc b/Parser.cc index 41efa70..08a652d 100644 --- a/Parser.cc +++ b/Parser.cc @@ -1,8 +1,17 @@ #include "Parser.h" +#include +#include using namespace std; Parser::Parser() { } + +void Parser::write(const string & fname) +{ + ofstream ofs(fname.c_str()); + ofs << "Content goes here" << endl; + ofs.close(); +} diff --git a/Parser.h b/Parser.h index eee88d9..72b84e8 100644 --- a/Parser.h +++ b/Parser.h @@ -3,6 +3,7 @@ #define PARSER_H #include +#include #include "refptr/refptr.h" #include "TokenDefinition.h" @@ -20,6 +21,7 @@ class Parser { m_rules.push_back(rd); } + void write(const std::string & fname); protected: std::vector< refptr< TokenDefinition > > m_tokens; diff --git a/imbecile.cc b/imbecile.cc index 9eee2ed..daff482 100644 --- a/imbecile.cc +++ b/imbecile.cc @@ -1,17 +1,19 @@ +#include + #include #include -#include -#include + #include "refptr/refptr.h" #include "parse-input.h" + using namespace std; int main(int argc, char * argv[]) { int longind = 1; int opt; - const char * output_fname = ""; + string output_fname; static struct option longopts[] = { /* name, has_arg, flag, val */ @@ -29,8 +31,9 @@ int main(int argc, char * argv[]) } } + string input_fname = argv[optind]; ifstream ifs; - ifs.open(argv[optind], ios::binary); + ifs.open(input_fname.c_str(), ios::binary); if (!ifs.is_open()) { cerr << "Error opening input file: '" << argv[optind] << "'"; @@ -41,12 +44,26 @@ int main(int argc, char * argv[]) ifs.seekg(0, ios_base::beg); char * buff = new char[size]; ifs.read(buff, size); + ifs.close(); Parser p; parse_input(buff, size, p); - ifs.close(); + if (output_fname == "") + { + size_t len = input_fname.length(); + if (len > 2 && input_fname.substr(len - 2) == ".I") + { + output_fname = input_fname.substr(0, len - 2) + ".cc"; + } + else + { + output_fname = input_fname + ".cc"; + } + } + p.write(output_fname); + delete[] buff; return 0; }