14#define STACK_DEPTH 256
26 CalculatorExpr(
const std::string &expr)
31 fail_stack.at(i) =
false;
45 const double *val =
evalFP();
47 for (
int k = 0; k < 3; k++)
48 std::cerr << val[k] <<
" ";
49 std::cerr << std::endl;
57 std::cerr <<
"Return type FP(" << dim <<
") ignoring" << std::endl;
67 fail_stack.at(_count) =
true;
74 return stack.at(_count - 1).val;
93 void eval(
double *
result)
override
95 for (
int k = 0;
k < 3;
k++)
99 void eval(
const char **)
override
106 mutable std::array<SimpleVar, STACK_DEPTH> stack;
107 mutable std::array<bool, STACK_DEPTH> fail_stack {};
108 mutable int _count {0};
113 if (name[0] ==
'_') {
114 int position = std::stoi(name.substr(1, name.size() - 1));
116 std::cerr <<
"Use of unused result line." << std::endl;
118 std::cerr <<
"Use of invalid result line." << std::endl;
121 addError(ErrorCode::UndeclaredVariable, {name}, 0, 0);
128 std::cout <<
"KSeExpr Basic Calculator";
133 std::cout << std::endl << expr.count() <<
"> ";
137 if (std::cin.
eof()) {
138 std::cout << std::endl;
142 if (str ==
"quit" || str ==
"q")
144 expr.setDesiredReturnType(
ExprType().FP(3));
147 if (!expr.isValid()) {
149 std::cerr <<
"Expression failed: " << expr.parseError() << std::endl;
152 std::cout <<
" " << expr.peek();
static void cleanup()
cleanup all functions
abstract class for implementing variable references
void addError(const ErrorCode error, const std::vector< std::string > ids, const int startPos, const int endPos) const
virtual ExprVarRef * resolveVar(const std::string &) const
const double * evalFP(VarBlock *varBlock=nullptr) const
const ExprType & returnType() const
const char * evalStr(VarBlock *varBlock=nullptr) const
const ExprStrNode * isString(const ExprNode *testee)