OpenFPGA/libs/EXTERNAL/libtatum/libtatumparse/tatumparse/tatumparse.cpp

59 lines
1.4 KiB
C++

#include <cstdio>
#include "tatumparse.hpp"
#include "tatumparse_common.hpp"
#include "tatumparse_lexer.hpp"
#include "tatumparse_error.hpp"
namespace tatumparse {
/*
* Given a filename parses the file as an BLIF file
* and returns a pointer to a struct containing all
* the tatum commands. See tatum.h for data structure
* detials.
*/
void tatum_parse_filename(std::string filename, Callback& callback) {
tatum_parse_filename(filename.c_str(), callback);
}
void tatum_parse_filename(const char* filename, Callback& callback) {
FILE* infile = std::fopen(filename, "r");
if(infile != NULL) {
//Parse the file
tatum_parse_file(infile, callback, filename);
std::fclose(infile);
} else {
tatum_error_wrap(callback, 0, "", "Could not open file '%s'.\n", filename);
}
}
void tatum_parse_file(FILE* tatum_file, Callback& callback, const char* filename) {
//Initialize the lexer
Lexer lexer(tatum_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) {
tatum_error_wrap(callback, 0, "", "File failed to parse.\n");
}
//Finished parsing
callback.finish_parse();
}
}