Cash-back offer from May 2nd to 7th, 2024: Get a flat 10% cash-back credited to your account for a minimum transaction of $50.Post Your Questions Today!

Question Details Urgent
$ 26.00

Parsing Infix Expressions Java

Question posted by
Online Tutor Profile
request

Introduction

This assignment will give you practice with Java, interfaces (not Java interfaces, but the more general notion), and build tools (ant, jar).

You will create a calculator in Java that parses an infix expression into postfix, and then evaluates it.

You will use ant to build your program.

____________________________________________________________

The Assignment

You will write a program that parses infix expressions (described below) into appropriate Tokens (operator or operand), stored in some linear container (ArrayList ?), passes the infix expression to a function that returns the expression to postfix form, then passes it to a function which evaluates the postfix expression, returns an integer.

We'll be doing only integer arithmetic. No float types. Also, though the inputs are positive, the intermediate results might not be.

The operators you will encounter are +, -, *, /, % (modulus). You must also be prepared to handle parenthesis.

Your code will be documented properly.

All will be done through an ant file.

I will also run Javadoc; I expect to get something useful out.

____________________________________________________________

Your code

I expect to see, at a minimum, 2 methods:

  • infix2postfix
  • evalPostfix

I've written Token classes for you (the files are in this directory). You do need to fill in the Operator.getPrec() method, assign appropriate (relative) precedences to the operators.

The 2 types, Operand and Operator share a base class, Token, so that you can store an entire expression, in a generic ArrayList which holds Tokens. We need to get used to generics. Sample.java, in the directory, shows the creation and storage of various Tokens in a generic collection.

opType is an example of how we did "enums" pre- Java 1.5. Note that you can make these types smarter by assigning precedence right there. You're welcome to make this modification.

Yes, you need to use my Token classes.

____________________________________________________________

Input

Your program will read a file called input.infix that contains a number of expressions, one per line.

Each line has, at most, 80 characters. Tokens will be separated by white space. Operands will be strictly non-negative integers. Operators are: { + - * / % } for addition, subtraction, multiplication, division, and modulus, respectively.

Here is a sample input:

13 + 23 - 42 * 2 3 * ( 5 - 2 ) % 5

A sample input file can be found here.

For my part, I promise that all expressions are valid.

____________________________________________________________

Output

Your program will output, for each input expression, on one line:

postfix expression = result

, where result is the value of expression.

There will be one expression per line (same as the input). Single-space only, please.

So, given the input, above, I'd expect the output to be:

13 23 + 42 2 * - = -48 3 5 2 - * 5 % = 4

____________________________________________________________

Documentation

I am NOT looking for a lot of comments here. Remember, your code should read like a book. But, each class should have a description, and each method should have a description and a discussion of inputs, side-effects, etc.

You will use Javadoc-style comments. HTML documentation will be created from your code, using ant (and javadoc, of course).

The HTML files will end up in a subdirectory of your source dir (which is also the CWD) called docs/.

See CS265/Labs/Java/Javadoc/ for an example.

____________________________________________________________

Ant

You will include a build.xml that has, at a minimum, the following targets:

  • compile - compiles all of your .java files.
  • run - runs your program, assuming that the input file is in the current directory. Depends on the compile target.
    Note, the code will need to be compiled from your source. I will delete all class files before we start, so... The run target will make sure all of your source files are run through javac.
  • doc - runs javadoc on all of your source files, creating files in ./docs

Note, since you're supplying build.xml, the names for the rest of the code doesn't matter. You can have 1 class, or 18 (though, that is probably overkill). The filenames don't matter to me (that is, they should be good names, but I don't need to know them ahead of time).

____________________________________________________________

Algorithms

Infix to Postfix

  • Append a right paren ')' to the end of the input expression.
  • Push a left paren '(' onto the stack.
  • Start at the first token. For each token:
    • If it is a left paren, push it onto the stack.
    • If it is a right paren, pop operators from the stack and append to the postfix expression, until a left paren is encountered on the stack. Remove and discard the left paren.
    • If it is an operand, append it to the postfix expression.
    • If it is an operator, then pop operators from the stack and append to the postfix expression while the operators have equal or higher precedence than the current token. Push current token (operator) onto the stack. 
      Remember, we're not treating the parentheses as operators, they're being handled separately.
  • Continue until you've reached the end of the expression. If the input expression was valid, then evey pop() should've been fine, and the stack should be empty.

Evaluating Postfix Expressions

  • Start at the first token. For each token:
    • If it is an operand, push it on the stack.
      Else if it is an operator, then
      • y ← pop top value
      • x ← pop top value
      • result ← x (oper) y
      • push result onto stack
      fi

Continue until you've reached the end of the expression. There should be exactly one element in the stack; the result of the expression.

The main function will parse the input file and hand the expressions to this function to evaluate. See the StreamTokenizer examples. Or, since the Java community is moving away from this, you might look at the String.split methods.

____________________________________________________________

Available Answers
$ 40.00

[Solved] java programming

  • This Solution has been Purchased 1 time
  • Submitted On 29 Nov, 2017 06:21:04
Answer posted by
Online Tutor Profile
solution
attached is the work Note: you will change the path in the ...
Buy now to view the complete solution
Other Related Questions

The benefits of buying study notes from CourseMerits

Assurance Of Timely Delivery
We value your patience, and to ensure you always receive your homework help within the promised time, our dedicated team of tutors begins their work as soon as the request arrives.
Best Price In The Market
All the services that are available on our page cost only a nominal amount of money. In fact, the prices are lower than the industry standards. You can always expect value for money from us.
Uninterrupted 24/7 Support
Our customer support wing remains online 24x7 to provide you seamless assistance. Also, when you post a query or a request here, you can expect an immediate response from our side.
closebutton
Only 45 characters allowed.
closebutton

$ 629.35