#include #include "sdcparse.hpp" #include "sdc_common.hpp" #include "sdc_lexer.hpp" #include "sdc_error.hpp" namespace sdcparse { void sdc_parse_filename(std::string filename, Callback& callback) { sdc_parse_filename(filename.c_str(), callback); } void sdc_parse_filename(const char* filename, Callback& callback) { FILE* infile = std::fopen(filename, "r"); if(infile != NULL) { //Parse the file sdc_parse_file(infile, callback, filename); std::fclose(infile); } else { sdc_error_wrap(callback, 0, "", "Could not open file '%s'.\n", filename); } } void sdc_parse_file(FILE* sdc_file, Callback& callback, const char* filename) { //Initialize the lexer Lexer lexer(sdc_file, callback); //Setup the parser + lexer Parser parser(lexer, callback); //Just before parsing starts callback.start_parse(); //Tell the caller the file name callback.filename(filename); //Do the actual parse int error = parser.parse(); if(error) { sdc_error_wrap(callback, 0, "", "File '%s' failed to parse.\n", filename); } //Finished parsing callback.finish_parse(); } }