#include #include #include #include "blifparse.hpp" #include "blif_pretty_print.hpp" using namespace blifparse; int exit_code = 0; class NoOpCallback : public Callback { //A No-op version of the callback public: void start_parse() override {} void filename(std::string /*fname*/) override {} void lineno(int /*line_num*/) override {} void begin_model(std::string /*model_name*/) override {} void inputs(std::vector /*inputs*/) override {} void outputs(std::vector /*outputs*/) override {} void names(std::vector /*nets*/, std::vector> /*so_cover*/) override {} void latch(std::string /*input*/, std::string /*output*/, LatchType /*type*/, std::string /*control*/, LogicValue /*init*/) override {} void subckt(std::string /*model*/, std::vector /*ports*/, std::vector /*nets*/) override {} void blackbox() override {} void end_model() override {} void finish_parse() override {} void parse_error(const int curr_lineno, const std::string& near_text, const std::string& msg) override { fprintf(stderr, "Custom Error at line %d near '%s': %s\n", curr_lineno, near_text.c_str(), msg.c_str()); had_error_ = true; } bool had_error() { return had_error_ = true; } private: bool had_error_ = false; }; int main(int argc, char **argv) { if(argc != 2) { fprintf(stderr, "Usage: %s filename.blif\n", argv[0]); fprintf(stderr, "\n"); fprintf(stderr, "Reads in an blif file into internal data structures\n"); fprintf(stderr, "and then prints it out\n"); exit(1); } //Parse the file blifparse::BlifPrettyPrinter callback(true); //NoOpCallback callback; blif_parse_filename(argv[1], callback); if(callback.had_error()) { return 1; } else { return 0; } }