C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
exprtk::lexer::helper::bracket_checker Class Reference

#include <exprtk.hpp>

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)
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::token_scanner
virtual ~token_scanner ()
 token_scanner (const std::size_t &stride)
std::size_t process (generator &g)
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 3779 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ bracket_checker()

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

Definition at line 3785 of file exprtk.hpp.

3786 : token_scanner(1)
3787 , state_(true)
3788 {}
token_scanner(const std::size_t &stride)
Definition exprtk.hpp:3181

References state_, and exprtk::lexer::token_scanner::token_scanner().

Here is the call graph for this function:

Member Function Documentation

◆ error_token()

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

Definition at line 3806 of file exprtk.hpp.

3807 {
3808 return error_token_;
3809 }

References error_token_.

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

Here is the caller graph for this function:

◆ operator()() [1/4]

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

Reimplemented from exprtk::lexer::token_scanner.

Definition at line 3819 of file exprtk.hpp.

3820 {
3821 if (
3822 !t.value.empty() &&
3823 (lexer::token::e_string != t.type) &&
3824 (lexer::token::e_symbol != t.type) &&
3825 exprtk::details::is_bracket(t.value[0])
3826 )
3827 {
3828 details::char_t c = t.value[0];
3829
3830 if (t.type == lexer::token::e_lbracket ) stack_.push(std::make_pair(')',t.position));
3831 else if (t.type == lexer::token::e_lcrlbracket) stack_.push(std::make_pair('}',t.position));
3832 else if (t.type == lexer::token::e_lsqrbracket) stack_.push(std::make_pair(']',t.position));
3834 {
3835 if (stack_.empty())
3836 {
3837 state_ = false;
3838 error_token_ = t;
3839
3840 return false;
3841 }
3842 else if (c != stack_.top().first)
3843 {
3844 state_ = false;
3845 error_token_ = t;
3846
3847 return false;
3848 }
3849 else
3850 stack_.pop();
3851 }
3852 }
3853
3854 return true;
3855 }
std::stack< std::pair< char, std::size_t > > stack_
Definition exprtk.hpp:3860
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_override, exprtk::details::is_bracket(), exprtk::details::is_right_bracket(), stack_, and state_.

Here is the call graph for this function:

◆ operator()() [2/4]

virtual bool exprtk::lexer::token_scanner::operator() ( const token & ,
const token &  )
inlinevirtual

Reimplemented from exprtk::lexer::token_scanner.

Definition at line 3263 of file exprtk.hpp.

3264 {
3265 return false;
3266 }

◆ operator()() [3/4]

virtual bool exprtk::lexer::token_scanner::operator() ( const token & ,
const token & ,
const token &  )
inlinevirtual

Reimplemented from exprtk::lexer::token_scanner.

Definition at line 3268 of file exprtk.hpp.

3269 {
3270 return false;
3271 }

◆ operator()() [4/4]

virtual bool exprtk::lexer::token_scanner::operator() ( const token & ,
const token & ,
const token & ,
const token &  )
inlinevirtual

Reimplemented from exprtk::lexer::token_scanner.

Definition at line 3273 of file exprtk.hpp.

3274 {
3275 return false;
3276 }

◆ reset()

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

Reimplemented from exprtk::lexer::helper_interface.

Definition at line 3811 of file exprtk.hpp.

3812 {
3813 // Why? because msvc doesn't support swap properly.
3814 stack_ = std::stack<std::pair<char,std::size_t> >();
3815 state_ = true;
3816 error_token_.clear();
3817 }

References error_token_, exprtk_override, stack_, and state_.

◆ result()

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

Reimplemented from exprtk::lexer::helper_interface.

Definition at line 3790 of file exprtk.hpp.

3791 {
3792 if (!stack_.empty())
3793 {
3794 lexer::token t;
3795 t.value = stack_.top().first;
3796 t.position = stack_.top().second;
3797 error_token_ = t;
3798 state_ = false;
3799
3800 return false;
3801 }
3802 else
3803 return state_;
3804 }

References error_token_, exprtk_override, 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 3861 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 3860 of file exprtk.hpp.

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

◆ state_

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

Definition at line 3859 of file exprtk.hpp.

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


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