User Guide
verbatim_visitor.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2023 Blue Brain Project, EPFL.
3  * See the top-level LICENSE file for details.
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 #pragma once
9 
10 /**
11  * \file
12  * \brief \copybrief nmodl::visitor::VerbatimVisitor
13  */
14 
15 #include <vector>
16 
17 #include "ast/ast.hpp"
18 #include "visitors/ast_visitor.hpp"
19 
20 namespace nmodl {
21 namespace visitor {
22 
23 /**
24  * @addtogroup visitor_classes
25  * @{
26  */
27 
28 /**
29  * \class VerbatimVisitor
30  * \brief %Visitor for verbatim blocks of AST
31  *
32  * This is simple example of visitor that uses base AstVisitor
33  * interface. We override visitVerbatim method and store all
34  * verbatim blocks that we encounter. This could be used for
35  * generating report of all verbatim blocks from all mod files
36  * in ModelDB.
37  */
39  private:
40  /// flag to enable/disable printing blocks as we visit them
41  bool verbose = false;
42 
43  /// vector containing all verbatim blocks
44  std::vector<std::string> blocks;
45 
46  public:
47  VerbatimVisitor() = default;
48 
49  explicit VerbatimVisitor(bool verbose) {
50  this->verbose = verbose;
51  }
52 
53  void visit_verbatim(const ast::Verbatim& node) override;
54 
55  const std::vector<std::string>& verbatim_blocks() const noexcept {
56  return blocks;
57  }
58 };
59 
60 /** @} */ // end of visitor_classes
61 
62 } // namespace visitor
63 } // namespace nmodl
nmodl::ast::Verbatim
Represents a C code block.
Definition: verbatim.hpp:38
nmodl::visitor::VerbatimVisitor::visit_verbatim
void visit_verbatim(const ast::Verbatim &node) override
visit node of type ast::Verbatim
Definition: verbatim_visitor.cpp:18
nmodl::visitor::ConstAstVisitor
Concrete constant visitor for all AST classes.
Definition: ast_visitor.hpp:166
nmodl::visitor::VerbatimVisitor::blocks
std::vector< std::string > blocks
vector containing all verbatim blocks
Definition: verbatim_visitor.hpp:44
nmodl
encapsulates code generation backend implementations
Definition: ast_common.hpp:26
nmodl::visitor::VerbatimVisitor::VerbatimVisitor
VerbatimVisitor()=default
nmodl::visitor::VerbatimVisitor::verbose
bool verbose
flag to enable/disable printing blocks as we visit them
Definition: verbatim_visitor.hpp:41
nmodl::visitor::VerbatimVisitor
Visitor for verbatim blocks of AST
Definition: verbatim_visitor.hpp:38
nmodl::visitor::VerbatimVisitor::verbatim_blocks
const std::vector< std::string > & verbatim_blocks() const noexcept
Definition: verbatim_visitor.hpp:55
ast.hpp
Auto generated AST classes declaration.
nmodl::visitor::VerbatimVisitor::VerbatimVisitor
VerbatimVisitor(bool verbose)
Definition: verbatim_visitor.hpp:49
ast_visitor.hpp
Concrete visitor for all AST classes.