User Guide
nmodl::ast::Ast Struct Referenceabstract

Base class for all Abstract Syntax Tree node types. More...

Detailed Description

Base class for all Abstract Syntax Tree node types.

Every node in the Abstract Syntax Tree is inherited from base class ast::Ast. This class provides base properties and pure virtual functions that must be implemented by base classes. We inherit from std::enable_shared_from_this to get a shared_ptr from this pointer.

Todo:
With the ast::Node as another top level node, this can be removed in the future.

Definition at line 69 of file ast.hpp.

#include <ast.hpp>

Inheritance diagram for nmodl::ast::Ast:
nmodl::ast::Node nmodl::ast::Program nmodl::ast::Expression nmodl::ast::Statement nmodl::ast::BABlockType nmodl::ast::BinaryExpression nmodl::ast::BinaryOperator nmodl::ast::Block nmodl::ast::ConstantVar nmodl::ast::DerivimplicitCallback nmodl::ast::DiffEqExpression nmodl::ast::DoubleUnit nmodl::ast::FactorDef nmodl::ast::FunctionCall nmodl::ast::Identifier nmodl::ast::Limits nmodl::ast::LinEquation nmodl::ast::LocalVar nmodl::ast::NonLinEquation nmodl::ast::Number nmodl::ast::NumberRange nmodl::ast::ParenExpression nmodl::ast::ReactionOperator nmodl::ast::SolutionExpression nmodl::ast::String nmodl::ast::UnaryExpression nmodl::ast::UnaryOperator nmodl::ast::Unit nmodl::ast::UnitDef nmodl::ast::Valence nmodl::ast::Watch nmodl::ast::WrappedExpression nmodl::ast::AssignedDefinition nmodl::ast::BbcorePointer nmodl::ast::BlockComment nmodl::ast::Compartment nmodl::ast::ConductanceHint nmodl::ast::Conserve nmodl::ast::ConstantStatement nmodl::ast::Define nmodl::ast::ElectrodeCurrent nmodl::ast::ElseIfStatement nmodl::ast::ElseStatement nmodl::ast::ExpressionStatement nmodl::ast::External nmodl::ast::FromStatement nmodl::ast::Global nmodl::ast::IfStatement nmodl::ast::Include nmodl::ast::LagStatement nmodl::ast::LineComment nmodl::ast::LocalListStatement nmodl::ast::LonDifuse nmodl::ast::Model nmodl::ast::MutexLock nmodl::ast::MutexUnlock nmodl::ast::Nonspecific nmodl::ast::OntologyStatement nmodl::ast::ParamAssign nmodl::ast::Pointer nmodl::ast::ProtectStatement nmodl::ast::RandomVarList nmodl::ast::Range nmodl::ast::ReactionStatement nmodl::ast::Suffix nmodl::ast::TableStatement nmodl::ast::ThreadSafe nmodl::ast::UnitState nmodl::ast::UpdateDt nmodl::ast::Useion nmodl::ast::Verbatim nmodl::ast::WatchStatement nmodl::ast::WhileStatement

Public Member Functions

virtual std::shared_ptr< Astget_shared_ptr ()
 get std::shared_ptr from this pointer of the AST node More...
 
virtual std::shared_ptr< const Astget_shared_ptr () const
 get std::shared_ptr from this pointer of the AST node More...
 
virtual bool is_ast () const noexcept
 Check if the ast node is an instance of ast::Ast. More...
 
virtual bool is_node () const noexcept
 Check if the ast node is an instance of ast::Node. More...
 
virtual bool is_statement () const noexcept
 Check if the ast node is an instance of ast::Statement. More...
 
virtual bool is_expression () const noexcept
 Check if the ast node is an instance of ast::Expression. More...
 
virtual bool is_block () const noexcept
 Check if the ast node is an instance of ast::Block. More...
 
virtual bool is_identifier () const noexcept
 Check if the ast node is an instance of ast::Identifier. More...
 
virtual bool is_number () const noexcept
 Check if the ast node is an instance of ast::Number. More...
 
virtual bool is_string () const noexcept
 Check if the ast node is an instance of ast::String. More...
 
virtual bool is_integer () const noexcept
 Check if the ast node is an instance of ast::Integer. More...
 
virtual bool is_float () const noexcept
 Check if the ast node is an instance of ast::Float. More...
 
virtual bool is_double () const noexcept
 Check if the ast node is an instance of ast::Double. More...
 
virtual bool is_boolean () const noexcept
 Check if the ast node is an instance of ast::Boolean. More...
 
virtual bool is_name () const noexcept
 Check if the ast node is an instance of ast::Name. More...
 
virtual bool is_prime_name () const noexcept
 Check if the ast node is an instance of ast::PrimeName. More...
 
virtual bool is_indexed_name () const noexcept
 Check if the ast node is an instance of ast::IndexedName. More...
 
virtual bool is_var_name () const noexcept
 Check if the ast node is an instance of ast::VarName. More...
 
virtual bool is_argument () const noexcept
 Check if the ast node is an instance of ast::Argument. More...
 
virtual bool is_react_var_name () const noexcept
 Check if the ast node is an instance of ast::ReactVarName. More...
 
virtual bool is_read_ion_var () const noexcept
 Check if the ast node is an instance of ast::ReadIonVar. More...
 
virtual bool is_write_ion_var () const noexcept
 Check if the ast node is an instance of ast::WriteIonVar. More...
 
virtual bool is_nonspecific_cur_var () const noexcept
 Check if the ast node is an instance of ast::NonspecificCurVar. More...
 
virtual bool is_electrode_cur_var () const noexcept
 Check if the ast node is an instance of ast::ElectrodeCurVar. More...
 
virtual bool is_range_var () const noexcept
 Check if the ast node is an instance of ast::RangeVar. More...
 
virtual bool is_global_var () const noexcept
 Check if the ast node is an instance of ast::GlobalVar. More...
 
virtual bool is_pointer_var () const noexcept
 Check if the ast node is an instance of ast::PointerVar. More...
 
virtual bool is_random_var () const noexcept
 Check if the ast node is an instance of ast::RandomVar. More...
 
virtual bool is_bbcore_pointer_var () const noexcept
 Check if the ast node is an instance of ast::BbcorePointerVar. More...
 
virtual bool is_extern_var () const noexcept
 Check if the ast node is an instance of ast::ExternVar. More...
 
virtual bool is_param_block () const noexcept
 Check if the ast node is an instance of ast::ParamBlock. More...
 
virtual bool is_independent_block () const noexcept
 Check if the ast node is an instance of ast::IndependentBlock. More...
 
virtual bool is_assigned_block () const noexcept
 Check if the ast node is an instance of ast::AssignedBlock. More...
 
virtual bool is_state_block () const noexcept
 Check if the ast node is an instance of ast::StateBlock. More...
 
virtual bool is_initial_block () const noexcept
 Check if the ast node is an instance of ast::InitialBlock. More...
 
virtual bool is_constructor_block () const noexcept
 Check if the ast node is an instance of ast::ConstructorBlock. More...
 
virtual bool is_destructor_block () const noexcept
 Check if the ast node is an instance of ast::DestructorBlock. More...
 
virtual bool is_statement_block () const noexcept
 Check if the ast node is an instance of ast::StatementBlock. More...
 
virtual bool is_derivative_block () const noexcept
 Check if the ast node is an instance of ast::DerivativeBlock. More...
 
virtual bool is_linear_block () const noexcept
 Check if the ast node is an instance of ast::LinearBlock. More...
 
virtual bool is_non_linear_block () const noexcept
 Check if the ast node is an instance of ast::NonLinearBlock. More...
 
virtual bool is_discrete_block () const noexcept
 Check if the ast node is an instance of ast::DiscreteBlock. More...
 
virtual bool is_function_table_block () const noexcept
 Check if the ast node is an instance of ast::FunctionTableBlock. More...
 
virtual bool is_function_block () const noexcept
 Check if the ast node is an instance of ast::FunctionBlock. More...
 
virtual bool is_procedure_block () const noexcept
 Check if the ast node is an instance of ast::ProcedureBlock. More...
 
virtual bool is_net_receive_block () const noexcept
 Check if the ast node is an instance of ast::NetReceiveBlock. More...
 
virtual bool is_solve_block () const noexcept
 Check if the ast node is an instance of ast::SolveBlock. More...
 
virtual bool is_breakpoint_block () const noexcept
 Check if the ast node is an instance of ast::BreakpointBlock. More...
 
virtual bool is_before_block () const noexcept
 Check if the ast node is an instance of ast::BeforeBlock. More...
 
virtual bool is_after_block () const noexcept
 Check if the ast node is an instance of ast::AfterBlock. More...
 
virtual bool is_ba_block () const noexcept
 Check if the ast node is an instance of ast::BABlock. More...
 
virtual bool is_for_netcon () const noexcept
 Check if the ast node is an instance of ast::ForNetcon. More...
 
virtual bool is_kinetic_block () const noexcept
 Check if the ast node is an instance of ast::KineticBlock. More...
 
virtual bool is_unit_block () const noexcept
 Check if the ast node is an instance of ast::UnitBlock. More...
 
virtual bool is_constant_block () const noexcept
 Check if the ast node is an instance of ast::ConstantBlock. More...
 
virtual bool is_neuron_block () const noexcept
 Check if the ast node is an instance of ast::NeuronBlock. More...
 
virtual bool is_unit () const noexcept
 Check if the ast node is an instance of ast::Unit. More...
 
virtual bool is_double_unit () const noexcept
 Check if the ast node is an instance of ast::DoubleUnit. More...
 
virtual bool is_local_var () const noexcept
 Check if the ast node is an instance of ast::LocalVar. More...
 
virtual bool is_limits () const noexcept
 Check if the ast node is an instance of ast::Limits. More...
 
virtual bool is_number_range () const noexcept
 Check if the ast node is an instance of ast::NumberRange. More...
 
virtual bool is_constant_var () const noexcept
 Check if the ast node is an instance of ast::ConstantVar. More...
 
virtual bool is_binary_operator () const noexcept
 Check if the ast node is an instance of ast::BinaryOperator. More...
 
virtual bool is_unary_operator () const noexcept
 Check if the ast node is an instance of ast::UnaryOperator. More...
 
virtual bool is_reaction_operator () const noexcept
 Check if the ast node is an instance of ast::ReactionOperator. More...
 
virtual bool is_paren_expression () const noexcept
 Check if the ast node is an instance of ast::ParenExpression. More...
 
virtual bool is_binary_expression () const noexcept
 Check if the ast node is an instance of ast::BinaryExpression. More...
 
virtual bool is_diff_eq_expression () const noexcept
 Check if the ast node is an instance of ast::DiffEqExpression. More...
 
virtual bool is_unary_expression () const noexcept
 Check if the ast node is an instance of ast::UnaryExpression. More...
 
virtual bool is_non_lin_equation () const noexcept
 Check if the ast node is an instance of ast::NonLinEquation. More...
 
virtual bool is_lin_equation () const noexcept
 Check if the ast node is an instance of ast::LinEquation. More...
 
virtual bool is_function_call () const noexcept
 Check if the ast node is an instance of ast::FunctionCall. More...
 
virtual bool is_watch () const noexcept
 Check if the ast node is an instance of ast::Watch. More...
 
virtual bool is_ba_block_type () const noexcept
 Check if the ast node is an instance of ast::BABlockType. More...
 
virtual bool is_unit_def () const noexcept
 Check if the ast node is an instance of ast::UnitDef. More...
 
virtual bool is_factor_def () const noexcept
 Check if the ast node is an instance of ast::FactorDef. More...
 
virtual bool is_valence () const noexcept
 Check if the ast node is an instance of ast::Valence. More...
 
virtual bool is_unit_state () const noexcept
 Check if the ast node is an instance of ast::UnitState. More...
 
virtual bool is_local_list_statement () const noexcept
 Check if the ast node is an instance of ast::LocalListStatement. More...
 
virtual bool is_model () const noexcept
 Check if the ast node is an instance of ast::Model. More...
 
virtual bool is_define () const noexcept
 Check if the ast node is an instance of ast::Define. More...
 
virtual bool is_include () const noexcept
 Check if the ast node is an instance of ast::Include. More...
 
virtual bool is_param_assign () const noexcept
 Check if the ast node is an instance of ast::ParamAssign. More...
 
virtual bool is_assigned_definition () const noexcept
 Check if the ast node is an instance of ast::AssignedDefinition. More...
 
virtual bool is_conductance_hint () const noexcept
 Check if the ast node is an instance of ast::ConductanceHint. More...
 
virtual bool is_expression_statement () const noexcept
 Check if the ast node is an instance of ast::ExpressionStatement. More...
 
virtual bool is_protect_statement () const noexcept
 Check if the ast node is an instance of ast::ProtectStatement. More...
 
virtual bool is_from_statement () const noexcept
 Check if the ast node is an instance of ast::FromStatement. More...
 
virtual bool is_while_statement () const noexcept
 Check if the ast node is an instance of ast::WhileStatement. More...
 
virtual bool is_if_statement () const noexcept
 Check if the ast node is an instance of ast::IfStatement. More...
 
virtual bool is_else_if_statement () const noexcept
 Check if the ast node is an instance of ast::ElseIfStatement. More...
 
virtual bool is_else_statement () const noexcept
 Check if the ast node is an instance of ast::ElseStatement. More...
 
virtual bool is_watch_statement () const noexcept
 Check if the ast node is an instance of ast::WatchStatement. More...
 
virtual bool is_mutex_lock () const noexcept
 Check if the ast node is an instance of ast::MutexLock. More...
 
virtual bool is_mutex_unlock () const noexcept
 Check if the ast node is an instance of ast::MutexUnlock. More...
 
virtual bool is_conserve () const noexcept
 Check if the ast node is an instance of ast::Conserve. More...
 
virtual bool is_compartment () const noexcept
 Check if the ast node is an instance of ast::Compartment. More...
 
virtual bool is_lon_difuse () const noexcept
 Check if the ast node is an instance of ast::LonDifuse. More...
 
virtual bool is_reaction_statement () const noexcept
 Check if the ast node is an instance of ast::ReactionStatement. More...
 
virtual bool is_lag_statement () const noexcept
 Check if the ast node is an instance of ast::LagStatement. More...
 
virtual bool is_constant_statement () const noexcept
 Check if the ast node is an instance of ast::ConstantStatement. More...
 
virtual bool is_table_statement () const noexcept
 Check if the ast node is an instance of ast::TableStatement. More...
 
virtual bool is_suffix () const noexcept
 Check if the ast node is an instance of ast::Suffix. More...
 
virtual bool is_useion () const noexcept
 Check if the ast node is an instance of ast::Useion. More...
 
virtual bool is_nonspecific () const noexcept
 Check if the ast node is an instance of ast::Nonspecific. More...
 
virtual bool is_electrode_current () const noexcept
 Check if the ast node is an instance of ast::ElectrodeCurrent. More...
 
virtual bool is_range () const noexcept
 Check if the ast node is an instance of ast::Range. More...
 
virtual bool is_global () const noexcept
 Check if the ast node is an instance of ast::Global. More...
 
virtual bool is_random_var_list () const noexcept
 Check if the ast node is an instance of ast::RandomVarList. More...
 
virtual bool is_pointer () const noexcept
 Check if the ast node is an instance of ast::Pointer. More...
 
virtual bool is_bbcore_pointer () const noexcept
 Check if the ast node is an instance of ast::BbcorePointer. More...
 
virtual bool is_external () const noexcept
 Check if the ast node is an instance of ast::External. More...
 
virtual bool is_thread_safe () const noexcept
 Check if the ast node is an instance of ast::ThreadSafe. More...
 
virtual bool is_verbatim () const noexcept
 Check if the ast node is an instance of ast::Verbatim. More...
 
virtual bool is_line_comment () const noexcept
 Check if the ast node is an instance of ast::LineComment. More...
 
virtual bool is_block_comment () const noexcept
 Check if the ast node is an instance of ast::BlockComment. More...
 
virtual bool is_ontology_statement () const noexcept
 Check if the ast node is an instance of ast::OntologyStatement. More...
 
virtual bool is_program () const noexcept
 Check if the ast node is an instance of ast::Program. More...
 
virtual bool is_nrn_state_block () const noexcept
 Check if the ast node is an instance of ast::NrnStateBlock. More...
 
virtual bool is_eigen_newton_solver_block () const noexcept
 Check if the ast node is an instance of ast::EigenNewtonSolverBlock. More...
 
virtual bool is_eigen_linear_solver_block () const noexcept
 Check if the ast node is an instance of ast::EigenLinearSolverBlock. More...
 
virtual bool is_wrapped_expression () const noexcept
 Check if the ast node is an instance of ast::WrappedExpression. More...
 
virtual bool is_derivimplicit_callback () const noexcept
 Check if the ast node is an instance of ast::DerivimplicitCallback. More...
 
virtual bool is_solution_expression () const noexcept
 Check if the ast node is an instance of ast::SolutionExpression. More...
 
virtual bool is_update_dt () const noexcept
 Check if the ast node is an instance of ast::UpdateDt. More...
 
virtual Astget_parent () const
 Parent getter. More...
 
virtual void set_parent (Ast *p)
 Parent setter. More...
 
Ctor & dtor
 Ast ()=default
 
virtual ~Ast ()=default
 
Pure Virtual Functions
virtual AstNodeType get_node_type () const =0
 Return type (ast::AstNodeType) of AST node. More...
 
virtual std::string get_node_type_name () const =0
 Return type (ast::AstNodeType) of ast node as std::string. More...
 
virtual std::string get_nmodl_name () const
 Return NMODL statement of ast node as std::string. More...
 
virtual void accept (visitor::Visitor &v)=0
 Accept (or visit) the AST node using current visitor. More...
 
virtual void accept (visitor::ConstVisitor &v) const =0
 Accept (or visit) the AST node using a given visitor. More...
 
virtual void visit_children (visitor::Visitor &v)=0
 Visit children i.e. More...
 
virtual void visit_children (visitor::ConstVisitor &v) const =0
 Visit children i.e. More...
 
virtual Astclone () const
 Create a copy of the current node. More...
 
Not implemented
virtual std::string get_node_name () const
 Return name of of the node. More...
 
virtual const ModTokenget_token () const
 Return associated token for the AST node. More...
 
virtual symtab::SymbolTableget_symbol_table () const
 Return associated symbol table for the AST node. More...
 
virtual std::shared_ptr< StatementBlockget_statement_block () const
 Return associated statement block for the AST node. More...
 
virtual void set_symbol_table (symtab::SymbolTable *symtab)
 Set symbol table for the AST node. More...
 
virtual void set_name (const std::string &name)
 Set name for the AST node. More...
 
virtual void negate ()
 Negate the value of AST node. More...
 

Private Attributes

Astparent = nullptr
 Generic pointer to the parent. More...
 

The documentation for this struct was generated from the following files: