Download this zip file and un-zip it. In the zip file there is a copy of this web page, which you can read in your browser, and some files that you need for this assignment.
This assignment is due Wednesday, November 28.
This assignment is based on pages 325 - 334 and pages 345 - 352 of our textbook.
In the zip file there is a file Expression.java which contains outlines of two static methods, Infix2Postfix() and EvaluatePostfix() , which you are to complete. Below is a discription of each of these two methods.
The static method EvaluatePostfix() takes one parameter, a String , and returns an int . The input string holds an arithmetic expression in postfix notation. The arithmetic expression is made up of integers and six operators, + , - , * , / , % , and ^ (integer addition, subtraction, multiplication, division, remainder, and exponentiation). You can assume that the postfix expression does not have any syntax errors in it, and you can assume that all of the tokens in the expression have whitespace around them (this makes it easy to use a StringTokenizer object to scan through the string). The EvaluatePostfix() method should make use of a java.util.Stack<T> object to evaluate the postfix expression and return the resulting integer value. Here is an outline of the algorithm to evaluate a postfix expression. Read the postfix expression string from left to right. While the string has more tokens, if the current token is a number, push the number on the stack. If the current token is an operator, pop two operands off the stack, apply the operator and push the result back on the stack. When there are no more tokens, return the top of the stack.
The static method Infix2Postfix() takes one parameter, a String , and returns another String . The input string holds an arithmetic expression in regular infix notation. The arithmetic expression is made up of integers, parentheses, and six operators, + , - , * , / , % , and ^ . You can assume that the infix expression does not have any syntax errors in it, and you can assume that all of the tokens in the expression have whitespace around them (this makes it easy to use a StringTokenizer object to scan through the string). The Infix2Postfix() method should make use of a java.util.Stack<T> object to convert the infix expression to a postfix expression and return a string that holds the postfix expression. (The postfix string should have whitespace around all of its tokens so that it will work as input to the EvaluatePostfix() method.) Here is an outline of the algorithm to convert an infix expression to a postfix expression. Let infix be the name for the infix string and let postfix be the name of the postfix string that is being created.
- Append a right parenthesis, ")", to the end of
infix
- Push a left parenthesis, "(", onto the stack
- While
infix has more tokens, do the following:
- If the current token is an integer, append it to
postfix .
- If the current token is a left parenthesis, push it on the stack.
- If the current token is an operator:
- Pop operators (if there are any) off of the stack while they have equal or higher precedence than the current operator and append the popped operators to
postfix .
- Push the current operator on the stack.
- If the current token is a right parenthesis:
- Pop operators off the stack (there must be at leat one) and append them to
postfix until a left parenthesis is found at the top of the stack.
- Pop the left parenthesis from the top of the stack.
In the zip file along with this file there are three test programs, TestInfix2Postfix.java , TestEvaluatePostfix.java , and TestExpressions.java , that test your implementations of the Infix2Postfix() and EvaluatePostfix() methods. When TestExpressions.java runs, it should produce output like that contained in the file SampleOutput.txt .
Turn in a zip file called CS275Hw6Surname.zip containing your Java source file, Expression.java .
This assignment is due Wednesday, November 28.
|