C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Private Attributes | List of all members
exprtk::lexer::parser_helper Class Reference

#include <exprtk.hpp>

Inheritance diagram for exprtk::lexer::parser_helper:
[legend]
Collaboration diagram for exprtk::lexer::parser_helper:
[legend]

Public Types

enum  token_advance_mode { e_hold = 0 , e_advance = 1 }
 
typedef token token_t
 
typedef generator generator_t
 

Public Member Functions

bool init (const std::string &str)
 
generator_tlexer ()
 
const generator_tlexer () const
 
void store_token ()
 
void restore_token ()
 
void next_token ()
 
const token_tcurrent_token () const
 
const token_tpeek_next_token ()
 
void advance_token (const token_advance_mode mode)
 
bool token_is (const token_t::token_type &ttype, const token_advance_mode mode=e_advance)
 
bool token_is (const token_t::token_type &ttype, const std::string &value, const token_advance_mode mode=e_advance)
 
bool token_is (const std::string &value, const token_advance_mode mode=e_advance)
 
bool token_is_arithmetic_opr (const token_advance_mode mode=e_advance)
 
bool token_is_ineq_opr (const token_advance_mode mode=e_advance)
 
bool token_is_left_bracket (const token_advance_mode mode=e_advance)
 
bool token_is_right_bracket (const token_advance_mode mode=e_advance)
 
bool token_is_loop (const token_advance_mode mode=e_advance)
 
bool peek_token_is (const token_t::token_type &ttype)
 
bool peek_token_is (const std::string &s)
 

Private Attributes

generator_t lexer_
 
token_t current_token_
 
token_t store_current_token_
 

Detailed Description

Definition at line 4346 of file exprtk.hpp.

Member Typedef Documentation

◆ generator_t

Definition at line 4351 of file exprtk.hpp.

◆ token_t

Definition at line 4350 of file exprtk.hpp.

Member Enumeration Documentation

◆ token_advance_mode

Enumerator
e_hold 
e_advance 

Definition at line 4404 of file exprtk.hpp.

4405 {
4406 e_hold = 0,
4407 e_advance = 1
4408 };

Member Function Documentation

◆ advance_token()

void exprtk::lexer::parser_helper::advance_token ( const token_advance_mode  mode)
inline

Definition at line 4410 of file exprtk.hpp.

4411 {
4412 if (e_advance == mode)
4413 {
4414 next_token();
4415 }
4416 }

References e_advance, and next_token().

Referenced by token_is(), token_is(), token_is(), token_is_arithmetic_opr(), token_is_ineq_opr(), token_is_left_bracket(), and token_is_right_bracket().

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

◆ current_token()

const token_t & exprtk::lexer::parser_helper::current_token ( ) const
inline

Definition at line 4394 of file exprtk.hpp.

4395 {
4396 return current_token_;
4397 }

References current_token_.

Referenced by exprtk::parser< T >::compile(), exprtk::parser< T >::parse_assert_statement(), exprtk::parser< T >::parse_base_function_call(), exprtk::parser< T >::parse_base_operation(), exprtk::parser< T >::parse_branch(), exprtk::parser< T >::parse_break_statement(), exprtk::parser< T >::parse_conditional_statement(), exprtk::parser< T >::parse_conditional_statement_01(), exprtk::parser< T >::parse_conditional_statement_02(), exprtk::parser< T >::parse_const_string(), exprtk::parser< T >::parse_continue_statement(), exprtk::parser< T >::parse_corpus(), exprtk::parser< T >::parse_define_constvar_statement(), exprtk::parser< T >::parse_define_string_statement(), exprtk::parser< T >::parse_define_var_statement(), exprtk::parser< T >::parse_define_vector_statement(), exprtk::parser< T >::parse_expression(), exprtk::parser< T >::parse_for_loop(), exprtk::parser< T >::parse_function_call(), exprtk::parser< T >::parse_function_call_0(), exprtk::parser< T >::parse_function_invocation(), exprtk::parser< T >::type_checker::parse_function_prototypes(), exprtk::parser< T >::parse_generic_function_call(), exprtk::parser< T >::parse_igeneric_function_params(), exprtk::parser< T >::parse_multi_sequence(), exprtk::parser< T >::parse_multi_switch_statement(), exprtk::parser< T >::parse_not_statement(), exprtk::parser< T >::parse_overload_function_call(), exprtk::parser< T >::parse_range(), exprtk::parser< T >::parse_repeat_until_loop(), exprtk::parser< T >::parse_return_statement(), exprtk::parser< T >::parse_special_function(), exprtk::parser< T >::parse_string(), exprtk::parser< T >::parse_string_function_call(), exprtk::parser< T >::parse_string_range_statement(), exprtk::parser< T >::parse_swap_statement(), exprtk::parser< T >::parse_switch_statement(), exprtk::parser< T >::parse_symbol(), exprtk::parser< T >::parse_symtab_symbol(), exprtk::parser< T >::parse_ternary_conditional_statement(), exprtk::parser< T >::parse_uninitialised_var_statement(), exprtk::parser< T >::parse_vararg_function(), exprtk::parser< T >::parse_vararg_function_call(), exprtk::parser< T >::parse_vector(), exprtk::parser< T >::parse_vector_index(), exprtk::parser< T >::parse_while_loop(), exprtk::parser< T >::post_bracket_process(), exprtk::parser< T >::post_variable_process(), exprtk::parser< T >::parse_special_function_impl< Type, NumberOfParameters >::process(), expression_processor< T >::parse_function_definition_impl::process(), exprtk::parser< T >::simplify_unary_negation_branch(), exprtk::parser< T >::synthesize_vector_element(), token_is(), token_is(), token_is(), token_is_arithmetic_opr(), token_is_ineq_opr(), token_is_left_bracket(), token_is_right_bracket(), and exprtk::parser< T >::type_checker::verify().

Here is the caller graph for this function:

◆ init()

bool exprtk::lexer::parser_helper::init ( const std::string &  str)
inline

Definition at line 4353 of file exprtk.hpp.

4354 {
4355 if (!lexer_.process(str))
4356 {
4357 return false;
4358 }
4359
4360 lexer_.begin();
4361
4362 next_token();
4363
4364 return true;
4365 }
bool process(const std::string &str)
Definition exprtk.hpp:2430

References exprtk::lexer::generator::begin(), lexer_, next_token(), and exprtk::lexer::generator::process().

Referenced by exprtk::parser< T >::compile(), and expression_processor< T >::parse_function_definition_impl::process().

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

◆ lexer() [1/2]

generator_t & exprtk::lexer::parser_helper::lexer ( )
inline

◆ lexer() [2/2]

const generator_t & exprtk::lexer::parser_helper::lexer ( ) const
inline

Definition at line 4372 of file exprtk.hpp.

4373 {
4374 return lexer_;
4375 }

References lexer_.

◆ next_token()

void exprtk::lexer::parser_helper::next_token ( )
inline

Definition at line 4389 of file exprtk.hpp.

4390 {
4392 }

References current_token_, lexer_, and exprtk::lexer::generator::next_token().

Referenced by advance_token(), exprtk::parser< T >::compile(), init(), exprtk::parser< T >::parse_assert_statement(), exprtk::parser< T >::parse_base_function_call(), exprtk::parser< T >::parse_branch(), exprtk::parser< T >::parse_break_statement(), exprtk::parser< T >::parse_conditional_statement(), exprtk::parser< T >::parse_conditional_statement_02(), exprtk::parser< T >::parse_const_string(), exprtk::parser< T >::parse_continue_statement(), exprtk::parser< T >::parse_corpus(), exprtk::parser< T >::parse_define_var_statement(), exprtk::parser< T >::parse_expression(), exprtk::parser< T >::parse_for_loop(), exprtk::parser< T >::parse_function_call(), exprtk::parser< T >::parse_function_call_0(), exprtk::parser< T >::parse_generic_function_call(), exprtk::parser< T >::parse_multi_switch_statement(), exprtk::parser< T >::parse_null_statement(), exprtk::parser< T >::parse_overload_function_call(), exprtk::parser< T >::parse_repeat_until_loop(), exprtk::parser< T >::parse_return_statement(), exprtk::parser< T >::parse_string(), exprtk::parser< T >::parse_string_function_call(), exprtk::parser< T >::parse_swap_statement(), exprtk::parser< T >::parse_switch_statement(), exprtk::parser< T >::parse_symtab_symbol(), exprtk::parser< T >::parse_vararg_function(), exprtk::parser< T >::parse_vararg_function_call(), exprtk::parser< T >::parse_vector(), exprtk::parser< T >::parse_while_loop(), exprtk::parser< T >::post_bracket_process(), exprtk::parser< T >::parse_special_function_impl< Type, NumberOfParameters >::process(), and expression_processor< T >::parse_function_definition_impl::process().

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

◆ peek_next_token()

const token_t & exprtk::lexer::parser_helper::peek_next_token ( )
inline

Definition at line 4399 of file exprtk.hpp.

4400 {
4401 return lexer_.peek_next_token();
4402 }
token_t & peek_next_token()
Definition exprtk.hpp:2486

References lexer_, and exprtk::lexer::generator::peek_next_token().

Here is the call graph for this function:

◆ peek_token_is() [1/2]

bool exprtk::lexer::parser_helper::peek_token_is ( const std::string &  s)
inline

Definition at line 4538 of file exprtk.hpp.

4539 {
4541 }
bool imatch(const char_t c1, const char_t c2)
Definition exprtk.hpp:190
std::string value
Definition exprtk.hpp:2399

References exprtk::details::imatch(), lexer_, exprtk::lexer::generator::peek_next_token(), and exprtk::lexer::token::value.

Here is the call graph for this function:

◆ peek_token_is() [2/2]

bool exprtk::lexer::parser_helper::peek_token_is ( const token_t::token_type ttype)
inline

Definition at line 4533 of file exprtk.hpp.

4534 {
4535 return (lexer_.peek_next_token().type == ttype);
4536 }

References lexer_, exprtk::lexer::generator::peek_next_token(), and exprtk::lexer::token::type.

Referenced by exprtk::parser< T >::parse_const_string(), exprtk::parser< T >::parse_define_vector_statement(), exprtk::parser< T >::parse_for_loop(), exprtk::parser< T >::parse_multi_sequence(), exprtk::parser< T >::parse_pending_vector_index_operator(), exprtk::parser< T >::parse_repeat_until_loop(), exprtk::parser< T >::parse_string(), exprtk::parser< T >::parse_swap_statement(), and exprtk::parser< T >::post_variable_process().

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

◆ restore_token()

void exprtk::lexer::parser_helper::restore_token ( )
inline

Definition at line 4383 of file exprtk.hpp.

References current_token_, lexer_, exprtk::lexer::generator::restore(), and store_current_token_.

Here is the call graph for this function:

◆ store_token()

void exprtk::lexer::parser_helper::store_token ( )
inline

Definition at line 4377 of file exprtk.hpp.

References current_token_, lexer_, exprtk::lexer::generator::store(), and store_current_token_.

Here is the call graph for this function:

◆ token_is() [1/3]

bool exprtk::lexer::parser_helper::token_is ( const std::string &  value,
const token_advance_mode  mode = e_advance 
)
inline

Definition at line 4447 of file exprtk.hpp.

4449 {
4450 if (!exprtk::details::imatch(value,current_token().value))
4451 {
4452 return false;
4453 }
4454
4455 advance_token(mode);
4456
4457 return true;
4458 }
void advance_token(const token_advance_mode mode)
Definition exprtk.hpp:4410
const token_t & current_token() const
Definition exprtk.hpp:4394

References advance_token(), current_token(), and exprtk::details::imatch().

Here is the call graph for this function:

◆ token_is() [2/3]

bool exprtk::lexer::parser_helper::token_is ( const token_t::token_type ttype,
const std::string &  value,
const token_advance_mode  mode = e_advance 
)
inline

Definition at line 4430 of file exprtk.hpp.

4433 {
4434 if (
4435 (current_token().type != ttype) ||
4437 )
4438 {
4439 return false;
4440 }
4441
4442 advance_token(mode);
4443
4444 return true;
4445 }

References advance_token(), current_token(), and exprtk::details::imatch().

Here is the call graph for this function:

◆ token_is() [3/3]

bool exprtk::lexer::parser_helper::token_is ( const token_t::token_type ttype,
const token_advance_mode  mode = e_advance 
)
inline

Definition at line 4418 of file exprtk.hpp.

4419 {
4420 if (current_token().type != ttype)
4421 {
4422 return false;
4423 }
4424
4425 advance_token(mode);
4426
4427 return true;
4428 }

References advance_token(), and current_token().

Referenced by exprtk::parser< T >::parse_assert_statement(), exprtk::parser< T >::parse_base_function_call(), exprtk::parser< T >::parse_branch(), exprtk::parser< T >::parse_break_statement(), exprtk::parser< T >::parse_conditional_statement(), exprtk::parser< T >::parse_conditional_statement_01(), exprtk::parser< T >::parse_conditional_statement_02(), exprtk::parser< T >::parse_corpus(), exprtk::parser< T >::parse_define_constvar_statement(), exprtk::parser< T >::parse_define_var_statement(), exprtk::parser< T >::parse_define_vector_statement(), exprtk::parser< T >::parse_expression(), exprtk::parser< T >::parse_for_loop(), exprtk::parser< T >::parse_function_call(), exprtk::parser< T >::parse_function_call_0(), exprtk::parser< T >::parse_generic_function_call(), exprtk::parser< T >::parse_igeneric_function_params(), exprtk::parser< T >::parse_multi_sequence(), exprtk::parser< T >::parse_multi_switch_statement(), exprtk::parser< T >::parse_pending_string_rangesize(), exprtk::parser< T >::parse_pending_vector_index_operator(), exprtk::parser< T >::parse_range(), exprtk::parser< T >::parse_repeat_until_loop(), exprtk::parser< T >::parse_return_statement(), exprtk::parser< T >::parse_string_range_statement(), exprtk::parser< T >::parse_swap_statement(), exprtk::parser< T >::parse_switch_statement(), exprtk::parser< T >::parse_ternary_conditional_statement(), exprtk::parser< T >::parse_uninitialised_var_statement(), exprtk::parser< T >::parse_vararg_function(), exprtk::parser< T >::parse_vararg_function_call(), exprtk::parser< T >::parse_vector(), exprtk::parser< T >::parse_vector_index(), exprtk::parser< T >::parse_while_loop(), exprtk::parser< T >::post_bracket_process(), exprtk::parser< T >::parse_special_function_impl< Type, NumberOfParameters >::process(), expression_processor< T >::parse_function_definition_impl::process(), and token_is_loop().

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

◆ token_is_arithmetic_opr()

bool exprtk::lexer::parser_helper::token_is_arithmetic_opr ( const token_advance_mode  mode = e_advance)
inline

Definition at line 4460 of file exprtk.hpp.

4461 {
4462 switch (current_token().type)
4463 {
4464 case token_t::e_add :
4465 case token_t::e_sub :
4466 case token_t::e_div :
4467 case token_t::e_mul :
4468 case token_t::e_mod :
4469 case token_t::e_pow : break;
4470 default : return false;
4471 }
4472
4473 advance_token(mode);
4474
4475 return true;
4476 }

References advance_token(), current_token(), exprtk::lexer::token::e_add, exprtk::lexer::token::e_div, exprtk::lexer::token::e_mod, exprtk::lexer::token::e_mul, exprtk::lexer::token::e_pow, and exprtk::lexer::token::e_sub.

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

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

◆ token_is_ineq_opr()

bool exprtk::lexer::parser_helper::token_is_ineq_opr ( const token_advance_mode  mode = e_advance)
inline

Definition at line 4478 of file exprtk.hpp.

4479 {
4480 switch (current_token().type)
4481 {
4482 case token_t::e_eq :
4483 case token_t::e_lte :
4484 case token_t::e_ne :
4485 case token_t::e_gte :
4486 case token_t::e_lt :
4487 case token_t::e_gt : break;
4488 default : return false;
4489 }
4490
4491 advance_token(mode);
4492
4493 return true;
4494 }

References advance_token(), current_token(), 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, and exprtk::lexer::token::e_ne.

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

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

◆ token_is_left_bracket()

bool exprtk::lexer::parser_helper::token_is_left_bracket ( const token_advance_mode  mode = e_advance)
inline

Definition at line 4496 of file exprtk.hpp.

4497 {
4498 switch (current_token().type)
4499 {
4500 case token_t::e_lbracket :
4502 case token_t::e_lsqrbracket : break;
4503 default : return false;
4504 }
4505
4506 advance_token(mode);
4507
4508 return true;
4509 }

References advance_token(), current_token(), exprtk::lexer::token::e_lbracket, exprtk::lexer::token::e_lcrlbracket, and exprtk::lexer::token::e_lsqrbracket.

Here is the call graph for this function:

◆ token_is_loop()

bool exprtk::lexer::parser_helper::token_is_loop ( const token_advance_mode  mode = e_advance)
inline

Definition at line 4526 of file exprtk.hpp.

4527 {
4528 return token_is("for" , mode) ||
4529 token_is("while" , mode) ||
4530 token_is("repeat", mode) ;
4531 }
bool token_is(const token_t::token_type &ttype, const token_advance_mode mode=e_advance)
Definition exprtk.hpp:4418

References token_is().

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

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

◆ token_is_right_bracket()

bool exprtk::lexer::parser_helper::token_is_right_bracket ( const token_advance_mode  mode = e_advance)
inline

Definition at line 4511 of file exprtk.hpp.

4512 {
4513 switch (current_token().type)
4514 {
4515 case token_t::e_rbracket :
4517 case token_t::e_rsqrbracket : break;
4518 default : return false;
4519 }
4520
4521 advance_token(mode);
4522
4523 return true;
4524 }

References advance_token(), current_token(), exprtk::lexer::token::e_rbracket, exprtk::lexer::token::e_rcrlbracket, and exprtk::lexer::token::e_rsqrbracket.

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

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

Member Data Documentation

◆ current_token_

token_t exprtk::lexer::parser_helper::current_token_
private

Definition at line 4546 of file exprtk.hpp.

Referenced by current_token(), next_token(), restore_token(), and store_token().

◆ lexer_

generator_t exprtk::lexer::parser_helper::lexer_
private

◆ store_current_token_

token_t exprtk::lexer::parser_helper::store_current_token_
private

Definition at line 4547 of file exprtk.hpp.

Referenced by restore_token(), and store_token().


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