User Guide
constant_folder_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  *
12  * \dir
13  * \brief Visitors implementation
14  *
15  * \file
16  * \brief \copybrief nmodl::visitor::ConstantFolderVisitor
17  */
18 
19 #include <stack>
20 #include <string>
21 
22 #include "visitors/ast_visitor.hpp"
23 
24 
25 namespace nmodl {
26 namespace visitor {
27 
28 /**
29  * @addtogroup visitor_classes
30  * @{
31  */
32 
33 /**
34  * \class ConstantFolderVisitor
35  * \brief Perform constant folding of integer/float/double expressions
36  *
37  * MOD file from user could have binary expressions that could be
38  * expanded at compile time. For example, KINETIC blocks could have
39  *
40  * \code{.mod}
41  * DEFINE NANN 10
42  *
43  * KINETIC states {
44  * FROM i=0 TO NANN-2 {
45  * ....
46  * }
47  * }
48  * \endcode
49  *
50  * For passes like loop unroll, we need to evaluate `NANN-2` at
51  * compile time and this pass perform such operations.
52  */
54  public:
55  ConstantFolderVisitor() = default;
57  void visit_paren_expression(ast::ParenExpression& node) override;
58 };
59 
60 /** @} */ // end of visitor_classes
61 
62 } // namespace visitor
63 } // namespace nmodl
nmodl::visitor::ConstantFolderVisitor::visit_paren_expression
void visit_paren_expression(ast::ParenExpression &node) override
Visit parenthesis expression and simplify it.
Definition: constant_folder_visitor.cpp:78
nmodl
encapsulates code generation backend implementations
Definition: ast_common.hpp:26
nmodl::visitor::ConstantFolderVisitor::ConstantFolderVisitor
ConstantFolderVisitor()=default
nmodl::visitor::ConstantFolderVisitor
Perform constant folding of integer/float/double expressions.
Definition: constant_folder_visitor.hpp:53
nmodl::visitor::AstVisitor
Concrete visitor for all AST classes.
Definition: ast_visitor.hpp:37
nmodl::ast::ParenExpression
TODO.
Definition: paren_expression.hpp:38
nmodl::visitor::ConstantFolderVisitor::visit_wrapped_expression
void visit_wrapped_expression(ast::WrappedExpression &node) override
Visit wrapped node type and perform constant folding.
Definition: constant_folder_visitor.cpp:107
nmodl::ast::WrappedExpression
Wrap any other expression type.
Definition: wrapped_expression.hpp:38
ast_visitor.hpp
Concrete visitor for all AST classes.