CS 234 Lab 3 Parsing arithmetic expressions design due Wed. 12 Oct. 1 PM The purpose of this lab is to give you additional experience with design and experience with the use of stacks needed to parse and evaluate arithmetic expressions. In particular, you will base your work on some of the authors' work in chapter 5. Lab 3 is an expression manager. Project 3 on page 300 of the text serves as its base. The 4 main parts of the project are to check for balanced symbols in an infix expression, convert an infix expression to its equivalent postfix form evaluate a postfix expression and convert a postfix expression to its equivalent infix form. The authors' class ParenChecker does almost all of part 1. Their class InfixToPostfixParens does some of part 2. Their class PostfixEvaluator does some of part 3. You must design a class to do part 4. My specification for lab 3 makes some additions and changes to that on page 300. You must use the authors' generic class LinkedStack< E > and their interface StackInt< E > in each of the classes of lab 3 that use a stack. You must include the binary operator ^ for exponentiation among the operators in parts 2, 3 and 4. A class called ClientIO manages all input and output from the client. You must design a class to convert a postfix expression to its equivalent infix form. The class name should probably be PostfixToInfix. Your design should be detailed and use an essay format. You should explain the development of your conversion algorithm in detail. This algorithm must use a stack. You must include a simulation of your conversion algorithm for a non trivial postfix expression. You should list the attributes, constructors and methods for this class. You should describe an algorithm for each non-trivial method. In particular your design must have the following parts. 0. Write an essay that describes the design for the class PostFixToInfix. 1. Document in detail the changes that you make to other classes to accommodate the use of the class LinkedStack< E >. 2. Document in detail the changes that you make to other classes to accommodate the use of the operator ^. 3. Design the class ClientIO. 4. A UML diagram for your software system. To ease the work for part 3, I suggest use of the following scenario. Task: Parse an arithmetic expression. 1. The system asks the client for an arithmetic expression. 2. The client enters a valid expression. 3. The system classifies it as infix or postfix. 4. The system converts it to the other form. 5. If the postfix expression is numeric, the system evaluates it. 6. The system displays a message with two expressions and possibly an integer. Part 3 of your design must contain a detailed design scenario for the above task. Most of its steps identify a class and a method with parameters. Feel free to see me in Science 103g or send me email for assistance with your design.