C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
Public Member Functions | List of all members
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_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 {
638 std::vector<std::string> var_list;
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
660 std::size_t body_begin = current_token().position;
661 std::size_t body_end = current_token().position;
662
663 int bracket_stack = 0;
664
666 return e_parse_partial;
667
668 for ( ; ; )
669 {
670 body_end = current_token().position;
671
673 bracket_stack++;
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
688 std::size_t size = body_end - body_begin + 1;
689
690 fd.body = func_def.substr(body_begin,size);
691
692 const std::size_t index = body_begin + size;
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:4353
const token_t & current_token() const
Definition exprtk.hpp:4394
bool token_is(const token_t::token_type &ttype, const token_advance_mode mode=e_advance)
Definition exprtk.hpp:4418
std::size_t position
Definition exprtk.hpp:2400
std::string value
Definition exprtk.hpp:2399

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 614 of file exprtk_repl.cpp.

615 {
616 if (!init(func_def))
617 return e_parse_lexfail;
618
619 if (!token_is(token_t::e_symbol,"function"))
620 return e_parse_notfunc;
621
623 return e_parse_partial;
624
625 fd.name = current_token().value;
626
627 next_token();
628
630 return e_parse_partial;
631
633 {
634 std::vector<std::string> var_list;
635
636 for ( ; ; )
637 {
638 // (x,y,z,....w)
640 return e_parse_partial;
641
642 var_list.push_back(current_token().value);
643
644 next_token();
645
647 break;
648
650 return e_parse_partial;
651 }
652
653 var_list.swap(fd.var_list);
654 }
655
656 const std::size_t body_begin = current_token().position;
657 std::size_t body_end = current_token().position;
658
659 int bracket_stack = 0;
660
662 return e_parse_partial;
663
664 for ( ; ; )
665 {
666 body_end = current_token().position;
667
669 bracket_stack++;
671 {
672 if (0 == --bracket_stack)
673 break;
674 }
675 else
676 {
677 if (lexer().finished())
678 return e_parse_partial;
679
680 next_token();
681 }
682 }
683
684 const std::size_t size = body_end - body_begin + 1;
685
686 fd.body = func_def.substr(body_begin,size);
687
688 const std::size_t index = body_begin + size;
689
690 if (index < func_def.size())
691 func_def = func_def.substr(index,func_def.size() - index);
692 else
693 func_def = "";
694
695 return e_parse_success;
696 }

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: