25 #define STACK_DEPTH 256
39 fail_stack[i] =
false;
45 for (
int i = 0; i <
STACK_DEPTH; i++) fail_stack[i] =
false;
52 }
else if (returnType().isFP()) {
53 const double* val = evalFP();
54 int dim = returnType().dim();
55 for (
int k = 0; k < 3; k++) std::cerr << val[k] <<
" ";
56 std::cerr << std::endl;
64 std::cerr <<
"Return type FP(" << dim <<
") ignoring" << std::endl;
73 fail_stack[_count] =
true;
91 void eval(
double* result) {
92 for (
int k = 0; k < 3; k++) result[k] = val[k];
95 void eval(
const char** result) {}
105 if (name[0] ==
'_') {
106 int position = atoi(name.substr(1, name.size() - 1).c_str());
107 if (position >= count()) std::cerr <<
"Use of unused result line." << std::endl;
108 if (fail_stack[position]) std::cerr <<
"Use of invalid result line." << std::endl;
109 return &(stack[position]);
111 addError(
"Use of undefined variable.", 0, 0);
116 int main(
int argc,
char* argv[]) {
118 std::cout <<
"SeExpr Basic Calculator";
123 std::cout << std::endl <<
expr.count() <<
"> ";
125 getline(std::cin, str);
127 if (std::cin.eof()) {
128 std::cout << std::endl;
132 if (str ==
"quit" || str ==
"q")
break;
136 if (!
expr.isValid()) {
138 std::cerr <<
"Expression failed: " <<
expr.parseError() << std::endl;
141 std::cout <<
" " <<
expr.peek();