In: Computer Science
Write a program that converts prefix expressions to postfix and postfix expressions to prefix. (java)
The program for this project should consist of three classes.
-The main class should create a GUI that allows the user to input an expression in either prefix or postfix and convert it to postfix or prefix, respectively.
-The other class should contain the code to perform the conversions.
--->The pseudocode for prefix to postfix, which requires two stacks, is shown below:
tokenize the string containing the prefix expression
while there are more tokens
push the token onto a reversal stack if it is not a space
while the reversal stack is not empty
pop the next token from the reversal stack
if it is an operand
push it onto the operand stack
else it is an operator
pop two operands off of the operand stack
create a string with the two operands followed
the operator
push that string onto the operand stack
pop the postfix expression off the stack
The pseudocode for the postfix to prefix conversion, which requires only one stack, is shown below:
tokenize the string containing the postfix expression
while there are more tokens
get the next token
if it is a space
skip it
else if it is an operand
push it onto the operand stack
else it is an operator
pop two operands off of the operand stack
create a string with the operator followed by
two operands
push that string onto the operand stack
pop the prefix expression off the stack
A checked exception SyntaxError should be thrown by the methods that perform the conversions if an empty stack is ever popped or the stack is not empty once the conversion is complete. That exception should be caught in the main class, where a JOptionPane window should be displayed containing an error message.
PROGRAM
import javax.swing.JOptionPane;
import java.util.Stack;
public class postfixprefix {
static boolean Operator(char x){
switch (x){
case '-':
case '+':
case '/':
case '*':
case '^':
return true;
}
return false;
}
public static String convert_Prifix(String expression){
Stack<String> stack = new Stack<>();
for (int i = 0; i <expression.length() ; i++) {
char c = expression.charAt(i);
if(Operator(c)){
String s1 = stack.pop();
String s2 = stack.pop();
String temp = c + s2 + s1;
stack.push(temp);
}else{
stack.push(c+"");
}
}
String result = stack.pop();
return result;
}
public static String convert_Postfix(String expression){
Stack<String> stack = new Stack<String>();
for (int i = expression.length()-1; i >=0 ; i--) {
char c = expression.charAt(i);
if(Operator(c)){
String s1 = stack.pop();
String s2 = stack.pop();
String temp = s1 + s2 + c;
stack.push(temp);
}else{
stack.push(c+"");
}
}
String result = stack.pop();
return result;
}
public static void main(String[] args) {
String postfix,prefix,input,expression;
int n;
expression = JOptionPane.showInputDialog("Enter Expression");
input= JOptionPane.showInputDialog("Enter 1 for prefix and 2 for postfix");
n = Integer.parseInt(input);
if(n==1) {
prefix= convert_Prifix(expression);
JOptionPane.showMessageDialog(null,"Prefix Expression: "+ prefix);
}
else {
postfix= convert_Postfix(expression);
JOptionPane.showMessageDialog(null,"Postfix Expression: "+ postfix);
}
}
}
OUTPUT