#ifndef BLIF_PRETTY_PRINT #define BLIF_PRETTY_PRINT #include #include "blifparse.hpp" namespace blifparse { //An example callback which pretty-prints to stdout //the BLIF which is being parsed class BlifPrettyPrinter : public Callback { public: BlifPrettyPrinter(bool print_file_line=false) : print_file_line_(print_file_line) {} 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; //BLIF Extensions void conn(std::string src, std::string dst) override; void cname(std::string cell_name) override; void attr(std::string name, std::string value) override; void param(std::string name, std::string value) 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_; } private: std::string indent(); size_t indent_level_ = 0; std::string filename_ = ""; int lineno_ = 0; bool print_file_line_ = false; bool had_error_ = false; }; } #endif