Answered step by step
Verified Expert Solution
Question
1 Approved Answer
************************************************************************************ * * CSC220 Programming Project#2 * * * * Specification: * * Taken from Project 7, Chapter 5, Page 178 * I have modified
************************************************************************************ * * CSC220 Programming Project#2 * * * * Specification: * * Taken from Project 7, Chapter 5, Page 178 * I have modified specification and requirements of this project * * Ref: http://www.gigamonkeys.com/book/ (see chap. 10) * * In the language Lisp, each of the four basic arithmetic operators appears * before an arbitrary number of operands, which are separated by spaces. * The resulting expression is enclosed in parentheses. The operators behave * as follows: * * (+ a b c ...) returns the sum of all the operands, and (+) returns 0. * * (- a b c ...) returns a - b - c - ..., and (- a) returns -a. * * (* a b c ...) returns the product of all the operands, and (*) returns 1. * * (/ a b c ...) returns a / b / c / ..., and (/ a) returns 1/a. * * Note: + * may have zero operand * - / must have at least one operand * * You can form larger arithmetic expressions by combining these basic * expressions using a fully parenthesized prefix notation. * For example, the following is a valid Lisp expression: * * (+ (- 6) (* 2 3 4) (/ (+ 3) (* 1) (- 2 3 1)) (+)) * * This expression is evaluated successively as follows: * * (+ (- 6) (* 2 3 4) (/ 3 1 -2) (+)) * (+ -6 24 -1.5 0.0) * 16.5 * * Requirements: * * - Design and implement an algorithm that uses Java API stacks to evaluate a * Valid Lisp expression composed of the four basic operators and integer values. * - Valid tokens in an expression are '(',')','+','-','*','/',and positive integers (>=0) * - Display result as floting point number with at 2 decimal places * - Negative number is not a valid "input" operand, e.g. (+ -2 3) * However, you may create a negative number using parentheses, e.g. (+ (-2)3) * - There may be any number of blank spaces, >= 0, in between tokens * Thus, the following expressions are valid: * (+ (-6)3) * (/(+20 30)) * * - Must use Java API Stack class in this project. * Ref: http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html * - Must throw LispExprEvaluatorException to indicate errors * - Must not add new or modify existing data fields * - Must implement these methods : * * public LispExprEvaluator() * public LispExprEvaluator(String currentExpression) * public void reset(String currentExpression) * public double evaluate() * private void evaluateCurrentOperation() * * - You may add new private methods * *************************************************************************************/ package PJ2; import java.util.*; public class LispExprEvaluator { // Current input Lisp expression private String currentExpr; // Main expression stack & current operation stack, see algorithm in evaluate() private Stack
I have also attached the exception class and test class in case needed for aid. The only modifiable file is the one above these are just to test.
/************************************************************************************ * * Do not modify this file. * * LispExprEvaluatorException class * * It is used by LispExpressionEvaluator * *************************************************************************************/ package PJ2; public class LispExprEvaluatorException extends RuntimeException { public LispExprEvaluatorException() { this(""); } public LispExprEvaluatorException(String errorMsg) { super(errorMsg); } }
import PJ2.*; import java.util.*; // Do not modify this file. // // Simple test program which allows user to input Lisp expr string // To terminate: type "exit" public class PJ2_Test { public static void main (String args[]) { // create a LispExprEvaluator object LispExprEvaluator expr= new LispExprEvaluator(); // scan input expr string Scanner scanner; // current expr string and its result String inputExpr; double result; int i=0; scanner = new Scanner( System.in ); // scanner for input do { try { System.out.print( " input an expression string:" ); // scan next input line inputExpr = scanner.nextLine(); if (inputExpr.equals("exit")) break; // loop i++; System.out.println("Evaluate expression #"+ i+" :" + inputExpr); expr.reset(inputExpr); result = expr.evaluate(); System.out.printf("Result : %.2f ", result); } // end try catch ( LispExprEvaluatorException e ) { System.err.printf( " Exception: %s ", e); } // end catch exception here, continue to next loop } while ( true ); // end do...while } // end main }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started