Expression+Class

import java.util.*;

public class Expression{ /* String s, x;
 * Strings used for storing expression.

/* double term{ double ans = 0; StringBuffer temp = new StringBuffer; while( s.length > 0 && Character.isDigit( s.charAt( 0 ) ) ){ temp.append(Integer.parseInt( "" + s.charAt( 0 ) )); s = s.substring( 1 ); } if( s.length > 0 && s.charAt( 0 ) == '.' ){ temp.append( '.' ); s = s.substring( 1 ); while( s.length > 0 && Character.isDigit( s.charAt( 0 ) ) ){ temp.append(Integer.parseInt( "" + s.charAt( 0 ) )); s = s.substring( 1 ); } } if( s.length > 0 && (s.charAt(0) == 'e' || s.charAt(0) == 'E') ){ temp.append( 'e' ); s = s.substring( 1 ); temp.append( s.charAt( 0 ) ); s = s.substring( 1 ); while( s.length > 0 && Character.isDigit( s.charAt( 0 ) ) ){ temp.append(Integer.parseInt( "" + s.charAt( 0 ) )); s = s.substring( 1 ); } } ans = Double.valueOf( temp.toString ).doubleValue; return ans; }
 * Term evaluator for number literals.

/* double paren{ double ans; if( s.charAt( 0 ) == '(' ){ s = s.substring( 1 ); ans = add; s = s.substring( 1 ); } else { ans = term; } return ans; }
 * Parentheses solver.

/* double exp{ boolean neg = false; if( s.charAt( 0 ) == '-' ){ neg = true; s = s.substring( 1 ); } double ans = paren; while( s.length > 0 ){ if( s.charAt( 0 ) == '^' ){ s = s.substring( 1 ); boolean expNeg = false; if( s.charAt( 0 ) == '-' ){ expNeg = true; s = s.substring( 1 ); } double e = paren; if( ans < 0 ){ //if it's negative double x = 1; if( Math.ceil(e) == e ){// only raise to an integer if( expNeg ) e *= -1; if( e == 0 ) ans = 1; else if( e > 0 ) for( int i = 0; i < e; i++ ) x *= ans; else for( int i = 0; i < -e; i++ ) x /= ans; ans = x; } else { ans = Math.log(-1); // otherwise make it NaN } } else if( expNeg ) ans = Math.exp( -e*Math.log( ans ) ); else ans = Math.exp( e*Math.log( ans ) ); } else break; } if( neg ) ans *= -1; return ans; }
 * Exponentiation solver.

/* double trig{ double ans = 0; boolean found = false; if( s.indexOf( "sin" ) == 0 ){ s = s.substring( 3 ); ans = Math.sin( trig ); found = true; } else if( s.indexOf( "cos" ) == 0 ){ s = s.substring( 3 ); ans = Math.cos( trig ); found = true; } else if( s.indexOf( "tan" ) == 0 ){ s = s.substring( 3 ); ans = Math.tan( trig ); found = true; } if( !found ){ ans = exp; } return ans; }
 * Trigonometric function solver.

/* double mul{ double ans = trig; if( s.length > 0 ){ while( s.length > 0 ){ if( s.charAt( 0 ) == '*' ){ s = s.substring( 1 ); ans *= trig; } else if( s.charAt( 0 ) == '/' ){ s = s.substring( 1 ); ans /= trig; } else break; } } return ans; }
 * Multiplication, division expression solver.

/* double add{ double ans = mul; while( s.length > 0 ){ if( s.charAt( 0 ) == '+' ){ s = s.substring( 1 ); ans += mul; } else if( s.charAt( 0 ) == '-' ){ s = s.substring( 1 ); ans -= mul; } else{ break; } } return ans; }
 * Addition, subtraction expression solver.

/* public double evaluate{ s = x.intern; double last = add; return last; }
 * Public access method to evaluate this expression.

/* public Expression( String s ){ // remove white space, assume only spaces or tabs StringBuffer b = new StringBuffer; StringTokenizer t = new StringTokenizer( s, " " ); while( t.hasMoreElements ) b.append( t.nextToken ); t = new StringTokenizer( b.toString, "\t" ); b = new StringBuffer; while( t.hasMoreElements ) b.append( t.nextToken );
 * Creates new Expression.

x = b.toString; }

/* public String toString{ return x.intern; }
 * The String value of this Expression.

/* public static void main( String[] args ){ Expression e = new Expression( args[0] ); System.out.println( e + " = " + e.evaluate ); } }
 * Test our Expression class by evaluating the command-line
 * argument and then returning.