编写一个能够计算中缀表达式的java程序

来源:百度知道 编辑:UC知道 时间:2024/05/05 05:47:10
,其中关于中缀表达式有如下的要求:
1)表达式中可以出现小数
2)表达式中只处理二元运算符
3)表达式中出现的运算符为:+、-、*、/、^(幂运算)、(),其中幂运算符的优先级别比*和/的高,但是其结合性为右结合

 
 
 
基本上就是先做词法分析(Lexical Analysis),然后再依优先级别把所有操作符和相关的操作数逐一化解成数值,
一直到整个表达式被化解成一个数值(或碰上表达式里的格式或数值范围错误)为止。

代码里,tokenize( ) 负责词法分析,剩下的都交给 evaluate( ) 。
evaluate( ) 能正确地求出空格数量和位置不规则的表达式
(比如 " -8-(+   6*(1.5+723  )--9)+2^+3    ^-  5.2/16    ")。

注:
我没在 evaluate( ) 里捕捉任何异常,因为从里头冒出的任何异常都表示被传入的参数有错误。
(那意味着 evaluate( ) 的调用应该被放在 try block 里。)

import java.util.*;

class Expression {
    public static void main( String[ ] args ) {
        String expr = " -8-(+   6*(1.5+723  )--9)+2^+3    ^-  5.2/16    ";
        try {
            System.out.println( evalua