// Prog: simple_calculator_r.cpp // evaluate arithmetic expressions involving +, -, // over double operands, with right-to-left evaluation order // Syntax in BNF: // --------------- // sum = val | val "+" sum | val "-" sum #include #include #include #include char lookahead (std::istream& is) { is >> std::ws; // skip whitespaces if (is.eof()) return 0; // end of stream else return is.peek(); // next character in is } double val (std::istream& is) { double v; is >> v; assert (!is.fail()); return v; } double sum (std::istream& is) { double v = val (is); char c = lookahead (is); if (c == '+') v += sum (is >> c); else if (c == '-') v -= sum (is >> c); return v; } int main() { std::stringstream input ("3-4-5"); // 4 std::cout << sum (input) << "\n"; return 0; }