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 ()
 
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 3715 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ bracket_checker()

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

Definition at line 3721 of file exprtk.hpp.

3722 : token_scanner(1)
3723 , state_(true)
3724 {}
token_scanner(const std::size_t &stride)
Definition exprtk.hpp:3119

Member Function Documentation

◆ error_token()

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

Definition at line 3742 of file exprtk.hpp.

3743 {
3744 return error_token_;
3745 }

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 3755 of file exprtk.hpp.

3756 {
3757 if (
3758 !t.value.empty() &&
3759 (lexer::token::e_string != t.type) &&
3760 (lexer::token::e_symbol != t.type) &&
3761 exprtk::details::is_bracket(t.value[0])
3762 )
3763 {
3764 details::char_t c = t.value[0];
3765
3766 if (t.type == lexer::token::e_lbracket ) stack_.push(std::make_pair(')',t.position));
3767 else if (t.type == lexer::token::e_lcrlbracket) stack_.push(std::make_pair('}',t.position));
3768 else if (t.type == lexer::token::e_lsqrbracket) stack_.push(std::make_pair(']',t.position));
3770 {
3771 if (stack_.empty())
3772 {
3773 state_ = false;
3774 error_token_ = t;
3775
3776 return false;
3777 }
3778 else if (c != stack_.top().first)
3779 {
3780 state_ = false;
3781 error_token_ = t;
3782
3783 return false;
3784 }
3785 else
3786 stack_.pop();
3787 }
3788 }
3789
3790 return true;
3791 }
std::stack< std::pair< char, std::size_t > > stack_
Definition exprtk.hpp:3796
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 3747 of file exprtk.hpp.

3748 {
3749 // Why? because msvc doesn't support swap properly.
3750 stack_ = std::stack<std::pair<char,std::size_t> >();
3751 state_ = true;
3753 }

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 3726 of file exprtk.hpp.

3727 {
3728 if (!stack_.empty())
3729 {
3730 lexer::token t;
3731 t.value = stack_.top().first;
3732 t.position = stack_.top().second;
3733 error_token_ = t;
3734 state_ = false;
3735
3736 return false;
3737 }
3738 else
3739 return state_;
3740 }

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 3797 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 3796 of file exprtk.hpp.

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

◆ state_

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

Definition at line 3795 of file exprtk.hpp.

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


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