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

Classes

struct  function_definition
struct  parse_function_definition_impl

Public Types

typedef exprtk::symbol_table< T > symbol_table_t
typedef exprtk::expression< T > expression_t
typedef exprtk::parser< T > parser_t
typedef exprtk::parser_error::type error_t
typedef exprtk::function_compositor< T > compositor_t
typedef compositor_t::function function_t
typedef parser_t::settings_store settings_store_t
typedef exprtk::lexer::parser_helper prsrhlpr_t
typedef parser_t::dependent_entity_collector::symbol_t symbol_t
typedef std::vector< symbol_tsymbol_list_t
typedef exprtk::symbol_table< T > symbol_table_t
typedef exprtk::expression< T > expression_t
typedef exprtk::parser< T > parser_t
typedef exprtk::parser_error::type error_t
typedef exprtk::function_compositor< T > compositor_t
typedef compositor_t::function function_t
typedef parser_t::settings_store settings_store_t
typedef exprtk::lexer::parser_helper prsrhlpr_t
typedef parser_t::dependent_entity_collector::symbol_t symbol_t
typedef std::vector< symbol_tsymbol_list_t

Public Member Functions

 expression_processor ()
 ~expression_processor ()
bool & persist_symbol_table ()
bool & symbol_dump ()
bool & assignment_dump ()
bool & display_total_time ()
bool & display_total_compile_time ()
bool & enable_usr ()
bool & disable_local_vardef ()
void setup_symbol_table ()
void process (std::string program)
void process_from_file (const std::string &file_name)
void process_directive (std::string expression)
 expression_processor ()
 ~expression_processor ()
bool & persist_symbol_table ()
bool & symbol_dump ()
bool & assignment_dump ()
bool & display_total_time ()
bool & display_total_compile_time ()
bool & enable_usr ()
bool & disable_local_vardef ()
bool & disable_commutative_check ()
void setup_symbol_table ()
void process (std::string program)
void process_from_file (const std::string &file_name)
void process_directive (std::string expression)

Private Types

enum  func_parse_result {
  e_parse_unknown = 0 , e_parse_success = 1 , e_parse_partial = 2 , e_parse_lexfail = 4 ,
  e_parse_notfunc = 8 , e_parse_unknown = 0 , e_parse_success = 1 , e_parse_partial = 2 ,
  e_parse_lexfail = 4 , e_parse_notfunc = 8
}
enum  func_parse_result {
  e_parse_unknown = 0 , e_parse_success = 1 , e_parse_partial = 2 , e_parse_lexfail = 4 ,
  e_parse_notfunc = 8 , e_parse_unknown = 0 , e_parse_success = 1 , e_parse_partial = 2 ,
  e_parse_lexfail = 4 , e_parse_notfunc = 8
}

Private Member Functions

void print_results (const exprtk::results_context< T > &results)
void perform_symbol_dump (const symbol_list_t &variable_list) const
void process_batch_run (const std::string &batch_runs_cnt)
void process_multiline ()
func_parse_result parse_function_definition (std::string &func_def, function_definition &cf)
std::string read_from_stdin ()
void process_function_definition (const std::string &func_def_header, bool read_stdin=true)
void list_symbols ()
void clear_functions ()
std::string trim_whitespace (std::string s)
void process_disable_arithmetic (const std::string &arithmetic)
void process_disable_assignment (const std::string &assignment)
void process_disable_inequality (const std::string &inequality)
void process_enable_arithmetic (const std::string &arithmetic)
void process_enable_assignment (const std::string &assignment)
void process_enable_inequality (const std::string &inequality)
void print_results (const exprtk::results_context< T > &results)
void perform_symbol_dump (const symbol_list_t &variable_list) const
void process_batch_run (const std::string &batch_runs_cnt)
void process_multiline ()
func_parse_result parse_function_definition (std::string &func_def, function_definition &cf)
std::string read_from_stdin ()
void process_function_definition (const std::string &func_def_header, bool read_stdin=true)
void list_symbols ()
void clear_functions ()
std::string trim_whitespace (std::string s)
void process_disable_arithmetic (const std::string &arithmetic)
void process_disable_assignment (const std::string &assignment)
void process_disable_inequality (const std::string &inequality)
void process_enable_arithmetic (const std::string &arithmetic)
void process_enable_assignment (const std::string &assignment)
void process_enable_inequality (const std::string &inequality)

Private Attributes

bool persist_symbol_table_
bool symbol_dump_
bool assignment_dump_
bool display_total_time_
bool display_total_compile_time_
bool enable_usr_
bool disable_local_vardef_
std::size_t batch_runs_cnt_
symbol_table_t symbol_table_
symbol_table_t function_symbol_table_
parser_t parser_
compositor_t compositor_
putch< T > putch_
putint< T > putint_
rnd_01< T > rnd_01_
exprtk::rtl::io::file::package< T > fileio_package_
exprtk::rtl::vecops::package< T > vecops_package_
exprtk::rtl::io::package< T > io_package_
exprtk::polynomial< T, 1 > poly01_
exprtk::polynomial< T, 2 > poly02_
exprtk::polynomial< T, 3 > poly03_
exprtk::polynomial< T, 4 > poly04_
exprtk::polynomial< T, 5 > poly05_
exprtk::polynomial< T, 6 > poly06_
exprtk::polynomial< T, 7 > poly07_
exprtk::polynomial< T, 8 > poly08_
exprtk::polynomial< T, 9 > poly09_
exprtk::polynomial< T, 10 > poly10_
exprtk::polynomial< T, 11 > poly11_
exprtk::polynomial< T, 12 > poly12_
std::vector< function_definitionfunc_def_list_
std::map< std::string, typename settings_store_t::settings_arithmetic_oprarith_opr_
std::map< std::string, typename settings_store_t::settings_assignment_oprassign_opr_
std::map< std::string, typename settings_store_t::settings_inequality_oprinequality_opr_
bool disable_commutative_check_
vector_access_rtc vector_access_rtc_

Detailed Description

template<typename T>
class expression_processor< T >

Definition at line 78 of file exprtk_mpfr_repl.cpp.

Member Typedef Documentation

◆ compositor_t [1/2]

template<typename T>
typedef exprtk::function_compositor<T> expression_processor< T >::compositor_t

Definition at line 86 of file exprtk_mpfr_repl.cpp.

◆ compositor_t [2/2]

template<typename T>
typedef exprtk::function_compositor<T> expression_processor< T >::compositor_t

Definition at line 100 of file exprtk_repl.cpp.

◆ error_t [1/2]

template<typename T>
typedef exprtk::parser_error::type expression_processor< T >::error_t

Definition at line 85 of file exprtk_mpfr_repl.cpp.

◆ error_t [2/2]

template<typename T>
typedef exprtk::parser_error::type expression_processor< T >::error_t

Definition at line 99 of file exprtk_repl.cpp.

◆ expression_t [1/2]

template<typename T>
typedef exprtk::expression<T> expression_processor< T >::expression_t

Definition at line 83 of file exprtk_mpfr_repl.cpp.

◆ expression_t [2/2]

template<typename T>
typedef exprtk::expression<T> expression_processor< T >::expression_t

Definition at line 97 of file exprtk_repl.cpp.

◆ function_t [1/2]

template<typename T>
typedef compositor_t::function expression_processor< T >::function_t

Definition at line 87 of file exprtk_mpfr_repl.cpp.

◆ function_t [2/2]

template<typename T>
typedef compositor_t::function expression_processor< T >::function_t

Definition at line 101 of file exprtk_repl.cpp.

◆ parser_t [1/2]

template<typename T>
typedef exprtk::parser<T> expression_processor< T >::parser_t

Definition at line 84 of file exprtk_mpfr_repl.cpp.

◆ parser_t [2/2]

template<typename T>
typedef exprtk::parser<T> expression_processor< T >::parser_t

Definition at line 98 of file exprtk_repl.cpp.

◆ prsrhlpr_t [1/2]

template<typename T>
typedef exprtk::lexer::parser_helper expression_processor< T >::prsrhlpr_t

Definition at line 89 of file exprtk_mpfr_repl.cpp.

◆ prsrhlpr_t [2/2]

template<typename T>
typedef exprtk::lexer::parser_helper expression_processor< T >::prsrhlpr_t

Definition at line 103 of file exprtk_repl.cpp.

◆ settings_store_t [1/2]

template<typename T>
typedef parser_t::settings_store expression_processor< T >::settings_store_t

Definition at line 88 of file exprtk_mpfr_repl.cpp.

◆ settings_store_t [2/2]

template<typename T>
typedef parser_t::settings_store expression_processor< T >::settings_store_t

Definition at line 102 of file exprtk_repl.cpp.

◆ symbol_list_t [1/2]

template<typename T>
typedef std::vector<symbol_t> expression_processor< T >::symbol_list_t

Definition at line 92 of file exprtk_mpfr_repl.cpp.

◆ symbol_list_t [2/2]

template<typename T>
typedef std::vector<symbol_t> expression_processor< T >::symbol_list_t

Definition at line 106 of file exprtk_repl.cpp.

◆ symbol_t [1/2]

template<typename T>
typedef parser_t::dependent_entity_collector::symbol_t expression_processor< T >::symbol_t

Definition at line 91 of file exprtk_mpfr_repl.cpp.

◆ symbol_t [2/2]

template<typename T>
typedef parser_t::dependent_entity_collector::symbol_t expression_processor< T >::symbol_t

Definition at line 105 of file exprtk_repl.cpp.

◆ symbol_table_t [1/2]

template<typename T>
typedef exprtk::symbol_table<T> expression_processor< T >::symbol_table_t

Definition at line 82 of file exprtk_mpfr_repl.cpp.

◆ symbol_table_t [2/2]

template<typename T>
typedef exprtk::symbol_table<T> expression_processor< T >::symbol_table_t

Definition at line 96 of file exprtk_repl.cpp.

Member Enumeration Documentation

◆ func_parse_result [1/2]

template<typename T>
enum expression_processor::func_parse_result
private
Enumerator
e_parse_unknown 
e_parse_success 
e_parse_partial 
e_parse_lexfail 
e_parse_notfunc 
e_parse_unknown 
e_parse_success 
e_parse_partial 
e_parse_lexfail 
e_parse_notfunc 

Definition at line 607 of file exprtk_mpfr_repl.cpp.

◆ func_parse_result [2/2]

template<typename T>
enum expression_processor::func_parse_result
private
Enumerator
e_parse_unknown 
e_parse_success 
e_parse_partial 
e_parse_lexfail 
e_parse_notfunc 
e_parse_unknown 
e_parse_success 
e_parse_partial 
e_parse_lexfail 
e_parse_notfunc 

Definition at line 636 of file exprtk_repl.cpp.

637 {
638 e_parse_unknown = 0,
639 e_parse_success = 1,
640 e_parse_partial = 2,
641 e_parse_lexfail = 4,
643 };

Constructor & Destructor Documentation

◆ expression_processor() [1/2]

template<typename T>
expression_processor< T >::expression_processor ( )
inline

Definition at line 94 of file exprtk_mpfr_repl.cpp.

95 : persist_symbol_table_ (false),
96 symbol_dump_ (false),
97 assignment_dump_ (false),
98 display_total_time_ (false),
100 enable_usr_ (false),
101 disable_local_vardef_ (false),
102 batch_runs_cnt_ (0),
104 #ifdef exprtk_enable_repl_variables
105 ,s0_("abcdefghijk"),
106 s1_("abcdefghijk0123456789"),
107 s2_("012345678901234567890123456789"),
108 v0_({1,1,1}),
109 v1_({2,2,2,2,2}),
110 v2_({3,3,3,3,3,3,3}),
111 v3_({4,4,4,4,4,4,4,4}),
113 #endif
114 {
115 symbol_table_.add_constants();
116
117 symbol_table_.add_function("putch" ,putch_ );
118 symbol_table_.add_function("putint" ,putint_ );
119 symbol_table_.add_function("rnd_01" ,rnd_01_ );
120 symbol_table_.add_package (fileio_package_ );
121 symbol_table_.add_package (vecops_package_ );
122 symbol_table_.add_package (io_package_ );
123
124 symbol_table_.add_function("poly01", poly01_);
125 symbol_table_.add_function("poly02", poly02_);
126 symbol_table_.add_function("poly03", poly03_);
127 symbol_table_.add_function("poly04", poly04_);
128 symbol_table_.add_function("poly05", poly05_);
129 symbol_table_.add_function("poly06", poly06_);
130 symbol_table_.add_function("poly07", poly07_);
131 symbol_table_.add_function("poly08", poly08_);
132 symbol_table_.add_function("poly09", poly09_);
133 symbol_table_.add_function("poly10", poly10_);
134 symbol_table_.add_function("poly11", poly11_);
135 symbol_table_.add_function("poly12", poly12_);
136
137 #ifdef exprtk_enable_repl_variables
138 symbol_table_.add_stringvar("s0",s0_);
139 symbol_table_.add_stringvar("s1",s1_);
140 symbol_table_.add_stringvar("s2",s2_);
141 symbol_table_.add_vector ("v0",v0_);
142 symbol_table_.add_vector ("v1",v1_);
143 symbol_table_.add_vector ("v2",v2_);
144 symbol_table_.add_vector ("v3",v3_);
145
147 symbol_table_.add_vector ("vv",vv_);
148 #endif
149
150 compositor_.add_auxiliary_symtab(symbol_table_);
151
158
165
174
176 }
exprtk::rtl::io::file::package< T > fileio_package_
exprtk::polynomial< T, 6 > poly06_
exprtk::polynomial< T, 5 > poly05_
std::map< std::string, typename settings_store_t::settings_arithmetic_opr > arith_opr_
exprtk::polynomial< T, 7 > poly07_
exprtk::rtl::vecops::package< T > vecops_package_
exprtk::polynomial< T, 4 > poly04_
exprtk::polynomial< T, 8 > poly08_
std::map< std::string, typename settings_store_t::settings_assignment_opr > assign_opr_
exprtk::polynomial< T, 3 > poly03_
exprtk::polynomial< T, 9 > poly09_
std::map< std::string, typename settings_store_t::settings_inequality_opr > inequality_opr_
exprtk::polynomial< T, 2 > poly02_
exprtk::polynomial< T, 12 > poly12_
symbol_table_t function_symbol_table_
exprtk::rtl::io::package< T > io_package_
exprtk::polynomial< T, 11 > poly11_
exprtk::polynomial< T, 10 > poly10_
exprtk::polynomial< T, 1 > poly01_
vector_view< T > make_vector_view(T *data, const std::size_t size, const std::size_t offset=0)
Definition exprtk.hpp:4783

References assignment_dump_, batch_runs_cnt_, compositor_, disable_local_vardef_, display_total_compile_time_, display_total_time_, enable_usr_, function_symbol_table_, persist_symbol_table_, and symbol_dump_.

◆ ~expression_processor() [1/2]

template<typename T>
expression_processor< T >::~expression_processor ( )
inline

Definition at line 178 of file exprtk_mpfr_repl.cpp.

179 {
181 }

References clear_functions().

Here is the call graph for this function:

◆ expression_processor() [2/2]

template<typename T>
expression_processor< T >::expression_processor ( )
inline

Definition at line 108 of file exprtk_repl.cpp.

109 : persist_symbol_table_ (false)
110 , symbol_dump_ (false)
111 , assignment_dump_ (false)
112 , display_total_time_ (false)
114 , enable_usr_ (false)
115 , disable_local_vardef_ (false)
117 , batch_runs_cnt_ (0 )
119 #ifdef exprtk_enable_repl_variables
120 , s0_("abcdefghijk")
121 , s1_("abcdefghijk0123456789")
122 , s2_("012345678901234567890123456789")
123 , v0_({ 1, 1, 1 })
124 , v1_({ 2, 2, 2, 2, 2})
125 , v2_({ 3, 3, 3, 3, 3, 3, 3})
126 , v3_({ 4, 4, 4, 4, 4, 4, 4, 4})
128 #endif
129 {
130 symbol_table_.add_constants();
131
132 symbol_table_.add_function("putch" , putch_ );
133 symbol_table_.add_function("putint" , putint_ );
134 symbol_table_.add_function("rnd_01" , rnd_01_ );
135 symbol_table_.add_package (fileio_package_ );
136 symbol_table_.add_package (vecops_package_ );
137 symbol_table_.add_package (io_package_ );
138
139 symbol_table_.add_function("poly01", poly01_);
140 symbol_table_.add_function("poly02", poly02_);
141 symbol_table_.add_function("poly03", poly03_);
142 symbol_table_.add_function("poly04", poly04_);
143 symbol_table_.add_function("poly05", poly05_);
144 symbol_table_.add_function("poly06", poly06_);
145 symbol_table_.add_function("poly07", poly07_);
146 symbol_table_.add_function("poly08", poly08_);
147 symbol_table_.add_function("poly09", poly09_);
148 symbol_table_.add_function("poly10", poly10_);
149 symbol_table_.add_function("poly11", poly11_);
150 symbol_table_.add_function("poly12", poly12_);
151
152 #ifdef exprtk_enable_repl_variables
153 symbol_table_.add_stringvar("s0", s0_);
154 symbol_table_.add_stringvar("s1", s1_);
155 symbol_table_.add_stringvar("s2", s2_);
156 symbol_table_.add_vector ("v0", v0_);
157 symbol_table_.add_vector ("v1", v1_);
158 symbol_table_.add_vector ("v2", v2_);
159 symbol_table_.add_vector ("v3", v3_);
160
162 symbol_table_.add_vector ("vv", vv_);
163 #endif
164
165 compositor_.add_auxiliary_symtab(symbol_table_);
166
173
180
189
191 }

References assignment_dump_, batch_runs_cnt_, compositor_, disable_commutative_check_, disable_local_vardef_, display_total_compile_time_, display_total_time_, enable_usr_, function_symbol_table_, persist_symbol_table_, and symbol_dump_.

◆ ~expression_processor() [2/2]

template<typename T>
expression_processor< T >::~expression_processor ( )
inline

Definition at line 193 of file exprtk_repl.cpp.

194 {
196 }

References clear_functions().

Here is the call graph for this function:

Member Function Documentation

◆ assignment_dump() [1/2]

template<typename T>
bool & expression_processor< T >::assignment_dump ( )
inline

Definition at line 193 of file exprtk_mpfr_repl.cpp.

194 {
195 return assignment_dump_;
196 }

References assignment_dump_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ assignment_dump() [2/2]

template<typename T>
bool & expression_processor< T >::assignment_dump ( )
inline

Definition at line 208 of file exprtk_repl.cpp.

209 {
210 return assignment_dump_;
211 }

References assignment_dump_.

◆ clear_functions() [1/2]

template<typename T>
void expression_processor< T >::clear_functions ( )
inlineprivate

Definition at line 848 of file exprtk_mpfr_repl.cpp.

849 {
850 func_def_list_.clear();
852 }
std::vector< function_definition > func_def_list_

References func_def_list_, and function_symbol_table_.

Referenced by process_directive(), and ~expression_processor().

Here is the caller graph for this function:

◆ clear_functions() [2/2]

template<typename T>
void expression_processor< T >::clear_functions ( )
inlineprivate

Definition at line 877 of file exprtk_repl.cpp.

878 {
879 func_def_list_.clear();
881 }

References func_def_list_, and function_symbol_table_.

◆ disable_commutative_check()

template<typename T>
bool & expression_processor< T >::disable_commutative_check ( )
inline

Definition at line 233 of file exprtk_repl.cpp.

234 {
236 }

References disable_commutative_check_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ disable_local_vardef() [1/2]

template<typename T>
bool & expression_processor< T >::disable_local_vardef ( )
inline

Definition at line 213 of file exprtk_mpfr_repl.cpp.

214 {
216 }

References disable_local_vardef_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ disable_local_vardef() [2/2]

template<typename T>
bool & expression_processor< T >::disable_local_vardef ( )
inline

Definition at line 228 of file exprtk_repl.cpp.

229 {
231 }

References disable_local_vardef_.

◆ display_total_compile_time() [1/2]

template<typename T>
bool & expression_processor< T >::display_total_compile_time ( )
inline

Definition at line 203 of file exprtk_mpfr_repl.cpp.

204 {
206 }

References display_total_compile_time_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ display_total_compile_time() [2/2]

template<typename T>
bool & expression_processor< T >::display_total_compile_time ( )
inline

Definition at line 218 of file exprtk_repl.cpp.

219 {
221 }

References display_total_compile_time_.

◆ display_total_time() [1/2]

template<typename T>
bool & expression_processor< T >::display_total_time ( )
inline

Definition at line 198 of file exprtk_mpfr_repl.cpp.

199 {
200 return display_total_time_;
201 }

References display_total_time_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ display_total_time() [2/2]

template<typename T>
bool & expression_processor< T >::display_total_time ( )
inline

Definition at line 213 of file exprtk_repl.cpp.

214 {
215 return display_total_time_;
216 }

References display_total_time_.

◆ enable_usr() [1/2]

template<typename T>
bool & expression_processor< T >::enable_usr ( )
inline

Definition at line 208 of file exprtk_mpfr_repl.cpp.

209 {
210 return enable_usr_;
211 }

References enable_usr_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ enable_usr() [2/2]

template<typename T>
bool & expression_processor< T >::enable_usr ( )
inline

Definition at line 223 of file exprtk_repl.cpp.

224 {
225 return enable_usr_;
226 }

References enable_usr_.

◆ list_symbols() [1/2]

template<typename T>
void expression_processor< T >::list_symbols ( )
inlineprivate

Definition at line 817 of file exprtk_mpfr_repl.cpp.

818 {
820 symbol_table_.get_variable_list(variable_list);
821
823
824 for (std::size_t i = 0; i < variable_list.size(); ++i)
825 {
827 }
828
829 for (std::size_t i = 0; i < variable_list.size(); ++i)
830 {
831 int pad_length = 0;
832
834 {
835 pad_length = static_cast<int>(max_varname_length - variable_list[i].first.size());
836 }
837
838 printf("%02d %s%*.*s %s\n",
839 static_cast<unsigned int>(i),
840 variable_list[i].first.c_str(),
843 std::string(max_varname_length,' ').c_str(),
844 variable_list[i].second.toString().c_str());
845 }
846 }

References symbol_table_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ list_symbols() [2/2]

template<typename T>
void expression_processor< T >::list_symbols ( )
inlineprivate

Definition at line 846 of file exprtk_repl.cpp.

847 {
849 symbol_table_.get_variable_list(variable_list);
850
852
853 for (std::size_t i = 0; i < variable_list.size(); ++i)
854 {
856 }
857
858 for (std::size_t i = 0; i < variable_list.size(); ++i)
859 {
860 int pad_length = 0;
861
863 {
864 pad_length = static_cast<int>(max_varname_length - variable_list[i].first.size());
865 }
866
867 printf("%02d %s%*.*s %25.10f\n",
868 static_cast<unsigned int>(i),
869 variable_list[i].first.c_str(),
872 std::string(max_varname_length,' ').c_str(),
873 variable_list[i].second);
874 }
875 }

References symbol_table_.

◆ parse_function_definition() [1/2]

template<typename T>
func_parse_result expression_processor< T >::parse_function_definition ( std::string & func_def,
function_definition & cf )
inlineprivate

Definition at line 703 of file exprtk_mpfr_repl.cpp.

References expression_processor< T >::parse_function_definition_impl::process().

Referenced by process_function_definition().

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

◆ parse_function_definition() [2/2]

template<typename T>
func_parse_result expression_processor< T >::parse_function_definition ( std::string & func_def,
function_definition & cf )
inlineprivate

Definition at line 732 of file exprtk_repl.cpp.

◆ perform_symbol_dump() [1/2]

template<typename T>
void expression_processor< T >::perform_symbol_dump ( const symbol_list_t & variable_list) const
inlineprivate

Definition at line 520 of file exprtk_mpfr_repl.cpp.

521 {
522 for (std::size_t i = 0; i < variable_list.size(); ++i)
523 {
524 const symbol_t& symbol = variable_list[i];
525
526 switch (symbol.second)
527 {
528 case parser_t::e_st_variable : printf("[%02d] Variable %s\n",
529 static_cast<int>(i),symbol.first.c_str());
530 break;
531
532 case parser_t::e_st_vector : printf("[%02d] Vector %s\n",
533 static_cast<int>(i),symbol.first.c_str());
534 break;
535
536 case parser_t::e_st_string : printf("[%02d] String %s\n",
537 static_cast<int>(i),symbol.first.c_str());
538 break;
539
540 case parser_t::e_st_function : printf("[%02d] Function %s\n",
541 static_cast<int>(i),symbol.first.c_str());
542 break;
543
545 : printf("[%02d] LocalVar %s\n",
546 static_cast<int>(i),symbol.first.c_str());
547 break;
548
550 : printf("[%02d] LocalVec %s\n",
551 static_cast<int>(i),symbol.first.c_str());
552 break;
553
555 : printf("[%02d] LocalStr %s\n",
556 static_cast<int>(i),symbol.first.c_str());
557 break;
558
559 default : break;
560 }
561 }
562 }
parser_t::dependent_entity_collector::symbol_t symbol_t

References exprtk::parser< T >::e_st_function, exprtk::parser< T >::e_st_local_string, exprtk::parser< T >::e_st_local_variable, exprtk::parser< T >::e_st_local_vector, exprtk::parser< T >::e_st_string, exprtk::parser< T >::e_st_variable, and exprtk::parser< T >::e_st_vector.

Referenced by process().

Here is the caller graph for this function:

◆ perform_symbol_dump() [2/2]

template<typename T>
void expression_processor< T >::perform_symbol_dump ( const symbol_list_t & variable_list) const
inlineprivate

Definition at line 549 of file exprtk_repl.cpp.

550 {
551 for (std::size_t i = 0; i < variable_list.size(); ++i)
552 {
553 const symbol_t& symbol = variable_list[i];
554
555 switch (symbol.second)
556 {
557 case parser_t::e_st_variable : printf("[%02d] Variable %s\n",
558 static_cast<int>(i),symbol.first.c_str());
559 break;
560
561 case parser_t::e_st_vector : printf("[%02d] Vector %s\n",
562 static_cast<int>(i),symbol.first.c_str());
563 break;
564
565 case parser_t::e_st_string : printf("[%02d] String %s\n",
566 static_cast<int>(i),symbol.first.c_str());
567 break;
568
569 case parser_t::e_st_function : printf("[%02d] Function %s\n",
570 static_cast<int>(i),symbol.first.c_str());
571 break;
572
574 : printf("[%02d] LocalVar %s\n",
575 static_cast<int>(i),symbol.first.c_str());
576 break;
577
579 : printf("[%02d] LocalVec %s\n",
580 static_cast<int>(i),symbol.first.c_str());
581 break;
582
584 : printf("[%02d] LocalStr %s\n",
585 static_cast<int>(i),symbol.first.c_str());
586 break;
587
588 default : break;
589 }
590 }
591 }

References exprtk::parser< T >::e_st_function, exprtk::parser< T >::e_st_local_string, exprtk::parser< T >::e_st_local_variable, exprtk::parser< T >::e_st_local_vector, exprtk::parser< T >::e_st_string, exprtk::parser< T >::e_st_variable, and exprtk::parser< T >::e_st_vector.

◆ persist_symbol_table() [1/2]

template<typename T>
bool & expression_processor< T >::persist_symbol_table ( )
inline

Definition at line 183 of file exprtk_mpfr_repl.cpp.

184 {
186 }

References persist_symbol_table_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ persist_symbol_table() [2/2]

template<typename T>
bool & expression_processor< T >::persist_symbol_table ( )
inline

Definition at line 198 of file exprtk_repl.cpp.

199 {
201 }

References persist_symbol_table_.

◆ print_results() [1/2]

template<typename T>
void expression_processor< T >::print_results ( const exprtk::results_context< T > & results)
inlineprivate

Definition at line 468 of file exprtk_mpfr_repl.cpp.

469 {
472 typedef typename type_t::scalar_view scalar_t;
473 typedef typename type_t::vector_view vector_t;
474 typedef typename type_t::string_view string_t;
475
477
478 printf("%s\n",std::string(10,'-').c_str());
479 printf("Return Results (#%d)\n",static_cast<int>(results.count()));
480
481 for (std::size_t i = 0; i < results.count(); ++i)
482 {
483 printf("[%02d] ",static_cast<int>(i));
484
485 type_t t = results[i];
486
487 switch (t.type)
488 {
489 case type_t::e_scalar : printf("Scalar\t");
491 break;
492
493 case type_t::e_vector : {
494 printf("Vector\t");
496
497 for (std::size_t x = 0; x < vector.size(); ++x)
498 {
500
501 if ((x + 1) < vector.size())
502 printf(" ");
503 }
504 }
505 break;
506
507 case type_t::e_string : printf("String\t");
508 printf("%s",to_str(string_t(t)).c_str());
509 break;
510
511 default : continue;
512 }
513
514 printf("\n");
515 }
516
517 printf("%s\n",std::string(10,'-').c_str());
518 }
void print_type(const std::string &fmt, const T v, exprtk::details::numeric::details::real_type_tag)
Definition exprtk.hpp:44170

References exprtk::results_context< T >::count(), and exprtk::rtl::io::details::print_type().

Referenced by process().

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

◆ print_results() [2/2]

template<typename T>
void expression_processor< T >::print_results ( const exprtk::results_context< T > & results)
inlineprivate

Definition at line 497 of file exprtk_repl.cpp.

498 {
501 typedef typename type_t::scalar_view scalar_t;
502 typedef typename type_t::vector_view vector_t;
503 typedef typename type_t::string_view string_t;
504
506
507 printf("%s\n",std::string(10,'-').c_str());
508 printf("Return Results (#%d)\n",static_cast<int>(results.count()));
509
510 for (std::size_t i = 0; i < results.count(); ++i)
511 {
512 printf("[%02d] ",static_cast<int>(i));
513
514 type_t t = results[i];
515
516 switch (t.type)
517 {
518 case type_t::e_scalar : printf("Scalar\t");
520 break;
521
522 case type_t::e_vector : {
523 printf("Vector\t");
525
526 for (std::size_t x = 0; x < vector.size(); ++x)
527 {
529
530 if ((x + 1) < vector.size())
531 printf(" ");
532 }
533 }
534 break;
535
536 case type_t::e_string : printf("String\t");
537 printf("%s",to_str(string_t(t)).c_str());
538 break;
539
540 default : continue;
541 }
542
543 printf("\n");
544 }
545
546 printf("%s\n",std::string(10,'-').c_str());
547 }

References exprtk::results_context< T >::count(), and exprtk::rtl::io::details::print_type().

Here is the call graph for this function:

◆ process() [1/2]

template<typename T>
void expression_processor< T >::process ( std::string program)
inline

Definition at line 228 of file exprtk_mpfr_repl.cpp.

229 {
231
232 if (program.empty())
233 return;
234
236
238 expression.register_symbol_table(symbol_table_);
239 expression.register_symbol_table(function_symbol_table_);
240
242 compile_timer.start();
243
244 if (enable_usr_)
245 parser_.enable_unknown_symbol_resolver();
246 else
247 parser_.disable_unknown_symbol_resolver();
248
250 parser_.settings().disable_local_vardef();
251 else
252 parser_.settings().enable_local_vardef();
253
254 parser_.dec().collect_variables() = symbol_dump_;
255 parser_.dec().collect_functions() = symbol_dump_;
256
257 parser_.dec().collect_assignments() = assignment_dump_;
258
259 if (!parser_.compile(program,expression))
260 {
261 printf("Error: %s\tExpression:%c%s\n",
262 parser_.error().c_str(),
263 ((std::string::npos != program.find_first_of('\n')) ? '\n' : ' '),
264 ((program.size() < 200) ? program.c_str() : "....."));
265
266 for (std::size_t i = 0; i < parser_.error_count(); ++i)
267 {
268 error_t error = parser_.get_error(i);
269
270 printf("Err No.: %02d Pos: %02d Type: [%14s] Msg: %s\n",
271 static_cast<unsigned int>(i),
272 static_cast<unsigned int>(error.token.position),
274 error.diagnostic.c_str());
275
276 if (
277 (0 == i) &&
279 )
280 {
281 printf("Error (line: %d column: %d)\n",
282 static_cast<unsigned int>(error.line_no),
283 static_cast<unsigned int>(error.column_no));
284
285 printf("%s \n",error.error_line.c_str());
286 printf("%s^\n",std::string(error.column_no,'~').c_str());
287 }
288 }
289
290 return;
291 }
292
293 compile_timer.stop();
294
296 {
297 printf("\nCompile time: %6.3fms\n",compile_timer.time() * 1000.0);
298 }
299
300 if (batch_runs_cnt_)
301 {
303
306
307 T result = T(0);
308
309 total_timer.start();
310
311 for (std::size_t i = 0; i < batch_runs_cnt_; ++i)
312 {
313 timer.start();
314
315 result = expression.value();
316
317 timer.stop();
318
319 timings[i] = timer.time() * 1000.0;
320 }
321
322 total_timer.stop();
323
324 printf("\nresult: %s\n",result.toString().c_str());
325
326 std::sort(timings.begin(),timings.end());
327
328 printf("\nRuns: %4d Time min %7.3fms\tmax: %7.3fms\tavg: %7.3fms\ttot: %7.3fms 90%%:%7.3fms\n",
329 static_cast<unsigned int>(batch_runs_cnt_),
330 timings.front(),
331 timings.back (),
332 std::accumulate(timings.begin(),timings.end(),0.0) / timings.size(),
333 total_timer.time() * 1000.0,
334 timings[static_cast<int>(timings.size() * 0.90)]);
335
336 return;
337 }
338
340 timer.start();
341
342 T result = expression.value();
343
344 timer.stop();
345
346 if (expression.results().count())
347 {
348 print_results(expression.results());
349 }
350
351 printf("\nresult: %s\n",result.toString().c_str());
352
354 {
355 printf("\nTotal time: %6.3fms\n",timer.time() * 1000.0);
356 }
357
358 if (symbol_dump_)
359 {
361
362 parser_.dec().symbols(symbol_list);
363
364 printf("------ Symbols ------\n");
366 printf("---------------------\n");
367 }
368
370 {
372
373 parser_.dec().assignment_symbols(assignment_list);
374
375 printf("---- Assignments ----\n");
377 printf("---------------------\n");
378 }
379 }
void print_results(const exprtk::results_context< T > &results)
exprtk::expression< T > expression_t
void perform_symbol_dump(const symbol_list_t &variable_list) const
std::vector< symbol_t > symbol_list_t
std::string trim_whitespace(std::string s)
exprtk::parser_error::type error_t

References assignment_dump_, batch_runs_cnt_, exprtk::parser_error::type::column_no, exprtk::results_context< T >::count(), exprtk::parser_error::type::diagnostic, disable_local_vardef_, display_total_compile_time_, display_total_time_, enable_usr_, exprtk::parser_error::type::error_line, function_symbol_table_, exprtk::parser_error::type::line_no, exprtk::parser_error::type::mode, parser_, perform_symbol_dump(), exprtk::lexer::token::position, print_results(), exprtk::expression< T >::register_symbol_table(), exprtk::expression< T >::results(), setup_symbol_table(), exprtk::timer::start(), exprtk::timer::stop(), symbol_dump_, symbol_table_, exprtk::timer::time(), exprtk::parser_error::to_str(), exprtk::parser_error::type::token, trim_whitespace(), exprtk::parser_error::update_error(), and exprtk::expression< T >::value().

Referenced by process_function_definition(), process_multiline(), and repl().

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

◆ process() [2/2]

template<typename T>
void expression_processor< T >::process ( std::string program)
inline

Definition at line 248 of file exprtk_repl.cpp.

249 {
251
252 if (program.empty())
253 return;
254
256
258 expression.register_symbol_table(symbol_table_);
259 expression.register_symbol_table(function_symbol_table_);
260
262 compile_timer.start();
263
264 if (enable_usr_)
265 parser_.enable_unknown_symbol_resolver();
266 else
267 parser_.disable_unknown_symbol_resolver();
268
270 parser_.settings().disable_local_vardef();
271 else
272 parser_.settings().enable_local_vardef();
273
275 parser_.settings().disable_commutative_check();
276 else
277 parser_.settings().enable_commutative_check();
278
279 parser_.dec().collect_variables() = symbol_dump_;
280 parser_.dec().collect_functions() = symbol_dump_;
281
282 parser_.dec().collect_assignments() = assignment_dump_;
283
284 parser_.register_vector_access_runtime_check(vector_access_rtc_);
285
286 if (!parser_.compile(program,expression))
287 {
288 printf("Error: %s\tExpression:%c%s\n",
289 parser_.error().c_str(),
290 ((std::string::npos != program.find_first_of('\n')) ? '\n' : ' '),
291 ((program.size() < 200) ? program.c_str() : "....."));
292
293 for (std::size_t i = 0; i < parser_.error_count(); ++i)
294 {
295 error_t error = parser_.get_error(i);
296
297 printf("Err No.: %02d Pos: %02d Type: [%14s] Msg: %s\n",
298 static_cast<unsigned int>(i),
299 static_cast<unsigned int>(error.token.position),
301 error.diagnostic.c_str());
302
303 if (
304 (0 == i) &&
306 )
307 {
308 printf("Error (line: %d column: %d)\n",
309 static_cast<unsigned int>(error.line_no),
310 static_cast<unsigned int>(error.column_no));
311
312 printf("%s \n",error.error_line.c_str());
313 printf("%s^\n",std::string(error.column_no,'~').c_str());
314 }
315 }
316
317 return;
318 }
319
320 compile_timer.stop();
321
323 {
324 printf("\nCompile time: %6.3fms\n",compile_timer.time() * 1000.0);
325 }
326
327 if (batch_runs_cnt_)
328 {
330
333
334 T result = T(0);
335
336 total_timer.start();
337
338 for (std::size_t i = 0; i < batch_runs_cnt_; ++i)
339 {
340 timer.start();
341
342 result = expression.value();
343
344 timer.stop();
345
346 timings[i] = timer.time() * 1000.0;
347 }
348
349 total_timer.stop();
350
351 printf("\nResult: %15.9f\n",result);
352
353 std::sort(timings.begin(),timings.end());
354
355 printf("\nRuns: %4d Time min: %7.3fms max: %7.3fms avg: %7.3fms tot: %7.3fms 90%%:%7.3fms\n",
356 static_cast<unsigned int>(batch_runs_cnt_),
357 timings.front(),
358 timings.back (),
359 std::accumulate(timings.begin(),timings.end(),0.0) / timings.size(),
360 total_timer.time() * 1000.0,
361 timings[static_cast<int>(timings.size() * 0.90)]);
362
363 return;
364 }
365
367 timer.start();
368
369 const T result = expression.value();
370
371 timer.stop();
372
373 if (expression.results().count())
374 {
375 print_results(expression.results());
376 }
377
378 printf("\nResult: %15.9f\n",result);
379
381 {
382 printf("\nTotal time: %6.3fms\n",timer.time() * 1000.0);
383 }
384
385 if (symbol_dump_)
386 {
388
389 parser_.dec().symbols(symbol_list);
390
391 printf("------ Symbols ------\n");
393 printf("---------------------\n");
394 }
395
397 {
399
400 parser_.dec().assignment_symbols(assignment_list);
401
402 printf("---- Assignments ----\n");
404 printf("---------------------\n");
405 }
406 }
vector_access_rtc vector_access_rtc_

References assignment_dump_, batch_runs_cnt_, exprtk::parser_error::type::column_no, exprtk::results_context< T >::count(), exprtk::parser_error::type::diagnostic, disable_commutative_check_, disable_local_vardef_, display_total_compile_time_, display_total_time_, enable_usr_, exprtk::parser_error::type::error_line, function_symbol_table_, exprtk::parser_error::type::line_no, exprtk::parser_error::type::mode, parser_, perform_symbol_dump(), exprtk::lexer::token::position, print_results(), exprtk::expression< T >::register_symbol_table(), exprtk::expression< T >::results(), setup_symbol_table(), exprtk::timer::start(), exprtk::timer::stop(), symbol_dump_, symbol_table_, exprtk::timer::time(), exprtk::parser_error::to_str(), exprtk::parser_error::type::token, trim_whitespace(), exprtk::parser_error::update_error(), exprtk::expression< T >::value(), and vector_access_rtc_.

Here is the call graph for this function:

◆ process_batch_run() [1/2]

template<typename T>
void expression_processor< T >::process_batch_run ( const std::string & batch_runs_cnt)
inlineprivate

Definition at line 564 of file exprtk_mpfr_repl.cpp.

565 {
567 }

References batch_runs_cnt_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ process_batch_run() [2/2]

template<typename T>
void expression_processor< T >::process_batch_run ( const std::string & batch_runs_cnt)
inlineprivate

Definition at line 593 of file exprtk_repl.cpp.

594 {
596 }

References batch_runs_cnt_.

◆ process_directive() [1/2]

template<typename T>
void expression_processor< T >::process_directive ( std::string expression)
inline

Definition at line 402 of file exprtk_mpfr_repl.cpp.

403 {
405
406 if ('$' != expression[0])
407 return;
408 else if ("$enable_cache" == expression)
409 persist_symbol_table() = true;
410 else if ("$disable_cache" == expression)
411 persist_symbol_table() = false;
412 else if ("$enable_symbol_dump" == expression)
413 symbol_dump() = true;
414 else if ("$disable_symbol_dump" == expression)
415 symbol_dump() = false;
416 else if ("$enable_assignment_dump" == expression)
417 assignment_dump() = true;
418 else if ("$disable_assignment_dump" == expression)
419 assignment_dump() = false;
420 else if ("$enable_timer" == expression)
421 display_total_time() = true;
422 else if ("$enable_compile_timer" == expression)
424 else if ("$disable_timer" == expression)
425 display_total_time() = false;
426 else if ("$disable_compile_timer" == expression)
428 else if ("$enable_usr" == expression)
429 enable_usr() = true;
430 else if ("$disable_usr" == expression)
431 enable_usr() = false;
432 else if ("$enable_local_vardef" == expression)
433 disable_local_vardef() = false;
434 else if ("$disable_local_vardef" == expression)
435 disable_local_vardef() = true;
436 else if ("$list_vars" == expression)
437 list_symbols();
438 else if ("$clear_functions" == expression)
440 else if ((0 == expression.find("$set_mpfr_prec ")) && (expression.size() > 15))
441 mpfr::mpreal::set_default_prec(atoi(expression.substr(14,expression.size() - 14).c_str()));
442 else if ((0 == expression.find("$batch_run ")) && (expression.size() > 12))
443 process_batch_run(expression.substr(11,expression.size() - 11));
444 else if ((0 == expression.find("$load ")) && (expression.size() > 7))
445 process_from_file(expression.substr(6,expression.size() - 6));
446 else if ((0 == expression.find("$disable arithmetic ")) && (expression.size() >= 21))
447 process_disable_arithmetic(expression.substr(20,expression.size() - 20));
448 else if ((0 == expression.find("$disable assignment ")) && (expression.size() >= 21))
449 process_disable_assignment(expression.substr(20,expression.size() - 20));
450 else if ((0 == expression.find("$disable inequality ")) && (expression.size() >= 21))
451 process_disable_inequality(expression.substr(20,expression.size() - 20));
452 else if ((0 == expression.find("$enable arithmetic ")) && (expression.size() >= 20))
453 process_enable_arithmetic(expression.substr(19,expression.size() - 19));
454 else if ((0 == expression.find("$enable assignment ")) && (expression.size() >= 20))
455 process_enable_assignment(expression.substr(19,expression.size() - 19));
456 else if ((0 == expression.find("$enable inequality ")) && (expression.size() >= 20))
457 process_enable_inequality(expression.substr(19,expression.size() - 19));
458 else if ("$begin" == expression)
460 else if (0 == expression.find("$function"))
462 else
463 printf("\nERROR - Invalid directive: %s\n",expression.c_str());
464 }
void process_enable_inequality(const std::string &inequality)
void process_disable_inequality(const std::string &inequality)
void process_enable_assignment(const std::string &assignment)
void process_batch_run(const std::string &batch_runs_cnt)
void process_disable_arithmetic(const std::string &arithmetic)
void process_disable_assignment(const std::string &assignment)
void process_function_definition(const std::string &func_def_header, bool read_stdin=true)
void process_from_file(const std::string &file_name)
void process_enable_arithmetic(const std::string &arithmetic)

References assignment_dump(), clear_functions(), disable_local_vardef(), display_total_compile_time(), display_total_time(), enable_usr(), list_symbols(), persist_symbol_table(), process_batch_run(), process_disable_arithmetic(), process_disable_assignment(), process_disable_inequality(), process_enable_arithmetic(), process_enable_assignment(), process_enable_inequality(), process_from_file(), process_function_definition(), process_multiline(), symbol_dump(), and trim_whitespace().

Referenced by repl().

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

◆ process_directive() [2/2]

template<typename T>
void expression_processor< T >::process_directive ( std::string expression)
inline

Definition at line 429 of file exprtk_repl.cpp.

430 {
432
433 if ('$' != expression[0])
434 return;
435 else if ("$enable_cache" == expression)
436 persist_symbol_table() = true;
437 else if ("$disable_cache" == expression)
438 persist_symbol_table() = false;
439 else if ("$enable_symbol_dump" == expression)
440 symbol_dump() = true;
441 else if ("$disable_symbol_dump" == expression)
442 symbol_dump() = false;
443 else if ("$enable_assignment_dump" == expression)
444 assignment_dump() = true;
445 else if ("$disable_assignment_dump" == expression)
446 assignment_dump() = false;
447 else if ("$enable_timer" == expression)
448 display_total_time() = true;
449 else if ("$enable_compile_timer" == expression)
451 else if ("$disable_timer" == expression)
452 display_total_time() = false;
453 else if ("$disable_compile_timer" == expression)
455 else if ("$enable_usr" == expression)
456 enable_usr() = true;
457 else if ("$disable_usr" == expression)
458 enable_usr() = false;
459 else if ("$enable_local_vardef" == expression)
460 disable_local_vardef() = false;
461 else if ("$disable_local_vardef" == expression)
462 disable_local_vardef() = true;
463 else if ("$enable_commutative_check" == expression)
465 else if ("$disable_commutative_check" == expression)
467 else if ("$list_vars" == expression)
468 list_symbols();
469 else if ("$clear_functions" == expression)
471 else if ((0 == expression.find("$batch_run ")) && (expression.size() >= 12))
472 process_batch_run(expression.substr(11,expression.size() - 11));
473 else if ((0 == expression.find("$load ")) && (expression.size() > 7))
474 process_from_file(expression.substr(6,expression.size() - 6));
475 else if ((0 == expression.find("$disable arithmetic ")) && (expression.size() >= 21))
476 process_disable_arithmetic(expression.substr(20,expression.size() - 20));
477 else if ((0 == expression.find("$disable assignment ")) && (expression.size() >= 21))
478 process_disable_assignment(expression.substr(20,expression.size() - 20));
479 else if ((0 == expression.find("$disable inequality ")) && (expression.size() >= 21))
480 process_disable_inequality(expression.substr(20,expression.size() - 20));
481 else if ((0 == expression.find("$enable arithmetic ")) && (expression.size() >= 20))
482 process_enable_arithmetic(expression.substr(19,expression.size() - 19));
483 else if ((0 == expression.find("$enable assignment ")) && (expression.size() >= 20))
484 process_enable_assignment(expression.substr(19,expression.size() - 19));
485 else if ((0 == expression.find("$enable inequality ")) && (expression.size() >= 20))
486 process_enable_inequality(expression.substr(19,expression.size() - 19));
487 else if ("$begin" == expression)
489 else if (0 == expression.find("$function"))
491 else
492 printf("\nERROR - Invalid directive: %s\n",expression.c_str());
493 }
bool & disable_commutative_check()

References assignment_dump(), clear_functions(), disable_commutative_check(), disable_local_vardef(), display_total_compile_time(), display_total_time(), enable_usr(), list_symbols(), persist_symbol_table(), process_batch_run(), process_disable_arithmetic(), process_disable_assignment(), process_disable_inequality(), process_enable_arithmetic(), process_enable_assignment(), process_enable_inequality(), process_from_file(), process_function_definition(), process_multiline(), symbol_dump(), and trim_whitespace().

Here is the call graph for this function:

◆ process_disable_arithmetic() [1/2]

template<typename T>
void expression_processor< T >::process_disable_arithmetic ( const std::string & arithmetic)
inlineprivate

Definition at line 876 of file exprtk_mpfr_repl.cpp.

877 {
879
880 if (arith_opr_.end() != (itr = arith_opr_.find(arithmetic)))
881 {
882 parser_.settings()
883 .disable_arithmetic_operation(itr->second);
884 }
885 }

References arith_opr_, and parser_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ process_disable_arithmetic() [2/2]

template<typename T>
void expression_processor< T >::process_disable_arithmetic ( const std::string & arithmetic)
inlineprivate

Definition at line 905 of file exprtk_repl.cpp.

906 {
908
909 if (arith_opr_.end() != (itr = arith_opr_.find(arithmetic)))
910 {
911 parser_.settings()
912 .disable_arithmetic_operation(itr->second);
913 }
914 }

References arith_opr_, and parser_.

◆ process_disable_assignment() [1/2]

template<typename T>
void expression_processor< T >::process_disable_assignment ( const std::string & assignment)
inlineprivate

Definition at line 887 of file exprtk_mpfr_repl.cpp.

888 {
890
891 if (assign_opr_.end() != (itr = assign_opr_.find(assignment)))
892 {
893 parser_.settings()
894 .disable_assignment_operation(itr->second);
895 }
896 }

References assign_opr_, and parser_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ process_disable_assignment() [2/2]

template<typename T>
void expression_processor< T >::process_disable_assignment ( const std::string & assignment)
inlineprivate

Definition at line 916 of file exprtk_repl.cpp.

917 {
919
920 if (assign_opr_.end() != (itr = assign_opr_.find(assignment)))
921 {
922 parser_.settings()
923 .disable_assignment_operation(itr->second);
924 }
925 }

References assign_opr_, and parser_.

◆ process_disable_inequality() [1/2]

template<typename T>
void expression_processor< T >::process_disable_inequality ( const std::string & inequality)
inlineprivate

Definition at line 898 of file exprtk_mpfr_repl.cpp.

899 {
901
902 if (inequality_opr_.end() != (itr = inequality_opr_.find(inequality)))
903 {
904 parser_.settings()
905 .disable_inequality_operation(itr->second);
906 }
907 }

References inequality_opr_, and parser_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ process_disable_inequality() [2/2]

template<typename T>
void expression_processor< T >::process_disable_inequality ( const std::string & inequality)
inlineprivate

Definition at line 927 of file exprtk_repl.cpp.

928 {
930
931 if (inequality_opr_.end() != (itr = inequality_opr_.find(inequality)))
932 {
933 parser_.settings()
934 .disable_inequality_operation(itr->second);
935 }
936 }

References inequality_opr_, and parser_.

◆ process_enable_arithmetic() [1/2]

template<typename T>
void expression_processor< T >::process_enable_arithmetic ( const std::string & arithmetic)
inlineprivate

Definition at line 909 of file exprtk_mpfr_repl.cpp.

910 {
912
913 if (arith_opr_.end() != (itr = arith_opr_.find(arithmetic)))
914 {
915 parser_.settings()
916 .enable_arithmetic_operation(itr->second);
917 }
918 }

References arith_opr_, and parser_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ process_enable_arithmetic() [2/2]

template<typename T>
void expression_processor< T >::process_enable_arithmetic ( const std::string & arithmetic)
inlineprivate

Definition at line 938 of file exprtk_repl.cpp.

939 {
941
942 if (arith_opr_.end() != (itr = arith_opr_.find(arithmetic)))
943 {
944 parser_.settings()
945 .enable_arithmetic_operation(itr->second);
946 }
947 }

References arith_opr_, and parser_.

◆ process_enable_assignment() [1/2]

template<typename T>
void expression_processor< T >::process_enable_assignment ( const std::string & assignment)
inlineprivate

Definition at line 920 of file exprtk_mpfr_repl.cpp.

921 {
923
924 if (assign_opr_.end() != (itr = assign_opr_.find(assignment)))
925 {
926 parser_.settings()
927 .enable_assignment_operation(itr->second);
928 }
929 }

References assign_opr_, and parser_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ process_enable_assignment() [2/2]

template<typename T>
void expression_processor< T >::process_enable_assignment ( const std::string & assignment)
inlineprivate

Definition at line 949 of file exprtk_repl.cpp.

950 {
952
953 if (assign_opr_.end() != (itr = assign_opr_.find(assignment)))
954 {
955 parser_.settings()
956 .enable_assignment_operation(itr->second);
957 }
958 }

References assign_opr_, and parser_.

◆ process_enable_inequality() [1/2]

template<typename T>
void expression_processor< T >::process_enable_inequality ( const std::string & inequality)
inlineprivate

Definition at line 931 of file exprtk_mpfr_repl.cpp.

932 {
934
935 if (inequality_opr_.end() != (itr = inequality_opr_.find(inequality)))
936 {
937 parser_.settings()
938 .enable_inequality_operation(itr->second);
939 }
940 }

References inequality_opr_, and parser_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ process_enable_inequality() [2/2]

template<typename T>
void expression_processor< T >::process_enable_inequality ( const std::string & inequality)
inlineprivate

Definition at line 960 of file exprtk_repl.cpp.

961 {
963
964 if (inequality_opr_.end() != (itr = inequality_opr_.find(inequality)))
965 {
966 parser_.settings()
967 .enable_inequality_operation(itr->second);
968 }
969 }

References inequality_opr_, and parser_.

◆ process_from_file() [1/2]

template<typename T>
void expression_processor< T >::process_from_file ( const std::string & file_name)
inline

Definition at line 381 of file exprtk_mpfr_repl.cpp.

382 {
383 if (file_name.empty())
384 return;
385
387
388 if (!stream)
389 {
390 printf("ERROR: Failed to open file: %s\n\n",file_name.c_str());
391 return;
392 }
393
397 );
398
400 }

References process_function_definition().

Referenced by process_directive(), and repl().

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

◆ process_from_file() [2/2]

template<typename T>
void expression_processor< T >::process_from_file ( const std::string & file_name)
inline

Definition at line 408 of file exprtk_repl.cpp.

409 {
410 if (file_name.empty())
411 return;
412
414
415 if (!stream)
416 {
417 printf("ERROR: Failed to open file: %s\n\n",file_name.c_str());
418 return;
419 }
420
424 );
425
427 }

References process_function_definition().

Here is the call graph for this function:

◆ process_function_definition() [1/2]

template<typename T>
void expression_processor< T >::process_function_definition ( const std::string & func_def_header,
bool read_stdin = true )
inlineprivate

Definition at line 734 of file exprtk_mpfr_repl.cpp.

735 {
737
738 if (read_stdin)
739 {
741
742 if (!func_def.empty() && ('$' == func_def[0]))
743 func_def.erase(func_def.begin());
744 }
745
746 do
747 {
749
751
753 {
755
756 for (std::size_t i = 0; i < fd.var_list.size(); ++i)
757 {
758 vars += fd.var_list[i] + ((i < fd.var_list.size() - 1) ? "," : "");
759 }
760
761 function_t f(fd.name);
762
763 for (std::size_t i = 0; i < fd.var_list.size(); ++i)
764 {
765 f.var(fd.var_list[i]);
766 }
767
768 f.expression(fd.body);
769
770 if (function_symbol_table_.get_function(fd.name))
771 {
772 function_symbol_table_.remove_function(fd.name);
773
774 for (std::size_t i = 0; i < func_def_list_.size(); ++i)
775 {
777 {
778 func_def_list_.erase(func_def_list_.begin() + i);
779
780 break;
781 }
782 }
783 }
784
785 if (!compositor_.add(f,true))
786 {
787 function_symbol_table_.remove_function(fd.name);
788
789 printf("Error - Failed to add function: %s\n",fd.name.c_str());
790
791 return;
792 }
793
794 printf("Function[%02d]\n",static_cast<int>(func_def_list_.size()));
795 printf("Name: %s \n",fd.name.c_str() );
796 printf("Vars: (%s) \n",vars.c_str() );
797 printf("------------------------------------------------------\n");
798
799 func_def_list_.push_back(fd);
800 }
801 else if (e_parse_notfunc != fp_result)
802 {
803 printf("Error - Critical parsing error - partial parse occured\n");
804 return;
805 }
806 else
807 break;
808 }
809 while (!func_def.empty());
810
811 if (!func_def.empty())
812 {
814 }
815 }
func_parse_result parse_function_definition(std::string &func_def, function_definition &cf)
compositor_t::function function_t

References expression_processor< T >::function_definition::body, compositor_, e_parse_notfunc, e_parse_success, exprtk::function_compositor< T >::function::expression(), func_def_list_, function_symbol_table_, exprtk::details::imatch(), expression_processor< T >::function_definition::name, parse_function_definition(), process(), read_from_stdin(), exprtk::function_compositor< T >::function::var(), and expression_processor< T >::function_definition::var_list.

Referenced by process_directive(), and process_from_file().

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

◆ process_function_definition() [2/2]

template<typename T>
void expression_processor< T >::process_function_definition ( const std::string & func_def_header,
bool read_stdin = true )
inlineprivate

Definition at line 763 of file exprtk_repl.cpp.

764 {
766
767 if (read_stdin)
768 {
770
771 if (!func_def.empty() && ('$' == func_def[0]))
772 func_def.erase(func_def.begin());
773 }
774
775 do
776 {
778
780
782 {
784
785 for (std::size_t i = 0; i < fd.var_list.size(); ++i)
786 {
787 vars += fd.var_list[i] + ((i < fd.var_list.size() - 1) ? "," : "");
788 }
789
790 function_t f(fd.name);
791
792 for (std::size_t i = 0; i < fd.var_list.size(); ++i)
793 {
794 f.var(fd.var_list[i]);
795 }
796
797 f.expression(fd.body);
798
799 if (function_symbol_table_.get_function(fd.name))
800 {
801 function_symbol_table_.remove_function(fd.name);
802
803 for (std::size_t i = 0; i < func_def_list_.size(); ++i)
804 {
806 {
807 func_def_list_.erase(func_def_list_.begin() + i);
808
809 break;
810 }
811 }
812 }
813
814 if (!compositor_.add(f,true))
815 {
816 function_symbol_table_.remove_function(fd.name);
817
818 printf("Error - Failed to add function: %s\n",fd.name.c_str());
819
820 return;
821 }
822
823 printf("Function[%02d]\n",static_cast<int>(func_def_list_.size()));
824 printf("Name: %s \n",fd.name.c_str() );
825 printf("Vars: (%s) \n",vars.c_str() );
826 printf("------------------------------------------------------\n");
827
828 func_def_list_.push_back(fd);
829 }
830 else if (e_parse_notfunc != fp_result)
831 {
832 printf("Error - Critical parsing error - partial parse occurred\n");
833 return;
834 }
835 else
836 break;
837 }
838 while (!func_def.empty());
839
840 if (!func_def.empty())
841 {
843 }
844 }

References compositor_, e_parse_notfunc, e_parse_success, exprtk::function_compositor< T >::function::expression(), func_def_list_, function_symbol_table_, exprtk::details::imatch(), parse_function_definition(), process(), read_from_stdin(), and exprtk::function_compositor< T >::function::var().

Here is the call graph for this function:

◆ process_multiline() [1/2]

template<typename T>
void expression_processor< T >::process_multiline ( )
inlineprivate

Definition at line 569 of file exprtk_mpfr_repl.cpp.

570 {
572
573 for ( ; ; )
574 {
576
577 std::cout << ">> ";
579
581
582 if (line.empty())
583 continue;
584 else if ("$end" == line)
585 break;
586 else
587 program += (line + "\n");
588 }
589
591 }

References process(), and trim_whitespace().

Referenced by process_directive().

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

◆ process_multiline() [2/2]

template<typename T>
void expression_processor< T >::process_multiline ( )
inlineprivate

Definition at line 598 of file exprtk_repl.cpp.

599 {
601
602 for ( ; ; )
603 {
605
606 std::cout << ">> ";
608
610
611 if (line.empty())
612 continue;
613 else if ("$end" == line)
614 break;
615 else
616 program += (line + "\n");
617 }
618
620 }

References process(), and trim_whitespace().

Here is the call graph for this function:

◆ read_from_stdin() [1/2]

template<typename T>
std::string expression_processor< T >::read_from_stdin ( )
inlineprivate

Definition at line 709 of file exprtk_mpfr_repl.cpp.

710 {
712
713 for ( ; ; )
714 {
716
717 std::cout << ">> ";
719
720 if (line.empty())
721 continue;
722 else if ("$end" == line)
723 break;
724 else
725 input += (line + "\n");
726 }
727
728 if (!input.empty())
729 input.erase(input.end() - 1);
730
731 return input;
732 }

Referenced by process_function_definition().

Here is the caller graph for this function:

◆ read_from_stdin() [2/2]

template<typename T>
std::string expression_processor< T >::read_from_stdin ( )
inlineprivate

Definition at line 738 of file exprtk_repl.cpp.

739 {
741
742 for ( ; ; )
743 {
745
746 std::cout << ">> ";
748
749 if (line.empty())
750 continue;
751 else if ("$end" == line)
752 break;
753 else
754 input += (line + "\n");
755 }
756
757 if (!input.empty())
758 input.erase(input.end() - 1);
759
760 return input;
761 }

◆ setup_symbol_table() [1/2]

template<typename T>
void expression_processor< T >::setup_symbol_table ( )
inline

Definition at line 218 of file exprtk_mpfr_repl.cpp.

219 {
221 {
222 symbol_table_.clear_variables();
223 symbol_table_.add_constants();
225 }
226 }

References exprtk::details::numeric::constant::e, persist_symbol_table_, and symbol_table_.

Referenced by process().

Here is the caller graph for this function:

◆ setup_symbol_table() [2/2]

template<typename T>
void expression_processor< T >::setup_symbol_table ( )
inline

Definition at line 238 of file exprtk_repl.cpp.

239 {
241 {
242 symbol_table_.clear_variables();
243 symbol_table_.add_constants ();
245 }
246 }

References exprtk::details::numeric::constant::e, persist_symbol_table_, and symbol_table_.

◆ symbol_dump() [1/2]

template<typename T>
bool & expression_processor< T >::symbol_dump ( )
inline

Definition at line 188 of file exprtk_mpfr_repl.cpp.

189 {
190 return symbol_dump_;
191 }

References symbol_dump_.

Referenced by process_directive().

Here is the caller graph for this function:

◆ symbol_dump() [2/2]

template<typename T>
bool & expression_processor< T >::symbol_dump ( )
inline

Definition at line 203 of file exprtk_repl.cpp.

204 {
205 return symbol_dump_;
206 }

References symbol_dump_.

◆ trim_whitespace() [1/2]

template<typename T>
std::string expression_processor< T >::trim_whitespace ( std::string s)
inlineprivate

Definition at line 854 of file exprtk_mpfr_repl.cpp.

855 {
856 static const std::string whitespace(" \n\r\t\b\v\f");
857
858 if (!s.empty())
859 {
860 s.erase(0,s.find_first_not_of(whitespace));
861
862 if (!s.empty())
863 {
864 std::size_t index = s.find_last_not_of(whitespace);
865
867 s.erase(index + 1);
868 else
869 s.clear();
870 }
871 }
872
873 return s;
874 }

Referenced by process(), process_directive(), and process_multiline().

Here is the caller graph for this function:

◆ trim_whitespace() [2/2]

template<typename T>
std::string expression_processor< T >::trim_whitespace ( std::string s)
inlineprivate

Definition at line 883 of file exprtk_repl.cpp.

884 {
885 static const std::string whitespace(" \n\r\t\b\v\f");
886
887 if (!s.empty())
888 {
889 s.erase(0,s.find_first_not_of(whitespace));
890
891 if (!s.empty())
892 {
893 std::size_t index = s.find_last_not_of(whitespace);
894
896 s.erase(index + 1);
897 else
898 s.clear();
899 }
900 }
901
902 return s;
903 }

Member Data Documentation

◆ arith_opr_

template<typename T>
std::map< std::string, typename settings_store_t::settings_arithmetic_opr > expression_processor< T >::arith_opr_
private

Definition at line 981 of file exprtk_mpfr_repl.cpp.

Referenced by process_disable_arithmetic(), and process_enable_arithmetic().

◆ assign_opr_

template<typename T>
std::map< std::string, typename settings_store_t::settings_assignment_opr > expression_processor< T >::assign_opr_
private

Definition at line 982 of file exprtk_mpfr_repl.cpp.

Referenced by process_disable_assignment(), and process_enable_assignment().

◆ assignment_dump_

template<typename T>
bool expression_processor< T >::assignment_dump_
private

Definition at line 947 of file exprtk_mpfr_repl.cpp.

Referenced by assignment_dump(), expression_processor(), and process().

◆ batch_runs_cnt_

template<typename T>
std::size_t expression_processor< T >::batch_runs_cnt_
private

Definition at line 952 of file exprtk_mpfr_repl.cpp.

Referenced by expression_processor(), process(), and process_batch_run().

◆ compositor_

template<typename T>
compositor_t expression_processor< T >::compositor_
private

Definition at line 957 of file exprtk_mpfr_repl.cpp.

Referenced by expression_processor(), and process_function_definition().

◆ disable_commutative_check_

template<typename T>
bool expression_processor< T >::disable_commutative_check_
private

Definition at line 981 of file exprtk_repl.cpp.

Referenced by disable_commutative_check(), expression_processor(), and process().

◆ disable_local_vardef_

template<typename T>
bool expression_processor< T >::disable_local_vardef_
private

Definition at line 951 of file exprtk_mpfr_repl.cpp.

Referenced by disable_local_vardef(), expression_processor(), and process().

◆ display_total_compile_time_

template<typename T>
bool expression_processor< T >::display_total_compile_time_
private

Definition at line 949 of file exprtk_mpfr_repl.cpp.

Referenced by display_total_compile_time(), expression_processor(), and process().

◆ display_total_time_

template<typename T>
bool expression_processor< T >::display_total_time_
private

Definition at line 948 of file exprtk_mpfr_repl.cpp.

Referenced by display_total_time(), expression_processor(), and process().

◆ enable_usr_

template<typename T>
bool expression_processor< T >::enable_usr_
private

Definition at line 950 of file exprtk_mpfr_repl.cpp.

Referenced by enable_usr(), expression_processor(), and process().

◆ fileio_package_

template<typename T>
exprtk::rtl::io::file::package< T > expression_processor< T >::fileio_package_
private

Definition at line 962 of file exprtk_mpfr_repl.cpp.

◆ func_def_list_

template<typename T>
std::vector< function_definition > expression_processor< T >::func_def_list_
private

Definition at line 979 of file exprtk_mpfr_repl.cpp.

Referenced by clear_functions(), and process_function_definition().

◆ function_symbol_table_

template<typename T>
symbol_table_t expression_processor< T >::function_symbol_table_
private

◆ inequality_opr_

template<typename T>
std::map< std::string, typename settings_store_t::settings_inequality_opr > expression_processor< T >::inequality_opr_
private

Definition at line 983 of file exprtk_mpfr_repl.cpp.

Referenced by process_disable_inequality(), and process_enable_inequality().

◆ io_package_

template<typename T>
exprtk::rtl::io::package< T > expression_processor< T >::io_package_
private

Definition at line 964 of file exprtk_mpfr_repl.cpp.

◆ parser_

◆ persist_symbol_table_

template<typename T>
bool expression_processor< T >::persist_symbol_table_
private

◆ poly01_

template<typename T>
exprtk::polynomial< T, 1 > expression_processor< T >::poly01_
private

Definition at line 966 of file exprtk_mpfr_repl.cpp.

◆ poly02_

template<typename T>
exprtk::polynomial< T, 2 > expression_processor< T >::poly02_
private

Definition at line 967 of file exprtk_mpfr_repl.cpp.

◆ poly03_

template<typename T>
exprtk::polynomial< T, 3 > expression_processor< T >::poly03_
private

Definition at line 968 of file exprtk_mpfr_repl.cpp.

◆ poly04_

template<typename T>
exprtk::polynomial< T, 4 > expression_processor< T >::poly04_
private

Definition at line 969 of file exprtk_mpfr_repl.cpp.

◆ poly05_

template<typename T>
exprtk::polynomial< T, 5 > expression_processor< T >::poly05_
private

Definition at line 970 of file exprtk_mpfr_repl.cpp.

◆ poly06_

template<typename T>
exprtk::polynomial< T, 6 > expression_processor< T >::poly06_
private

Definition at line 971 of file exprtk_mpfr_repl.cpp.

◆ poly07_

template<typename T>
exprtk::polynomial< T, 7 > expression_processor< T >::poly07_
private

Definition at line 972 of file exprtk_mpfr_repl.cpp.

◆ poly08_

template<typename T>
exprtk::polynomial< T, 8 > expression_processor< T >::poly08_
private

Definition at line 973 of file exprtk_mpfr_repl.cpp.

◆ poly09_

template<typename T>
exprtk::polynomial< T, 9 > expression_processor< T >::poly09_
private

Definition at line 974 of file exprtk_mpfr_repl.cpp.

◆ poly10_

template<typename T>
exprtk::polynomial< T, 10 > expression_processor< T >::poly10_
private

Definition at line 975 of file exprtk_mpfr_repl.cpp.

◆ poly11_

template<typename T>
exprtk::polynomial< T, 11 > expression_processor< T >::poly11_
private

Definition at line 976 of file exprtk_mpfr_repl.cpp.

◆ poly12_

template<typename T>
exprtk::polynomial< T, 12 > expression_processor< T >::poly12_
private

Definition at line 977 of file exprtk_mpfr_repl.cpp.

◆ putch_

template<typename T>
putch< T > expression_processor< T >::putch_
private

Definition at line 959 of file exprtk_mpfr_repl.cpp.

◆ putint_

template<typename T>
putint< T > expression_processor< T >::putint_
private

Definition at line 960 of file exprtk_mpfr_repl.cpp.

◆ rnd_01_

template<typename T>
rnd_01< T > expression_processor< T >::rnd_01_
private

Definition at line 961 of file exprtk_mpfr_repl.cpp.

◆ symbol_dump_

template<typename T>
bool expression_processor< T >::symbol_dump_
private

Definition at line 946 of file exprtk_mpfr_repl.cpp.

Referenced by expression_processor(), process(), and symbol_dump().

◆ symbol_table_

template<typename T>
symbol_table_t expression_processor< T >::symbol_table_
private

Definition at line 954 of file exprtk_mpfr_repl.cpp.

Referenced by list_symbols(), process(), and setup_symbol_table().

◆ vecops_package_

template<typename T>
exprtk::rtl::vecops::package< T > expression_processor< T >::vecops_package_
private

Definition at line 963 of file exprtk_mpfr_repl.cpp.

◆ vector_access_rtc_

template<typename T>
vector_access_rtc expression_processor< T >::vector_access_rtc_
private

Definition at line 988 of file exprtk_repl.cpp.

Referenced by process().


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