47#pragma push_macro("GUM_COCOR_PUBLIC")
48#undef GUM_COCOR_PUBLIC
49#define GUM_COCOR_PUBLIC GUM_SHARED_PUBLIC
50#include <agrum/base/core/math/cocoR/Parser.h>
51#include <agrum/base/core/math/cocoR/Scanner.h>
52#pragma pop_macro("GUM_COCOR_PUBLIC")
62 std::cout << std::endl;
63 std::list< FormulaPart > l;
65 l.push_front(s.top());
69 std::cout <<
"Stack: ";
70 for (
const auto& elt: l) {
71 std::cout << elt.str() <<
" ";
73 std::cout << std::endl;
78 std::cout <<
"Output: ";
79 for (
const auto& elt: v) {
80 std::cout << elt.str() <<
" ";
82 std::cout << std::endl;
148 if (
this == &source) {
return *
this; }
159 if (
this == &source) {
return *
this; }
161 type = std::move(source.type);
162 number = std::move(source.number);
164 function = std::move(source.function);
172 return std::format(
"{}",
number);
195 auto c_str = (
unsigned char*)
_formula_.c_str();
196 auto scanner =
new gum::formula::Scanner(c_str, (
int)
_formula_.size());
197 _scanner_ = std::unique_ptr< gum::formula::Scanner >(scanner);
200 _parser_ = std::unique_ptr< gum::formula::Parser >(parser);
284 if (
this == &source) {
return *
this; }
297 if (
this == &source) {
return *
this; }
301 _parser_ = std::move(source._parser_);
304 _output_ = std::move(source._output_);
305 _stack_ = std::move(source._stack_);
313 std::stack< FormulaPart > stack;
335 if (stack.size() != 1) {
341 return stack.top().number;
454 return args[1].number + args[0].number;
458 return args[1].number - args[0].number;
462 return args[1].number * args[0].number;
466 return args[1].number / args[0].number;
474 return 0 - args[0].number;
486 return std::exp(args[0].
number);
489 return std::log(args[0].
number);
492 return std::log(args[0].
number);
498 return std::sqrt(args[0].
number);
537 }
else if (func ==
"log") {
541 }
else if (func ==
"ln") {
545 }
else if (func ==
"pow") {
549 }
else if (func ==
"sqrt") {
Exception : operation not allowed.
#define GUM_ERROR(type, msg)
gum is the global namespace for all aGrUM entities
void print_stack(std::stack< FormulaPart > s)
std::string func2str(FormulaPart::token_function func)
std::string to_string(const Formula &f)
void print_output(std::vector< FormulaPart > v)