44 std::shared_ptr<ModToken>
token;
120 return std::static_pointer_cast<Program>(shared_from_this());
127 return std::static_pointer_cast<const Program>(shared_from_this());
176 NodeVector::const_iterator
erase_node(NodeVector::const_iterator first);
181 NodeVector::const_iterator
erase_node(NodeVector::const_iterator first, NodeVector::const_iterator last);
188 size_t erase_node(std::unordered_set<Node*>& to_be_erased);
193 NodeVector::const_iterator
insert_node(NodeVector::const_iterator position,
const std::shared_ptr<Node>&
n);
198 template <
class NodeType,
class InputIterator>
199 void insert_node(NodeVector::const_iterator position, NodeType& to, InputIterator first, InputIterator last);
209 void reset_node(NodeVector::const_iterator position, std::shared_ptr<Node>
n);
314 template <
class NodeType,
class InputIterator>
315 void Program::insert_node(NodeVector::const_iterator position, NodeType& to, InputIterator first, InputIterator last) {
317 for (
auto it = first; it != last; ++it) {
322 blocks.insert(position, first, last);
Auto generated AST classes declaration.
THIS FILE IS GENERATED AT BUILD TIME AND SHALL NOT BE EDITED.
Auto generated AST classes declaration.
Represent token returned by scanner.
Base class for all AST node.
Represents top level AST node for whole NMODL input.
std::shared_ptr< ModToken > token
token with location information
void accept(visitor::Visitor &v) override
accept (or visit) the current AST node using provided visitor
void set_symbol_table(symtab::SymbolTable *newsymtab) override
Set symbol table for the current ast node.
NodeVector::const_iterator insert_node(NodeVector::const_iterator position, const std::shared_ptr< Node > &n)
Insert member to blocks.
bool is_program() const noexcept override
Check if the ast node is an instance of ast::Program.
void set_token(const ModToken &tok)
Set token for the current ast node.
std::shared_ptr< Ast > get_shared_ptr() override
Get std::shared_ptr from this pointer of the current ast node.
void reset_node(NodeVector::const_iterator position, Node *n)
Reset member to blocks.
symtab::ModelSymbolTable model_symtab
global symbol table for model
AstNodeType get_node_type() const noexcept override
Return type (ast::AstNodeType) of ast node.
NodeVector blocks
Vector of top level blocks in the mod file.
const NodeVector & get_blocks() const noexcept
Getter for member variable Program::blocks.
virtual ~Program()=default
symtab::ModelSymbolTable * get_model_symbol_table()
Return global symbol table for the mod file.
void set_parent_in_children()
Set this object as parent for all the children.
const ModToken * get_token() const noexcept override
Return associated token for the current ast node.
std::string get_node_type_name() const noexcept override
Return type (ast::AstNodeType) of ast node as std::string.
void visit_children(visitor::Visitor &v) override
visit children i.e.
void emplace_back_node(Node *n)
Add member to blocks by raw pointer.
Program * clone() const override
Return a copy of the current node.
NodeVector::const_iterator erase_node(NodeVector::const_iterator first)
Erase member to blocks.
void set_blocks(NodeVector &&blocks)
Setter for member variable Program::blocks (rvalue reference)
symtab::SymbolTable * symtab
symbol table for a block
std::shared_ptr< const Ast > get_shared_ptr() const override
Get std::shared_ptr from this pointer of the current ast node.
symtab::SymbolTable * get_symbol_table() const override
Return associated symbol table for the current ast node.
Represent symbol table for a NMODL block.
Abstract base class for all constant visitors implementation.
Abstract base class for all visitors implementation.
AstNodeType
Enum type for every AST node type.
@ PROGRAM
type of ast::Program
std::vector< std::shared_ptr< Node > > NodeVector
Abstract Syntax Tree (AST) related implementations.
int const size_t const size_t n
Base class for all Abstract Syntax Tree node types.