01: #include <iostream>
04: using namespace std;
05:
06: int term_value();
07: int factor_value();
09: /**
10: Evaluates the next expression found in cin
11: @return the value of the expression.
12: */
13: int expression_value()
14: { int result = term_value();
16: bool more = true;
17: while (more)
18: { char op = cin.peek();
20: if (op == '+' || op == '-')
21: { cin.get();
23: int value = term_value();
24: if (op == '+') result = result + value;
25: else result = result - value;
26: }
27: else more = false;
28: }
29: return result;
30: }
32: /**
33: Evaluates the next term found in cin
34: @return the value of the term.
35: */
36: int term_value()
37: { int result = factor_value();
39: bool more = true;
40: while (more)
41: { char op = cin.peek();
43: if (op == '*' || op == '/')
44: { cin.get();
46: int value = factor_value();
47: if (op == '*') result = result * value;
48: else result = result / value;
49: }
50: else more = false;
51: }
52: return result;
53: }
55: /**
56: Evaluates the next factor found in cin
57: @return the value of the factor.
58: */
59: int factor_value()
60: { int result = 0;
62: char c = cin.peek();
63: if (c == '(')
64: { cin.get();
66: result = expression_value();
67: cin.get(); // read ")"
68: }
69: else // assemble number value from digits
70: { while (isdigit(c))
72: { result = 10 * result + c - '0';
74: cin.get();
75: c = cin.peek();
76: }
77: }
78: return result;
79: }
80:
81: int main()
82: { cout << "Enter an expression: ";
84: cout << expression_value() << endl;
85: return 0;
86: }