在第一版的数学表达式求值程序中,仅实现了对整数的基本数学操作,包括+、-、*、/、(和)。主要的实现方式是利用队列、栈和优先级关系表来进行数学表达式的计算。第二版主要是想加一些常用的数学函数进去,以便在数学表达式中可以使用函数。
实现的方式是新加了一种类型,也就是function类型,现在总共有操作符、操作数和函数三种类型。对数学表达式进行解析时,token中除了保存数字之外,还可以保存函数名称,将token中保存的函数名称与程序支持的函数名称比较,如果是支持的函数,则保存函数的索引。
除此之外,最重要的是设置函数的操作优先级,在数学表达式中,所有的函数应该都处于相同的优先级,他比括号的优先级低,但是比其他操作符的优先级要高,如果是多个函数调用的话,则应该是从左到右依次进行计算。
目前函数仅支持一元函数调用,包括:"sin","cos","tan","round","ceil","floor","abs"
下面是函数调用的一个例子:
具体的代码放在下面的链接中,名称为MathCalculateV2.zip:
目前程序的问题:
1)不能识别负数
2)不能识别小数
3)对错误的数学表达式无法响应
4)仅支持有限的一元函数
5)对嵌套函数的计算有时候会出错
以后会逐步改正这些问题。