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

#include <exprtk.hpp>

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

Public Member Functions

 operator_joiner (const std::size_t &stride)
bool join (const lexer::token &t0, const lexer::token &t1, lexer::token &t)
bool join (const lexer::token &t0, const lexer::token &t1, const lexer::token &t2, lexer::token &t)
Public Member Functions inherited from exprtk::lexer::token_joiner
 token_joiner (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 bool result ()
virtual ~helper_interface ()

Detailed Description

Definition at line 3603 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ operator_joiner()

exprtk::lexer::helper::operator_joiner::operator_joiner ( const std::size_t & stride)
inlineexplicit

Definition at line 3607 of file exprtk.hpp.

3608 : token_joiner(stride)
3609 {}
token_joiner(const std::size_t &stride)
Definition exprtk.hpp:3415

References exprtk::lexer::token_joiner::token_joiner().

Here is the call graph for this function:

Member Function Documentation

◆ join() [1/2]

bool exprtk::lexer::helper::operator_joiner::join ( const lexer::token & t0,
const lexer::token & t1,
const lexer::token & t2,
lexer::token & t )
inlinevirtual

Reimplemented from exprtk::lexer::token_joiner.

Definition at line 3756 of file exprtk.hpp.

3760 {
3761 // '[ * ]' --> '[*]'
3762 if (
3763 (t0.type == lexer::token::e_lsqrbracket) &&
3764 (t1.type == lexer::token::e_mul ) &&
3765 (t2.type == lexer::token::e_rsqrbracket)
3766 )
3767 {
3768 t.type = lexer::token::e_symbol;
3769 t.value = "[*]";
3770 t.position = t0.position;
3771
3772 return true;
3773 }
3774 else
3775 return false;
3776 }

References exprtk::lexer::token::e_lsqrbracket, exprtk::lexer::token::e_mul, exprtk::lexer::token::e_rsqrbracket, exprtk::lexer::token::e_symbol, and exprtk_override.

◆ join() [2/2]

bool exprtk::lexer::helper::operator_joiner::join ( const lexer::token & t0,
const lexer::token & t1,
lexer::token & t )
inlinevirtual

Reimplemented from exprtk::lexer::token_joiner.

Definition at line 3611 of file exprtk.hpp.

3612 {
3613 // ': =' --> ':='
3614 if ((t0.type == lexer::token::e_colon) && (t1.type == lexer::token::e_eq))
3615 {
3616 t.type = lexer::token::e_assign;
3617 t.value = ":=";
3618 t.position = t0.position;
3619
3620 return true;
3621 }
3622 // '+ =' --> '+='
3623 else if ((t0.type == lexer::token::e_add) && (t1.type == lexer::token::e_eq))
3624 {
3625 t.type = lexer::token::e_addass;
3626 t.value = "+=";
3627 t.position = t0.position;
3628
3629 return true;
3630 }
3631 // '- =' --> '-='
3632 else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_eq))
3633 {
3634 t.type = lexer::token::e_subass;
3635 t.value = "-=";
3636 t.position = t0.position;
3637
3638 return true;
3639 }
3640 // '* =' --> '*='
3641 else if ((t0.type == lexer::token::e_mul) && (t1.type == lexer::token::e_eq))
3642 {
3643 t.type = lexer::token::e_mulass;
3644 t.value = "*=";
3645 t.position = t0.position;
3646
3647 return true;
3648 }
3649 // '/ =' --> '/='
3650 else if ((t0.type == lexer::token::e_div) && (t1.type == lexer::token::e_eq))
3651 {
3652 t.type = lexer::token::e_divass;
3653 t.value = "/=";
3654 t.position = t0.position;
3655
3656 return true;
3657 }
3658 // '% =' --> '%='
3659 else if ((t0.type == lexer::token::e_mod) && (t1.type == lexer::token::e_eq))
3660 {
3661 t.type = lexer::token::e_modass;
3662 t.value = "%=";
3663 t.position = t0.position;
3664
3665 return true;
3666 }
3667 // '> =' --> '>='
3668 else if ((t0.type == lexer::token::e_gt) && (t1.type == lexer::token::e_eq))
3669 {
3670 t.type = lexer::token::e_gte;
3671 t.value = ">=";
3672 t.position = t0.position;
3673
3674 return true;
3675 }
3676 // '< =' --> '<='
3677 else if ((t0.type == lexer::token::e_lt) && (t1.type == lexer::token::e_eq))
3678 {
3679 t.type = lexer::token::e_lte;
3680 t.value = "<=";
3681 t.position = t0.position;
3682
3683 return true;
3684 }
3685 // '= =' --> '=='
3686 else if ((t0.type == lexer::token::e_eq) && (t1.type == lexer::token::e_eq))
3687 {
3688 t.type = lexer::token::e_eq;
3689 t.value = "==";
3690 t.position = t0.position;
3691
3692 return true;
3693 }
3694 // '! =' --> '!='
3695 else if ((static_cast<details::char_t>(t0.type) == '!') && (t1.type == lexer::token::e_eq))
3696 {
3697 t.type = lexer::token::e_ne;
3698 t.value = "!=";
3699 t.position = t0.position;
3700
3701 return true;
3702 }
3703 // '< >' --> '<>'
3704 else if ((t0.type == lexer::token::e_lt) && (t1.type == lexer::token::e_gt))
3705 {
3706 t.type = lexer::token::e_ne;
3707 t.value = "<>";
3708 t.position = t0.position;
3709
3710 return true;
3711 }
3712 // '<= >' --> '<=>'
3713 else if ((t0.type == lexer::token::e_lte) && (t1.type == lexer::token::e_gt))
3714 {
3715 t.type = lexer::token::e_swap;
3716 t.value = "<=>";
3717 t.position = t0.position;
3718
3719 return true;
3720 }
3721 // '+ -' --> '-'
3722 else if ((t0.type == lexer::token::e_add) && (t1.type == lexer::token::e_sub))
3723 {
3724 t.type = lexer::token::e_sub;
3725 t.value = "-";
3726 t.position = t0.position;
3727
3728 return true;
3729 }
3730 // '- +' --> '-'
3731 else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_add))
3732 {
3733 t.type = lexer::token::e_sub;
3734 t.value = "-";
3735 t.position = t0.position;
3736
3737 return true;
3738 }
3739 // '- -' --> '+'
3740 else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_sub))
3741 {
3742 /*
3743 Note: May need to reconsider this when wanting to implement
3744 pre/postfix decrement operator
3745 */
3746 t.type = lexer::token::e_add;
3747 t.value = "+";
3748 t.position = t0.position;
3749
3750 return true;
3751 }
3752 else
3753 return false;
3754 }

References exprtk::lexer::token::e_add, exprtk::lexer::token::e_addass, exprtk::lexer::token::e_assign, exprtk::lexer::token::e_colon, exprtk::lexer::token::e_div, exprtk::lexer::token::e_divass, 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_modass, exprtk::lexer::token::e_mul, exprtk::lexer::token::e_mulass, exprtk::lexer::token::e_ne, exprtk::lexer::token::e_sub, exprtk::lexer::token::e_subass, exprtk::lexer::token::e_swap, and exprtk_override.


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