I. Explain the purpose of the programas detail as possible-8%. 2. Develop a solution for the problem and mention algorithms to be used-12% 3. List data structures to be used in solution,-5%. 4. Give a description of how to use the program and expected input/output-5% 5. Explain the purpose of each class you develop in the program,-5%. Programming: l. For each method, give the pre and post conditions and invariant, if any-10% 2. Program execution according totherequirements given 50% 3-Naming of program as required 5% Description of Program You are to write a program name calc.java that evaluates an infix expression entered by the user. The expression may contain the following tokens: (1) Integer constants (a series of decimal digits). (2) x (representing a value to be supplied later). (3) Binary operators (+,-, *, / and %). (4) Parentheses Spaces between tokens are allowed but not required. The program will convert the expression to postfix (RPN) form and display the converted expression. The program will repeatedly prompt the user for the value of x, displaying the value of the expression each time. When the user enters the letter q instead of a number, the program terminates. The following example illustrates the behavior of the program (user input is in bold and red) Porgram output is in bold and green. Enter infix expression: (x(x-2)/4 Converted expression: x1+x2-*4 Enter value of x: 5 Answer to expression: 4 Enter value of x: 7 Answer to expression: 10 Enter value of x: q If the infix expression contains an error of any kind, the program must display the message Error in expression (with an optional explanation) and then terminate. The following examples illustrate various types of errors: Enter infix expression: 12+ Error in expression!! No operator between operands. Also last token must be an operand