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

#include <exprtk.hpp>

Inheritance diagram for exprtk::lexer::helper::sequence_validator:
[legend]
Collaboration diagram for exprtk::lexer::helper::sequence_validator:
[legend]

Public Member Functions

 sequence_validator ()
bool result ()
bool operator() (const lexer::token &t0, const lexer::token &t1)
std::size_t error_count () const
std::pair< lexer::token, lexer::token > error (const std::size_t index)
void clear_errors ()
virtual bool operator() (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 void reset ()
virtual ~helper_interface ()

Private Types

typedef std::pair< lexer::token::token_type, lexer::token::token_type > token_pair_t
typedef std::set< token_pair_t > set_t

Private Member Functions

void add_invalid (const lexer::token::token_type base, const lexer::token::token_type t)
void add_invalid_set1 (const lexer::token::token_type t)
bool invalid_bracket_check (const lexer::token::token_type base, const lexer::token::token_type t)

Private Attributes

set_t invalid_comb_
std::vector< std::pair< lexer::token, lexer::token > > error_list_

Detailed Description

Definition at line 3995 of file exprtk.hpp.

Member Typedef Documentation

◆ set_t

Definition at line 4000 of file exprtk.hpp.

◆ token_pair_t

Constructor & Destructor Documentation

◆ sequence_validator()

exprtk::lexer::helper::sequence_validator::sequence_validator ( )
inline

Definition at line 4006 of file exprtk.hpp.

4007 : lexer::token_scanner(2)
4008 {
4013
4032 }
void add_invalid(const lexer::token::token_type base, const lexer::token::token_type t)
Definition exprtk.hpp:4080
void add_invalid_set1(const lexer::token::token_type t)
Definition exprtk.hpp:4085

References add_invalid(), add_invalid_set1(), exprtk::lexer::token::e_add, exprtk::lexer::token::e_assign, exprtk::lexer::token::e_colon, exprtk::lexer::token::e_comma, exprtk::lexer::token::e_div, exprtk::lexer::token::e_eq, exprtk::lexer::token::e_gt, exprtk::lexer::token::e_gte, exprtk::lexer::token::e_lt, exprtk::lexer::token::e_lte, exprtk::lexer::token::e_mod, exprtk::lexer::token::e_mul, exprtk::lexer::token::e_ne, exprtk::lexer::token::e_number, exprtk::lexer::token::e_pow, exprtk::lexer::token::e_shl, exprtk::lexer::token::e_shr, exprtk::lexer::token::e_string, exprtk::lexer::token::e_sub, exprtk::lexer::token::e_ternary, and exprtk::lexer::token_scanner::token_scanner().

Here is the call graph for this function:

Member Function Documentation

◆ add_invalid()

void exprtk::lexer::helper::sequence_validator::add_invalid ( const lexer::token::token_type base,
const lexer::token::token_type t )
inlineprivate

Definition at line 4080 of file exprtk.hpp.

4081 {
4082 invalid_comb_.insert(std::make_pair(base,t));
4083 }

References invalid_comb_.

Referenced by add_invalid_set1(), and sequence_validator().

Here is the caller graph for this function:

◆ add_invalid_set1()

void exprtk::lexer::helper::sequence_validator::add_invalid_set1 ( const lexer::token::token_type t)
inlineprivate

◆ clear_errors()

void exprtk::lexer::helper::sequence_validator::clear_errors ( )
inline

Definition at line 4073 of file exprtk.hpp.

4074 {
4075 error_list_.clear();
4076 }
std::vector< std::pair< lexer::token, lexer::token > > error_list_
Definition exprtk.hpp:4164

References error_list_.

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

Here is the caller graph for this function:

◆ error()

std::pair< lexer::token, lexer::token > exprtk::lexer::helper::sequence_validator::error ( const std::size_t index)
inline

Definition at line 4060 of file exprtk.hpp.

4061 {
4062 if (index < error_list_.size())
4063 {
4064 return error_list_[index];
4065 }
4066 else
4067 {
4068 static const lexer::token error_token;
4069 return std::make_pair(error_token,error_token);
4070 }
4071 }

References error_list_.

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

Here is the caller graph for this function:

◆ error_count()

std::size_t exprtk::lexer::helper::sequence_validator::error_count ( ) const
inline

Definition at line 4055 of file exprtk.hpp.

4056 {
4057 return error_list_.size();
4058 }

References error_list_.

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

Here is the caller graph for this function:

◆ invalid_bracket_check()

bool exprtk::lexer::helper::sequence_validator::invalid_bracket_check ( const lexer::token::token_type base,
const lexer::token::token_type t )
inlineprivate

Definition at line 4104 of file exprtk.hpp.

4105 {
4106 if (details::is_right_bracket(static_cast<details::char_t>(base)))
4107 {
4108 switch (t)
4109 {
4110 case lexer::token::e_assign : return (']' != base);
4111 case lexer::token::e_string : return (')' != base);
4112 default : return false;
4113 }
4114 }
4115 else if (details::is_left_bracket(static_cast<details::char_t>(base)))
4116 {
4117 if (details::is_right_bracket(static_cast<details::char_t>(t)))
4118 return false;
4119 else if (details::is_left_bracket(static_cast<details::char_t>(t)))
4120 return false;
4121 else
4122 {
4123 switch (t)
4124 {
4125 case lexer::token::e_number : return false;
4126 case lexer::token::e_symbol : return false;
4127 case lexer::token::e_string : return false;
4128 case lexer::token::e_add : return false;
4129 case lexer::token::e_sub : return false;
4130 case lexer::token::e_colon : return false;
4131 case lexer::token::e_ternary : return false;
4132 default : return true ;
4133 }
4134 }
4135 }
4136 else if (details::is_right_bracket(static_cast<details::char_t>(t)))
4137 {
4138 switch (base)
4139 {
4140 case lexer::token::e_number : return false;
4141 case lexer::token::e_symbol : return false;
4142 case lexer::token::e_string : return false;
4143 case lexer::token::e_eof : return false;
4144 case lexer::token::e_colon : return false;
4145 case lexer::token::e_ternary : return false;
4146 default : return true ;
4147 }
4148 }
4149 else if (details::is_left_bracket(static_cast<details::char_t>(t)))
4150 {
4151 switch (base)
4152 {
4153 case lexer::token::e_rbracket : return true;
4154 case lexer::token::e_rsqrbracket : return true;
4155 case lexer::token::e_rcrlbracket : return true;
4156 default : return false;
4157 }
4158 }
4159
4160 return false;
4161 }
bool is_left_bracket(const char_t c)
Definition exprtk.hpp:142
bool is_right_bracket(const char_t c)
Definition exprtk.hpp:147

References exprtk::lexer::token::e_add, exprtk::lexer::token::e_assign, exprtk::lexer::token::e_colon, exprtk::lexer::token::e_eof, exprtk::lexer::token::e_number, exprtk::lexer::token::e_rbracket, exprtk::lexer::token::e_rcrlbracket, exprtk::lexer::token::e_rsqrbracket, exprtk::lexer::token::e_string, exprtk::lexer::token::e_sub, exprtk::lexer::token::e_symbol, exprtk::lexer::token::e_ternary, exprtk::details::is_left_bracket(), and exprtk::details::is_right_bracket().

Referenced by operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator()() [1/4]

bool exprtk::lexer::helper::sequence_validator::operator() ( const lexer::token & t0,
const lexer::token & t1 )
inlinevirtual

Reimplemented from exprtk::lexer::token_scanner.

Definition at line 4039 of file exprtk.hpp.

4040 {
4041 const set_t::value_type p = std::make_pair(t0.type,t1.type);
4042
4043 if (invalid_bracket_check(t0.type,t1.type))
4044 {
4045 error_list_.push_back(std::make_pair(t0,t1));
4046 }
4047 else if (invalid_comb_.find(p) != invalid_comb_.end())
4048 {
4049 error_list_.push_back(std::make_pair(t0,t1));
4050 }
4051
4052 return true;
4053 }
bool invalid_bracket_check(const lexer::token::token_type base, const lexer::token::token_type t)
Definition exprtk.hpp:4104

References error_list_, exprtk_override, invalid_bracket_check(), and invalid_comb_.

Here is the call graph for this function:

◆ operator()() [2/4]

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

Reimplemented from exprtk::lexer::token_scanner.

Definition at line 3258 of file exprtk.hpp.

3259 {
3260 return false;
3261 }

◆ 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 }

◆ result()

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

Reimplemented from exprtk::lexer::helper_interface.

Definition at line 4034 of file exprtk.hpp.

4035 {
4036 return error_list_.empty();
4037 }

References error_list_, and exprtk_override.

Member Data Documentation

◆ error_list_

std::vector<std::pair<lexer::token,lexer::token> > exprtk::lexer::helper::sequence_validator::error_list_
private

Definition at line 4164 of file exprtk.hpp.

Referenced by clear_errors(), error(), error_count(), operator()(), and result().

◆ invalid_comb_

set_t exprtk::lexer::helper::sequence_validator::invalid_comb_
private

Definition at line 4163 of file exprtk.hpp.

Referenced by add_invalid(), and operator()().


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