Java Provide a complete implementation of class LinkedStack

(Java) Provide a complete implementation of class LinkedStack and test it (main method) on the InfixToPostfix applcation (listed below).

package linkedstack;

import java.util.*;
import java.util.regex.*;

/**
* Translates an infix expression to a postfix expression.
* @author Koffman & Wolfgang
*/
public class InfixToPostfix {

// Nested Class
/** Class to report a syntax error. */
public static class SyntaxErrorException extends Exception {

/**
* Construct a SyntaxErrorException with the specified
* message.
* @param message The message
*/
SyntaxErrorException(String message) {
super(message);
}
}
// Data Fields
/** The operator stack */
LinkedStack operatorStack;
//private Stack<Character> operatorStack;
/** The operators */
private static final String OPERATORS = \"-+*/\";
/** The precedence of the operators, matches order in OPERATORS. */
private static final int[] PRECEDENCE = {1, 1, 2, 2};
/**
* The Pattern to extract tokens
* A token is either a string of digits (\\d+)
* or a JavaIdentifier
* or an operator
*/
private static final Pattern tokens =
Pattern.compile(\"\\\\d+\\\\.\\\\d*|\\\\d+|\"
+ \"\\\\p{javaJavaIdentifierStart}\\\\p{javaJavaIdentifierPart}*\"
+ \"|[\" + OPERATORS + \"]\");
/** The postfix string */
private StringBuilder postfix;

/**
* Convert a string from infix to postfix.
* @param infix The infix expression
* @throws SyntaxErrorException
*/
public String convert(String infix) throws SyntaxErrorException {
operatorStack = new LinkedStack();
postfix = new StringBuilder();
Scanner s = new Scanner(infix);
try {
// Process each token in the infix string.
String nextToken = null;
while ((nextToken = s.findInLine(tokens)) != null) {
char firstChar = nextToken.charAt(0);
// Is it an operand?
if (Character.isJavaIdentifierStart(firstChar)
|| Character.isDigit(firstChar)) {
postfix.append(nextToken);
postfix.append(\' \');
} // Is it an operator?
else if (isOperator(firstChar)) {
processOperator(firstChar);
} else {
throw new SyntaxErrorException
(\"Unexpected Character Encountered: \" + firstChar);
}
} // End while.

// Pop any remaining operators and
// append them to postfix.
while (!operatorStack.empty()) {
char op = (char) operatorStack.pop();
postfix.append(op);
postfix.append(\' \');
}
// assert: Stack is empty, return result.
return postfix.toString();
} catch (EmptyStackException ex) {
throw new SyntaxErrorException(\"Syntax Error: The stack is empty\");
}
}

/**
* Method to process operators.
* @param op The operator
* @throws EmptyStackException
*/
private void processOperator(char op) {
if (operatorStack.empty()) {
operatorStack.push(op);
} else {
// Peek the operator stack and
// let topOp be top operator.
char topOp = (char) operatorStack.peek();
if (precedence(op) > precedence(topOp)) {
operatorStack.push(op);
} else {
// Pop all stacked operators with equal
// or higher precedence than op.
while (!operatorStack.empty()
&& precedence(op) <= precedence(topOp)) {
operatorStack.pop();
postfix.append(topOp);
postfix.append(\' \');
if (!operatorStack.empty()) {
// Reset topOp.
topOp = (char) operatorStack.peek();
}
}
// assert: Operator stack is empty or
// current operator precedence >
// top of stack operator precedence.
operatorStack.push(op);
}
}
}

/**
* Determine whether a character is an operator.
* @param ch The character to be tested
* @return true if ch is an operator
*/
private boolean isOperator(char ch) {
return OPERATORS.indexOf(ch) != -1;
}

/**
* Determine the precedence of an operator.
* @param op The operator
* @return the precedence
*/
private int precedence(char op) {
return PRECEDENCE[OPERATORS.indexOf(op)];
}
}

Solution


import java.util.EmptyStackException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;

class InfixToPostfixDemo {

private static final String OPERATORS = \"-+*/\";
private static final int[] PRECEDENCE = {1, 1, 2, 2};
private static final Pattern tokens = Pattern.compile(\"\\\\d+\\\\.\\\\d*|\\\\d+|\" + \"\\\\p{javaJavaIdentifierStart}\\\\p{javaJavaIdentifierPart}*\" + \"|[\" + OPERATORS + \"]\");
java.util.Stack<Character> operatorStack = new java.util.Stack<Character>();

private static class SyntaxErrorException extends Exception {

public SyntaxErrorException(String message) {
super(message);
}
}

public String convert(String infix) throws SyntaxErrorException {
infix = \"(\" + infix + \")\"; // enclose infix expr within parentheses
StringBuilder postfix = new StringBuilder();
try {
/* scan the infix char-by-char until end of string is reached */
for (int i = 0; i < infix.length(); i++) {
char firstChar, item;
firstChar = infix.charAt(i);
if (isOperand(firstChar)) // if(firstChar is an operand), then
{
postfix.append(firstChar); // append firstChar to postfix string 38 Lab Manual Data Structures through Java
} else if (firstChar == \'(\') // if(firstChar is a left-bracket), then
{
operatorStack.push(firstChar); // push onto the stack
} else if (isOperator(firstChar)) // if(firstChar is an operator), then
{
item = operatorStack.pop(); // pop an item from the stack
/* if(item is an operator), then check the precedence of firstChar and item*/
if (isOperator(item)) {
if (precedence(item) >= precedence(firstChar)) {
operatorStack.push(item);
operatorStack.push(firstChar);
} else {
postfix.append(item);
operatorStack.push(firstChar);
}
} else {
operatorStack.push(item);
operatorStack.push(firstChar);
}
} // end of if(isOperator(firstChar))
else if (firstChar == \')\') {
item = operatorStack.pop();
while (item != \'(\') {
postfix.append(item);
item = operatorStack.pop();
}
} else {
throw new SyntaxErrorException(\"Unexpected Character Encountered: \" + firstChar);

}
} // end of for-loop
// Pop any remaining operators and
// append them to postfix.
while (!operatorStack.empty()) {
char op = (char) operatorStack.pop();
postfix.append(op);
postfix.append(\' \');
}
} catch (EmptyStackException ex) {
throw new SyntaxErrorException(\"Syntax Error: The stack is empty\");

}
return postfix.toString();
} // end of toPostfix() method

public boolean isOperand(char c) {
return (c >= \'A\' && c <= \'Z\');
}

public boolean isOperator(char ch) {
return OPERATORS.indexOf(ch) != -1;
}

public int precedence(char op) {
return PRECEDENCE[OPERATORS.indexOf(op)];
}

public static void main(String args[]) {
InfixToPostfixDemo obj = new InfixToPostfixDemo();
String infix = \"A*(B+C/D)-E\";
System.out.println(\"infix: \" + infix);
try {
System.out.println(\"postfix:\" + obj.convert(infix));
} catch (SyntaxErrorException ex) {
Logger.getLogger(InfixToPostfixDemo.class.getName()).log(Level.SEVERE, null, ex);
}
}

}

(Java) Provide a complete implementation of class LinkedStack and test it (main method) on the InfixToPostfix applcation (listed below). package linkedstack; im
(Java) Provide a complete implementation of class LinkedStack and test it (main method) on the InfixToPostfix applcation (listed below). package linkedstack; im
(Java) Provide a complete implementation of class LinkedStack and test it (main method) on the InfixToPostfix applcation (listed below). package linkedstack; im
(Java) Provide a complete implementation of class LinkedStack and test it (main method) on the InfixToPostfix applcation (listed below). package linkedstack; im

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site