Entry类 这个类对表达式的合法性进行了粗筛:
packagecom.hy;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;//此类用于把算术表达式送入解析器
public classEntry {public static void main(String[] args) throwsIOException{//取得用户输入的表达式
BufferedReader br = new BufferedReader(newInputStreamReader(System.in));
String rawExpression= null;
System.out.print("请输入算术表达式:");
rawExpression=br.readLine();//得到合法的算术表达式
String expression="";for(int i=0;i
char c=rawExpression.charAt(i);//System.out.print(c+",");
if(Character.isDigit(c) || c=='+' || c=='-' || c=='*' || c=='/' || c=='(' || c==')' || c=='.'){//System.out.print(c);
expression+=c;
}else{
System.out.print(" "+c+"不是合法的算术表达式字符.");
System.exit(0);
}
}//送去解析
Lexer p=newLexer(expression);//p.print();//
Tree t=newTree(p.getInfixList());try{
System.out.println(t.evaluate());
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
执行结果 以下测试用例都通过了:
请输入算术表达式:1+2+3
6.0请输入算术表达式:1+2*3
7.0请输入算术表达式:2*(3+4)14.0请输入算术表达式:1+2*(6-4)5.0请输入算术表达式:1+2*(5-4)+6-7
2.0请输入算术表达式:(1+2)*3-4*(6-5)5.0请输入算术表达式:(1+2)*(3+4)21.0请输入算术表达式:1.1*5+(3+4)*10
75.5