/* *Johnny A. Shaieb *Program 3 *CS2003 */ import java.io.*; import java.util.*; public class Program3 { StackArrayBased stack = new StackArrayBased(); private String filename = ""; private String postfix = ""; private int count = 0; public static void main(String args[]) { //A + B * C * D * ( E + F * ( A - B ) ) Program3 p = new Program3(); p.requestFile(); p.InfixToPostfix(); //System.out.println(p.getPostFix()); } public String getPostFix() { return postfix; } public void InfixToPostfix() { String line = ""; int oper_value = 0; try { BufferedReader br = new BufferedReader(new FileReader(getFilename())); while((line = br.readLine()) != null) { StringTokenizer tok = new StringTokenizer(line); while(tok.hasMoreTokens()) { String tokLine = tok.nextToken(); System.out.println("Working on: " + tokLine); if( (tokLine.equalsIgnoreCase("+")) || (tokLine.equalsIgnoreCase("-")) || (tokLine.equalsIgnoreCase("*")) || (tokLine.equalsIgnoreCase("/")) || (tokLine.equalsIgnoreCase("(")) || (tokLine.equalsIgnoreCase("$")) ) { oper_value = assignValue(tokLine); if(stack.isEmpty()) { stack.push((String)tokLine); System.out.println("PUSHED> " + tokLine); count++; } else { String look = (String)stack.peek(); int peek_value = assignValue(look); System.out.println("OPERVAL: " + oper_value + " PEEKVAL: " + peek_value); if(oper_value == 0) { stack.push((String)tokLine); System.out.println("PUSHED> " + tokLine); count++; } else if(peek_value < oper_value) { stack.push((String)tokLine); System.out.println("PUSHED> " + tokLine); count++; } else { String temp = (String)stack.pop(); createPostfix(temp); stack.push((String)tokLine); } } }//First IF else if(tokLine.equalsIgnoreCase(")")) { System.out.println("Encountered a ')'"); boolean cont = true; while(!stack.isEmpty() && cont) { String temp = (String)stack.peek(); System.out.println("Inside While Peek Value: " + temp); if(!temp.equalsIgnoreCase("(")) { temp = (String)stack.pop(); count--; createPostfix(temp); } else { //get out off loop stack.pop(); count--; System.out.println("Get out of while loop"); cont = false; } } } else { createPostfix(tokLine); } }//while while(!stack.isEmpty()) { String temp = (String)stack.pop(); count--; createPostfix(temp); } System.out.println("Infix : " + line); System.out.println("Postfix: " + getPostFix()); postfixToValue(getPostFix()); postfix = ""; } } catch(Exception e) { System.out.println("Error> " + e); } } public void createPostfix(String s) { if(postfix.equalsIgnoreCase("")) { postfix = s; } else { postfix += " " + s; } System.out.println("Called createPostfix: " + postfix); } public int assignValue(String s) { int oper_value = 0; if(s.equalsIgnoreCase("+")) { oper_value = 1; } else if(s.equalsIgnoreCase("-")) { oper_value = 1; } else if(s.equalsIgnoreCase("*")) { oper_value = 2; } else if(s.equalsIgnoreCase("/")) { oper_value = 2; } else if(s.equalsIgnoreCase("$")) { oper_value = 3; } else if(s.equalsIgnoreCase("(")) { oper_value = 0; } else { System.out.println("Strange Operator encountered"); System.exit(-1); } return oper_value; } public void setFilename(String f) { filename = f; } public String getFilename() { return filename; } public void requestFile() { String file = ""; try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //System.out.print("Enter Filename> "); //file = br.readLine(); file = "C:\\Johnny\\School\\cs2003\\lab7\\infix_4line.txt"; setFilename(file); } catch(Exception e) { System.out.println("Error> " + e); } } public void postfixToValue(String str) { try { String line = ""; boolean goodline = true; StackArrayBased s = new StackArrayBased(); String tokLine = ""; StringTokenizer tok = new StringTokenizer(str); while(tok.hasMoreTokens()) { tokLine = tok.nextToken().trim(); //System.out.println("tok> " + tokLine); if( (tokLine.equalsIgnoreCase("+")) || (tokLine.equalsIgnoreCase("-")) || (tokLine.equalsIgnoreCase("*")) || (tokLine.equalsIgnoreCase("/")) || (tokLine.equalsIgnoreCase("$")) ) { //System.out.println("Symbol> " + tokLine); // if(!s.isEmpty()) { //6 4 3 + + 3 8 2 * + * 2 + 3 + Integer i = (Integer)s.pop(); int temp1 = i.intValue(); //System.out.println("POP> " + i); if(!s.isEmpty()) { i = (Integer)s.pop(); } else { System.out.println("Stack is empty,,, program terminated"); System.exit(-1); } int temp2 = i.intValue(); //System.out.println("POP> " + i); int temp3 = 0; if(tokLine.equalsIgnoreCase("+")) { temp3 = temp2 + temp1; } else if(tokLine.equalsIgnoreCase("-")) { temp3 = temp2 - temp1; } else if(tokLine.equalsIgnoreCase("*")) { temp3 = temp2 * temp1; } else if(tokLine.equalsIgnoreCase("/")) { temp3 = temp2 / temp1; } else if(tokLine.equalsIgnoreCase("$")) { temp3 = (int)Math.pow((double)temp2,(double)temp1); } else { System.out.println("Incorrect Symbol"); } s.push(new Integer(temp3)); } // } else if(tokLine.equalsIgnoreCase("")) { System.out.println("End of line reached"); goodline = false; } else { if(!s.isFull()) { int t = Integer.parseInt(tokLine); //System.out.println("PUSH> " + t); s.push(new Integer(t)); } } } if(goodline) { ///this is the last one Integer j = (Integer)s.pop(); int temp4 = j.intValue(); System.out.println("Value of postfix expression> " + temp4); System.out.println(); //System.out.println("Value Is> " + temp4); } else { System.out.println("a blank line was encountered"); } } catch(Exception e) { System.out.println("Error> " + e); } } }