/** * Checks if expr is a valid infix notation expression * @param expr * @return */ public static TokenQueue checkInfix(TokenStacksQueue expr){ int parens = 0; Token token; int operatorflag = 0; //0 after operator, 1 after operand int operandflag = 1; //0 after operand, 1 after operator for(int i = 0; i < expr.size(); i++){ token = expr.dequeue(); // Parenthesis if(token.getType() == 3){ Parenthesis paren = (Parenthesis)token; if(paren.isLeft()) parens++; else parens--; } // Operator else if(token.getType() == 2){ if(operatorflag == 0){ throw new RuntimeException("Error: invalid infix notation"); } else operatorflag = 0; operandflag = 1; } // Operand else if(token.getType() == 1){ if(operandflag == 0){ throw new RuntimeException("Error: invalid infix notation"); } else operatorflag = 1; operandflag = 0; } expr.enqueue(token); } if(parens == 0) return expr; else throw new RuntimeException("Error: invalid infix notation"); }