School of Engineering and Applied Science
Department of Computer Science
CSci 133 -- Algorithms and Data Structures I
http://www.seas.gwu.edu/~csci133/spring03
Prof. Michael B. Feldman
mfeldman@gwu.edu

Project #6

Due Date: beginning of class, Wednesday, April 30, 2003
NO PROJECTS CAN BE ACCEPTED AFTER THAT DATE!

REVISED AND CORRECTED

In this project you will develop an interactive application that emulates the operation of a calculator that has a number of registers and supports complex calculations.

Abstract description of the calculator

Our calculator has six variables or registers.
  • The registers are named A, B, C, D, E, and F.
  • Each register can contain an expression made up of register names, floating point constants, parentheses, and the operators +, -, *, and /.
  • Assignment to a register is indicated by the = operator.
  • All registers contain an expression of 0.0 by default.
Further, the calculator has three commands. These are:
  • CLEAR, which clears all registers
  • SET, which is followed by an assignment statement
  • EVAL, which is followed by a register name. EVAL evaluates the expression and displays the result.
Here is an example of a run of the calculator. The calculator responses are indented.

CLEAR
  OK
SET B = 3.0
  OK
SET E = 5.0
  OK
SET D = (B * E) / 2.0
  OK
EVAL D
  7.5
SET E = 4.0
  OK
EVAL D
  6.0
SET F = B + D)
  ERROR

Implementation

Here are some implementation requirements:
  • Represent the register names by a set of six integer constants A through F:

  • final int A = 0;
    final int B = 1;
    etc.
  • Represent an expression internally by an expression tree.
  • Represent the registers themselves by a 6-element array of expressions (trees), subscripted by the register numbers 0-5.
  • Each node of a tree will have left and right pointers and four data fields:
    • a character "type code" indicating whether the node contains a register name, a float value, or an operator; use 'V', 'C', and 'O' for these codes
    • a field for the register name
    • a field for a float value
    • a character field that can hold an operator
    • the "type code" will indicate which of the 3 fields is actually being "used" in the node
  • The application will read a line of input, parse it, and act according to the command:
    • If the command is CLEAR, clear all the registers to empty trees
    • If the command is SET, determine which register is being set, then convert the expression to an expression tree using an algorithm to be given in class.
    • If the command is EVAL, evaluate the tree by an algorithm to be given in class.
Other than following these requirements, you are free to design the details of your project. For example, use your judgement about how to handle errors, how to put methods into classes, etc. Document your design carefully; any correct design will be given full marks.

What to submit:

Follow the guide distributed in lab.