###
CSC 222: Computer Programming II

Spring 2005

HW5: Inheritance and Stacks

For this assignment, you will build upon existing classes to create a
calculator that can evaluate both infix and postfix expressions. You are given the following
classes:
`Expression`: an abstract class that
models a mathematical expression. The class contains abstract methods `verify`
and `evaluate` which must be defined in any class derived from `Expression`.
`InfixExpression`: a class, derived from
`Expression`, that models an infix expression (one in which the operator
comes between its operands).
`Calculator`: a class with main method that
serves as a calculator, reading in expressions as lines of text and evaluating them.

You are to extend the calculator so that it gives the user the option of entering
expressions in infix notation or postfix notation (a.k.a. Reverse Polish notation).
In order to accomplish this, you will need to perform the following tasks:

- Define a new class named
`PostfixExpression` that is derived
from `Expression` and models a postfix expression. Similar to the way that
`InfixExpression` is defined, your new class will need to implement the
`verify` and `evaluate` methods. Recall that a stack can be used
to evaluate a postifix expression: each operand is pushed on the stack, and each
operator is handled by popping two operands off the top, applying the operator,
and then pushing the result.
- Modify the
`Calculator` class so that the main method first prompts the user
as to whether they want to enter infix or postfix expressions for evaluation.
Depending on their response, expressions of that type should be read in and
evaluated.