C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
exprtk::lexer::helper::bracket_checker Class Reference
Inheritance diagram for exprtk::lexer::helper::bracket_checker:
[legend]
Collaboration diagram for exprtk::lexer::helper::bracket_checker:
[legend]

Public Member Functions

 bracket_checker ()
 
bool result ()
 
lexer::token error_token () const
 
void reset ()
 
bool operator() (const lexer::token &t)
 
- Public Member Functions inherited from exprtk::lexer::token_scanner
virtual ~token_scanner ()
 
 token_scanner (const std::size_t &stride)
 
std::size_t process (generator &g)
 
virtual bool operator() (const token &, const token &)
 
virtual bool operator() (const token &, const token &, const token &)
 
virtual bool operator() (const token &, const token &, const token &, const token &)
 
- Public Member Functions inherited from exprtk::lexer::helper_interface
virtual void init ()
 
virtual ~helper_interface ()
 

Private Attributes

bool state_
 
std::stack< std::pair< char, std::size_t > > stack_
 
lexer::token error_token_
 

Detailed Description

Definition at line 3771 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ bracket_checker()

exprtk::lexer::helper::bracket_checker::bracket_checker ( )
inline

Definition at line 3777 of file exprtk.hpp.

3778 : token_scanner(1)
3779 , state_(true)
3780 {}
token_scanner(const std::size_t &stride)
Definition exprtk.hpp:3173

Member Function Documentation

◆ error_token()

lexer::token exprtk::lexer::helper::bracket_checker::error_token ( ) const
inline

Definition at line 3798 of file exprtk.hpp.

3799 {
3800 return error_token_;
3801 }

References error_token_.

Referenced by exprtk::parser< T >::run_assemblies().

Here is the caller graph for this function:

◆ operator()()

bool exprtk::lexer::helper::bracket_checker::operator() ( const lexer::token t)
inlinevirtual

Reimplemented from exprtk::lexer::token_scanner.

Definition at line 3811 of file exprtk.hpp.

3812 {
3813 if (
3814 !t.value.empty() &&
3815 (lexer::token::e_string != t.type) &&
3816 (lexer::token::e_symbol != t.type) &&
3817 exprtk::details::is_bracket(t.value[0])
3818 )
3819 {
3820 details::char_t c = t.value[0];
3821
3822 if (t.type == lexer::token::e_lbracket ) stack_.push(std::make_pair(')',t.position));
3823 else if (t.type == lexer::token::e_lcrlbracket) stack_.push(std::make_pair('}',t.position));
3824 else if (t.type == lexer::token::e_lsqrbracket) stack_.push(std::make_pair(']',t.position));
3826 {
3827 if (stack_.empty())
3828 {
3829 state_ = false;
3830 error_token_ = t;
3831
3832 return false;
3833 }
3834 else if (c != stack_.top().first)
3835 {
3836 state_ = false;
3837 error_token_ = t;
3838
3839 return false;
3840 }
3841 else
3842 stack_.pop();
3843 }
3844 }
3845
3846 return true;
3847 }
std::stack< std::pair< char, std::size_t > > stack_
Definition exprtk.hpp:3852
bool is_bracket(const char_t c)
Definition exprtk.hpp:152
bool is_right_bracket(const char_t c)
Definition exprtk.hpp:147

References exprtk::lexer::token::e_lbracket, exprtk::lexer::token::e_lcrlbracket, exprtk::lexer::token::e_lsqrbracket, exprtk::lexer::token::e_string, exprtk::lexer::token::e_symbol, error_token_, exprtk::details::is_bracket(), exprtk::details::is_right_bracket(), stack_, and state_.

Here is the call graph for this function:

◆ reset()

void exprtk::lexer::helper::bracket_checker::reset ( )
inlinevirtual

Reimplemented from exprtk::lexer::helper_interface.

Definition at line 3803 of file exprtk.hpp.

3804 {
3805 // Why? because msvc doesn't support swap properly.
3806 stack_ = std::stack<std::pair<char,std::size_t> >();
3807 state_ = true;
3809 }

References exprtk::lexer::token::clear(), error_token_, stack_, and state_.

Here is the call graph for this function:

◆ result()

bool exprtk::lexer::helper::bracket_checker::result ( )
inlinevirtual

Reimplemented from exprtk::lexer::helper_interface.

Definition at line 3782 of file exprtk.hpp.

3783 {
3784 if (!stack_.empty())
3785 {
3786 lexer::token t;
3787 t.value = stack_.top().first;
3788 t.position = stack_.top().second;
3789 error_token_ = t;
3790 state_ = false;
3791
3792 return false;
3793 }
3794 else
3795 return state_;
3796 }

References error_token_, exprtk::lexer::token::position, stack_, state_, and exprtk::lexer::token::value.

Member Data Documentation

◆ error_token_

lexer::token exprtk::lexer::helper::bracket_checker::error_token_
private

Definition at line 3853 of file exprtk.hpp.

Referenced by error_token(), operator()(), reset(), and result().

◆ stack_

std::stack<std::pair<char,std::size_t> > exprtk::lexer::helper::bracket_checker::stack_
private

Definition at line 3852 of file exprtk.hpp.

Referenced by operator()(), reset(), and result().

◆ state_

bool exprtk::lexer::helper::bracket_checker::state_
private

Definition at line 3851 of file exprtk.hpp.

Referenced by operator()(), reset(), and result().


The documentation for this class was generated from the following file: