关于数学表达式的计算,网上可能都已经说烂了,比如常用的前缀表达式,或者本人之前写过的正则表达式替换法,以及其他一些变通的方法(调用脚本语言、运行时编译)等。但本文所讲的方法,与以上方法相比有本质的不同,以上方法都是接受一个固定的数学表达式,然后计算出一个固定的数字作为结果,而本文的方法实质上相当于一个数学表达式的编译器,其过程是先将整个表达式编译成一个树状的中间结构,在此基础上进行各种操作,因此可以支持带有变量的数学表达式,可以进行微积分、多项式化简展开等操作,相当于一个小型符号计算系统。
首先,我们分析下数学表达式的基本结构。一个正确的数学表达式本质上只有两部分组成:数据和对该数据的操作,由以下部分组成:数据、未知量、函数、运算符,