User Guide
block_comment.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
///
9
/// THIS FILE IS GENERATED AT BUILD TIME AND SHALL NOT BE EDITED.
10
///
11
12
#pragma once
13
14
/**
15
* \dir
16
* \brief Auto generated AST Implementations
17
*
18
* \file
19
* \brief Auto generated AST classes declaration
20
*/
21
22
#include "
ast/ast_decl.hpp
"
23
#include "
ast/statement.hpp
"
24
25
namespace
nmodl::ast
{
26
27
/**
28
* \addtogroup ast_class
29
* \ingroup ast
30
* \{
31
*/
32
33
/**
34
* \brief Represents a multi-line comment in NMODL
35
*
36
*
37
*/
38
class
BlockComment
:
public
Statement
{
39
private
:
40
/// comment text
41
std::shared_ptr<String>
statement
;
42
/// token with location information
43
std::shared_ptr<ModToken>
token
;
44
45
public
:
46
/// \name Ctor & dtor
47
/// \{
48
explicit
BlockComment
(
String
*
statement
);
49
explicit
BlockComment
(std::shared_ptr<String>
statement
);
50
BlockComment
(
const
BlockComment
& obj);
51
virtual
~BlockComment
() =
default
;
52
/// \}
53
54
/**
55
* \brief Check if the ast node is an instance of ast::BlockComment
56
* \return true as object is of type ast::BlockComment
57
*/
58
bool
is_block_comment
() const noexcept
override
{
59
return
true
;
60
}
61
62
/**
63
* \brief Return a copy of the current node
64
*
65
* Recursively make a new copy/clone of the current node including
66
* all members and return a pointer to the node. This is used for
67
* passes like nmodl::visitor::InlineVisitor where nodes are cloned in the
68
* ast.
69
*
70
* \return pointer to the clone/copy of the current node
71
*/
72
// NOLINTBEGIN(clang-analyzer-cplusplus.NewDeleteLeaks)
73
BlockComment
*
clone
()
const override
{
74
return
new
BlockComment
(*
this
);
75
}
76
// NOLINTEND(clang-analyzer-cplusplus.NewDeleteLeaks)
77
78
/// \name Getters
79
/// \{
80
81
/**
82
* \brief Return type (ast::AstNodeType) of ast node
83
*
84
* Every node in the ast has a type defined in ast::AstNodeType and this
85
* function is used to retrieve the same.
86
*
87
* \return ast node type i.e. ast::AstNodeType::BLOCK_COMMENT
88
*
89
* \sa Ast::get_node_type_name
90
*/
91
AstNodeType
get_node_type
() const noexcept
override
{
92
return
AstNodeType::BLOCK_COMMENT
;
93
}
94
95
/**
96
* \brief Return type (ast::AstNodeType) of ast node as std::string
97
*
98
* Every node in the ast has a type defined in ast::AstNodeType.
99
* This type name can be returned as a std::string for printing
100
* node to text/json form.
101
*
102
* \return name of the node type as a string i.e. "BlockComment"
103
*
104
* \sa Ast::get_node_name
105
*/
106
std::string
get_node_type_name
() const noexcept
override
{
107
return
"BlockComment"
;
108
}
109
110
/**
111
* \brief Return NMODL statement of ast node as std::string
112
*
113
* Every node is related to a special statement in the NMODL. This
114
* statement can be returned as a std::string for printing to
115
* text/json form.
116
*
117
* \return name of the statement as a string i.e. "COMMENT"
118
*
119
* \sa Ast::get_nmodl_name
120
*/
121
std::string
get_nmodl_name
() const noexcept
override
{
122
return
"COMMENT"
;
123
}
124
125
/**
126
* \brief Get std::shared_ptr from `this` pointer of the current ast node
127
*/
128
std::shared_ptr<Ast>
get_shared_ptr
()
override
{
129
return
std::static_pointer_cast<BlockComment>(shared_from_this());
130
}
131
132
/**
133
* \brief Get std::shared_ptr from `this` pointer of the current ast node
134
*/
135
std::shared_ptr<const Ast>
get_shared_ptr
()
const override
{
136
return
std::static_pointer_cast<const BlockComment>(shared_from_this());
137
}
138
139
/**
140
* \brief Return associated token for the current ast node
141
*
142
* Not all ast nodes have token information. For example, nmodl::visitor::NeuronSolveVisitor
143
* can insert new nodes in the ast as a solution of ODEs. In this case, we return
144
* nullptr to store in the nmodl::symtab::SymbolTable.
145
*
146
* \return pointer to token if exist otherwise nullptr
147
*/
148
const
ModToken
*
get_token
() const noexcept
override
{
149
return
token
.get();
150
}
151
152
153
154
/**
155
* \brief Getter for member variable \ref BlockComment.statement
156
*/
157
std::shared_ptr<String>
get_statement
() const noexcept {
158
return
statement
;
159
}
160
/// \}
161
162
/// \name Setters
163
/// \{
164
/**
165
* \brief Set token for the current ast node
166
*/
167
void
set_token
(
const
ModToken
& tok) {
token
= std::make_shared<ModToken>(tok); }
168
169
/**
170
* \brief Setter for member variable \ref BlockComment.statement (rvalue reference)
171
*/
172
void
set_statement
(std::shared_ptr<String>&&
statement
);
173
174
/**
175
* \brief Setter for member variable \ref BlockComment.statement
176
*/
177
void
set_statement
(
const
std::shared_ptr<String>&
statement
);
178
179
/// \}
180
181
/// \name Visitor
182
/// \{
183
/**
184
* \brief visit children i.e. member variables of current node using provided visitor
185
*
186
* Different nodes in the AST have different members (i.e. children). This method
187
* recursively visits children using provided visitor.
188
*
189
* \param v Concrete visitor that will be used to recursively visit children
190
*
191
* \sa Ast::visit_children for example.
192
*/
193
void
visit_children
(
visitor::Visitor
& v)
override
;
194
195
/**
196
* \brief visit children i.e. member variables of current node using provided visitor
197
*
198
* Different nodes in the AST have different members (i.e. children). This method
199
* recursively visits children using provided visitor.
200
*
201
* \param v Concrete constant visitor that will be used to recursively visit children
202
*
203
* \sa Ast::visit_children for example.
204
*/
205
void
visit_children
(
visitor::ConstVisitor
& v)
const override
;
206
207
/**
208
* \brief accept (or visit) the current AST node using provided visitor
209
*
210
* Instead of visiting children of AST node, like Ast::visit_children,
211
* accept allows to visit the current node itself using provided concrete
212
* visitor.
213
*
214
* \param v Concrete visitor that will be used to recursively visit node
215
*
216
* \sa Ast::accept for example.
217
*/
218
void
accept
(
visitor::Visitor
& v)
override
;
219
220
/**
221
* \copydoc accept(visitor::Visitor&)
222
*/
223
void
accept
(
visitor::ConstVisitor
& v)
const override
;
224
/// \}
225
226
private
:
227
/**
228
* \brief Set this object as parent for all the children
229
*
230
* This should be called in every object (with children) constructor
231
* to set parents. Since it is called only in the constructors it
232
* should not be virtual to avoid ambiguities (issue #295).
233
*/
234
void
set_parent_in_children
();
235
};
236
237
/** \} */
// end of ast_class
238
239
240
241
}
// namespace nmodl::ast
nmodl::visitor::ConstVisitor
Abstract base class for all constant visitors implementation.
Definition:
visitor.hpp:302
nmodl::ast::BlockComment
Represents a multi-line comment in NMODL.
Definition:
block_comment.hpp:38
nmodl::ast::BlockComment::~BlockComment
virtual ~BlockComment()=default
nmodl::ast::BlockComment::get_token
const ModToken * get_token() const noexcept override
Return associated token for the current ast node.
Definition:
block_comment.hpp:148
ast_decl.hpp
THIS FILE IS GENERATED AT BUILD TIME AND SHALL NOT BE EDITED.
nmodl::ast::BlockComment::get_shared_ptr
std::shared_ptr< Ast > get_shared_ptr() override
Get std::shared_ptr from this pointer of the current ast node.
Definition:
block_comment.hpp:128
nmodl::ast
Abstract Syntax Tree (AST) related implementations.
Definition:
ast_common.hpp:29
nmodl::ast::BlockComment::set_token
void set_token(const ModToken &tok)
Set token for the current ast node.
Definition:
block_comment.hpp:167
nmodl::ast::AstNodeType::BLOCK_COMMENT
@ BLOCK_COMMENT
type of ast::BlockComment
nmodl::ast::AstNodeType
AstNodeType
Enum type for every AST node type.
Definition:
ast_decl.hpp:166
statement.hpp
Auto generated AST classes declaration.
nmodl::ast::BlockComment::statement
std::shared_ptr< String > statement
comment text
Definition:
block_comment.hpp:41
nmodl::ast::BlockComment::get_statement
std::shared_ptr< String > get_statement() const noexcept
Getter for member variable BlockComment::statement.
Definition:
block_comment.hpp:157
nmodl::ast::BlockComment::get_node_type_name
std::string get_node_type_name() const noexcept override
Return type (ast::AstNodeType) of ast node as std::string.
Definition:
block_comment.hpp:106
nmodl::visitor::Visitor
Abstract base class for all visitors implementation.
Definition:
visitor.hpp:39
nmodl::ast::BlockComment::get_nmodl_name
std::string get_nmodl_name() const noexcept override
Return NMODL statement of ast node as std::string.
Definition:
block_comment.hpp:121
nmodl::ast::BlockComment::get_node_type
AstNodeType get_node_type() const noexcept override
Return type (ast::AstNodeType) of ast node.
Definition:
block_comment.hpp:91
nmodl::ast::BlockComment::BlockComment
BlockComment(String *statement)
Definition:
ast.cpp:12674
nmodl::ast::BlockComment::is_block_comment
bool is_block_comment() const noexcept override
Check if the ast node is an instance of ast::BlockComment.
Definition:
block_comment.hpp:58
nmodl::ast::Statement
TODO.
Definition:
statement.hpp:38
nmodl::ast::BlockComment::get_shared_ptr
std::shared_ptr< const Ast > get_shared_ptr() const override
Get std::shared_ptr from this pointer of the current ast node.
Definition:
block_comment.hpp:135
nmodl::ast::BlockComment::set_statement
void set_statement(std::shared_ptr< String > &&statement)
Setter for member variable BlockComment::statement (rvalue reference)
Definition:
ast.cpp:12711
nmodl::ast::BlockComment::visit_children
void visit_children(visitor::Visitor &v) override
visit children i.e.
Definition:
ast.cpp:12653
nmodl::ast::BlockComment::clone
BlockComment * clone() const override
Return a copy of the current node.
Definition:
block_comment.hpp:73
nmodl::ast::BlockComment::accept
void accept(visitor::Visitor &v) override
accept (or visit) the current AST node using provided visitor
Definition:
ast.cpp:12665
nmodl::ast::BlockComment::token
std::shared_ptr< ModToken > token
token with location information
Definition:
block_comment.hpp:43
nmodl::ast::BlockComment::set_parent_in_children
void set_parent_in_children()
Set this object as parent for all the children.
Definition:
ast.cpp:12700
nmodl::ModToken
Represent token returned by scanner.
Definition:
modtoken.hpp:50
nmodl::ast::String
Represents a string.
Definition:
string.hpp:52
public
build
src
ast
block_comment.hpp