CS 203 Project 3: Stack. Due date: Before 11:59 p.m. on Sunday, July the 24th. Write a java program to do the followings: - (Infix to Postfix) Convert an infix expression into an equivalent postfix expression. The rules to convert an infix expression into an equivalent postfix expression are as follows: Suppose infx represents the infx expression and pfx represents the postfix expression. The rules to convert infx into pfx are as follows: a. Initialize pfx to an empty expression and also initialize the stack. b. Get the next symbol, sym, from infx. b1. If sym is an operand, append sym to pfx. b2. If sym is (, push sym into the stack. b3. If sym is ), pop and append all the symbols from the stack until the most recent left parentheses. Pop and discard the left parentheses. b4. If sym is an operator: - Pop and append all the operators from the stack to pfx that are above the most recent left parentheses and have precedence greater than or equal to sym. - Push sym onto the stack. c. After processing infx, some operators might be left in the stack. Pop and append to pfx everything from the stack. In this program, you will consider the following (binary) arithmetic operators: +, - ,*, and /. You may assume that the expressions you will process are error free. Design a class that stores the infix and postfix strings. The class must include the following operations: 1. getInfix: Store the infix expression. 2. showInfix: Outputs the infix expression. 3. showPostfix: Outputs the postfix expression. 4. convertToPostfix: Converts the infix expression into postfix expression. The resulting postfix expression is stored in postfixString. 5. Precedence: Determines the precedence between two operators. If the first operator is of higher or equal precedence than the second operator, it returns the value true; otherwise it returns the value false. Include the constructors for automatic initialization and dynamic memory deallocation. Test your program on the following expressions: 1. A + B - C 2. (A + B) * C 3. (A + B) * (C - D) 4. A + ((B + C) * (E - F) - G) / (H - I) 5. A + B * (C + D) - E / F * G + H For each expression, your answer must be in the following form: Infix expression: A + B - C Postfix expression: A B + C - Infix expression: (A + B) * C Postfix expression: A B + C * Infix expression: (A + B) * (C - D) Postfix expression: A B + C D - * Infix expression: A + ((B + C) * (E - F) - G) / (H - I) Postfix expression: A B C + E F - * G - H I - / + . . . Write a method, called Evaluate(String postfix), to evaluate the postfix expression. Replace all characters with numerical values and make sure that the expression is evaluated correctly. Allow multiple digits value. (for example 11*2-3) Create a GUI interface to let the user input the infix expression, then output the equivalent postfix expression onto a text field (or a label). Create a button called "Clear" to let the user clear the contents of all text fields. Create a button called "Postfix Conversion" to do the conversion. Create a button called "Evaluate" to evaluate the postfix expression. Create a button called "Exit" to let the user exit your program. Write all the results to an output file called "result.txt". Create a button called "Open Result file" to open the result.txt file and disply its contents in a JPanel. You can create your own stack or use my stack, but do not use the built-in stack. You can add more methods to your stack; it is up to you. Make sure that you implement the concept of OOP in designing your classes. Draw a class diagram to show the relationship(s) of your classes, if there is any. Create a driver to test your program.