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

Member Typedef Documentation

◆ generator_t

Definition at line 4407 of file exprtk.hpp.

◆ token_t

Definition at line 4406 of file exprtk.hpp.

Member Enumeration Documentation

◆ token_advance_mode

Enumerator
e_hold 
e_advance 

Definition at line 4460 of file exprtk.hpp.

4461 {
4462 e_hold = 0,
4463 e_advance = 1
4464 };

Member Function Documentation

◆ advance_token()

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

Definition at line 4466 of file exprtk.hpp.

4467 {
4468 if (e_advance == mode)
4469 {
4470 next_token();
4471 }
4472 }

References e_advance, and next_token().

Referenced by token_is(), token_is(), token_is(), token_is_arithmetic_opr(), token_is_bracket(), 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 4450 of file exprtk.hpp.

4451 {
4452 return current_token_;
4453 }

References current_token_.

Referenced by exprtk::parser< T >::check_block_statement_closure(), 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_bracket(), 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 4409 of file exprtk.hpp.

4410 {
4411 if (!lexer_.process(str))
4412 {
4413 return false;
4414 }
4415
4416 lexer_.begin();
4417
4418 next_token();
4419
4420 return true;
4421 }
bool process(const std::string &str)
Definition exprtk.hpp:2484

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

4429 {
4430 return lexer_;
4431 }

References lexer_.

◆ next_token()

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

Definition at line 4445 of file exprtk.hpp.

4446 {
4448 }

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

4456 {
4457 return lexer_.peek_next_token();
4458 }
token_t & peek_next_token()
Definition exprtk.hpp:2540

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

4613 {
4615 }
bool imatch(const char_t c1, const char_t c2)
Definition exprtk.hpp:190
std::string value
Definition exprtk.hpp:2453

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

4608 {
4609 return (lexer_.peek_next_token().type == ttype);
4610 }

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

Referenced by exprtk::parser< T >::parse_conditional_statement_02(), 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 4439 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 4433 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 4503 of file exprtk.hpp.

4505 {
4506 if (!exprtk::details::imatch(value,current_token().value))
4507 {
4508 return false;
4509 }
4510
4511 advance_token(mode);
4512
4513 return true;
4514 }
void advance_token(const token_advance_mode mode)
Definition exprtk.hpp:4466
const token_t & current_token() const
Definition exprtk.hpp:4450

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

4489 {
4490 if (
4491 (current_token().type != ttype) ||
4493 )
4494 {
4495 return false;
4496 }
4497
4498 advance_token(mode);
4499
4500 return true;
4501 }

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

4475 {
4476 if (current_token().type != ttype)
4477 {
4478 return false;
4479 }
4480
4481 advance_token(mode);
4482
4483 return true;
4484 }

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

4517 {
4518 switch (current_token().type)
4519 {
4520 case token_t::e_add :
4521 case token_t::e_sub :
4522 case token_t::e_div :
4523 case token_t::e_mul :
4524 case token_t::e_mod :
4525 case token_t::e_pow : break;
4526 default : return false;
4527 }
4528
4529 advance_token(mode);
4530
4531 return true;
4532 }

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_bracket()

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

Definition at line 4582 of file exprtk.hpp.

4583 {
4584 switch (current_token().type)
4585 {
4586 case token_t::e_rbracket :
4589 case token_t::e_lbracket :
4591 case token_t::e_lsqrbracket : break;
4592 default : return false;
4593 }
4594
4595 advance_token(mode);
4596
4597 return true;
4598 }

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

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

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

4535 {
4536 switch (current_token().type)
4537 {
4538 case token_t::e_eq :
4539 case token_t::e_lte :
4540 case token_t::e_ne :
4541 case token_t::e_gte :
4542 case token_t::e_lt :
4543 case token_t::e_gt : break;
4544 default : return false;
4545 }
4546
4547 advance_token(mode);
4548
4549 return true;
4550 }

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

4553 {
4554 switch (current_token().type)
4555 {
4556 case token_t::e_lbracket :
4558 case token_t::e_lsqrbracket : break;
4559 default : return false;
4560 }
4561
4562 advance_token(mode);
4563
4564 return true;
4565 }

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

4601 {
4602 return token_is("for" , mode) ||
4603 token_is("while" , mode) ||
4604 token_is("repeat", mode) ;
4605 }
bool token_is(const token_t::token_type &ttype, const token_advance_mode mode=e_advance)
Definition exprtk.hpp:4474

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

4568 {
4569 switch (current_token().type)
4570 {
4571 case token_t::e_rbracket :
4573 case token_t::e_rsqrbracket : break;
4574 default : return false;
4575 }
4576
4577 advance_token(mode);
4578
4579 return true;
4580 }

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

Referenced by restore_token(), and store_token().


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