35 using namespace nmodl;
36 using namespace visitor;
37 namespace fs = std::filesystem;
53 template <
typename Visitor>
58 visitor.
v->visit_program(ast);
59 const std::string file = fmt::format(
"{}.{}.mod", mod_file, visitor.
id);
60 NmodlPrintVisitor(file).visit_program(ast);
61 logger->info(
"NMODL visitor generated {}", file);
64 int main(
int argc,
const char* argv[]) {
66 fmt::format(
"NMODL Visitor : Runs standalone visitor classes({})",
Version::to_string())};
69 std::vector<fs::path> files;
71 app.add_flag(
"-v,--verbose", verbose,
"Enable debug log level");
72 app.add_option(
"-f,--file,file", files,
"One or more MOD files to process")
74 ->check(CLI::ExistingFile);
76 CLI11_PARSE(app, argc, argv);
79 logger->set_level(spdlog::level::debug);
82 const std::vector<VisitorInfo> visitors = {
83 {std::make_shared<AstVisitor>(),
"astvis",
"AstVisitor"},
84 {std::make_shared<SymtabVisitor>(),
"symtab",
"SymtabVisitor"},
85 {std::make_shared<VerbatimVarRenameVisitor>(),
87 "VerbatimVarRenameVisitor"},
88 {std::make_shared<KineticBlockVisitor>(),
"kinetic-rewrite",
"KineticBlockVisitor"},
89 {std::make_shared<ConstantFolderVisitor>(),
"const-fold",
"ConstantFolderVisitor"},
90 {std::make_shared<InlineVisitor>(),
"inline",
"InlineVisitor"},
91 {std::make_shared<LocalVarRenameVisitor>(),
"local-rename",
"LocalVarRenameVisitor"},
92 {std::make_shared<SymtabVisitor>(),
"symtab",
"SymtabVisitor"},
93 {std::make_shared<SympyConductanceVisitor>(),
95 "SympyConductanceVisitor"},
96 {std::make_shared<SympySolverVisitor>(),
"sympy-solve",
"SympySolverVisitor"},
97 {std::make_shared<NeuronSolveVisitor>(),
"neuron-solve",
"NeuronSolveVisitor"},
101 const std::vector<ConstVisitorInfo> const_visitors = {
102 {std::make_shared<JSONVisitor>(),
"json",
"JSONVisitor"},
103 {std::make_shared<test::CheckParentVisitor>(),
"check-parent",
"CheckParentVisitor"},
104 {std::make_shared<PerfVisitor>(),
"perf",
"PerfVisitor"},
105 {std::make_shared<LocalizeVisitor>(),
"localize",
"LocalizeVisitor"},
106 {std::make_shared<VerbatimVisitor>(),
"verbatim",
"VerbatimVisitor"},
111 for (
const auto& filename: files) {
112 logger->info(
"Processing {}", filename.string());
114 const std::string mod_file = filename.stem().string();
123 for (
const auto& visitor: visitors) {
126 for (
const auto& visitor: const_visitors) {