C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
expression_processor< T >::parse_function_definition_impl Struct Reference
Inheritance diagram for expression_processor< T >::parse_function_definition_impl:
[legend]
Collaboration diagram for expression_processor< T >::parse_function_definition_impl:
[legend]

Public Member Functions

func_parse_result process (std::string &func_def, function_definition &fd)
func_parse_result process (std::string &func_def, function_definition &fd)
Public Member Functions inherited from exprtk::lexer::parser_helper
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)

Additional Inherited Members

Public Types inherited from exprtk::lexer::parser_helper
enum  token_advance_mode { e_hold = 0 , e_advance = 1 }
typedef token token_t
typedef generator generator_t

Detailed Description

template<typename T>
struct expression_processor< T >::parse_function_definition_impl

Definition at line 616 of file exprtk_mpfr_repl.cpp.

Member Function Documentation

◆ process() [1/2]

template<typename T>
func_parse_result expression_processor< T >::parse_function_definition_impl::process ( std::string & func_def,
function_definition & fd )
inline

Definition at line 618 of file exprtk_mpfr_repl.cpp.

619 {
620 if (!init(func_def))
621 return e_parse_lexfail;
622
623 if (!token_is(token_t::e_symbol,"function"))
624 return e_parse_notfunc;
625
627 return e_parse_partial;
628
629 fd.name = current_token().value;
630
631 next_token();
632
634 return e_parse_partial;
635
637 {
639
640 for ( ; ; )
641 {
642 // (x,y,z,....w)
644 return e_parse_partial;
645
646 var_list.push_back(current_token().value);
647
648 next_token();
649
651 break;
652
654 return e_parse_partial;
655 }
656
657 var_list.swap(fd.var_list);
658 }
659
662
663 int bracket_stack = 0;
664
666 return e_parse_partial;
667
668 for ( ; ; )
669 {
671
675 {
676 if (0 == --bracket_stack)
677 break;
678 }
679 else
680 {
681 if (lexer().finished())
682 return e_parse_partial;
683
684 next_token();
685 }
686 }
687
689
690 fd.body = func_def.substr(body_begin,size);
691
693
694 if (index < func_def.size())
695 func_def = func_def.substr(index,func_def.size() - index);
696 else
697 func_def = "";
698
699 return e_parse_success;
700 }
bool init(const std::string &str)
Definition exprtk.hpp:4417
const token_t & current_token() const
Definition exprtk.hpp:4458
bool token_is(const token_t::token_type &ttype, const token_advance_mode mode=e_advance)
Definition exprtk.hpp:4482
std::size_t position
Definition exprtk.hpp:2454
std::string value
Definition exprtk.hpp:2453

References expression_processor< T >::function_definition::body, exprtk::lexer::parser_helper::current_token(), exprtk::lexer::token::e_comma, exprtk::lexer::parser_helper::e_hold, exprtk::lexer::token::e_lbracket, exprtk::lexer::token::e_lcrlbracket, expression_processor< T >::e_parse_lexfail, expression_processor< T >::e_parse_notfunc, expression_processor< T >::e_parse_partial, expression_processor< T >::e_parse_success, exprtk::lexer::token::e_rbracket, exprtk::lexer::token::e_rcrlbracket, exprtk::lexer::token::e_symbol, exprtk::lexer::parser_helper::init(), exprtk::lexer::parser_helper::lexer(), expression_processor< T >::function_definition::name, exprtk::lexer::parser_helper::next_token(), exprtk::lexer::token::position, exprtk::lexer::parser_helper::token_is(), exprtk::lexer::token::value, and expression_processor< T >::function_definition::var_list.

Referenced by expression_processor< T >::parse_function_definition().

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

◆ process() [2/2]

template<typename T>
func_parse_result expression_processor< T >::parse_function_definition_impl::process ( std::string & func_def,
function_definition & fd )
inline

Definition at line 647 of file exprtk_repl.cpp.

648 {
649 if (!init(func_def))
650 return e_parse_lexfail;
651
652 if (!token_is(token_t::e_symbol,"function"))
653 return e_parse_notfunc;
654
656 return e_parse_partial;
657
658 fd.name = current_token().value;
659
660 next_token();
661
663 return e_parse_partial;
664
666 {
668
669 for ( ; ; )
670 {
671 // (x,y,z,....w)
673 return e_parse_partial;
674
675 var_list.push_back(current_token().value);
676
677 next_token();
678
680 break;
681
683 return e_parse_partial;
684 }
685
686 var_list.swap(fd.var_list);
687 }
688
691
692 int bracket_stack = 0;
693
695 return e_parse_partial;
696
697 for ( ; ; )
698 {
700
704 {
705 if (0 == --bracket_stack)
706 break;
707 }
708 else
709 {
710 if (lexer().finished())
711 return e_parse_partial;
712
713 next_token();
714 }
715 }
716
717 const std::size_t size = body_end - body_begin + 1;
718
719 fd.body = func_def.substr(body_begin,size);
720
722
723 if (index < func_def.size())
724 func_def = func_def.substr(index,func_def.size() - index);
725 else
726 func_def = "";
727
728 return e_parse_success;
729 }

References exprtk::lexer::parser_helper::current_token(), exprtk::lexer::token::e_comma, exprtk::lexer::parser_helper::e_hold, exprtk::lexer::token::e_lbracket, exprtk::lexer::token::e_lcrlbracket, expression_processor< T >::e_parse_lexfail, expression_processor< T >::e_parse_notfunc, expression_processor< T >::e_parse_partial, expression_processor< T >::e_parse_success, exprtk::lexer::token::e_rbracket, exprtk::lexer::token::e_rcrlbracket, exprtk::lexer::token::e_symbol, exprtk::lexer::parser_helper::init(), exprtk::lexer::parser_helper::lexer(), exprtk::lexer::parser_helper::next_token(), exprtk::lexer::token::position, exprtk::lexer::parser_helper::token_is(), and exprtk::lexer::token::value.

Here is the call graph for this function:

The documentation for this struct was generated from the following files: