解析算术表达式[3]扩展与延伸

在之前的文章中,我们已经实现了输入一个四则运算表达式(即只包含加减乘除和括号的表达式)的字符串,然后求出其运算结果的功能。整个过程的算法是非常明确,而且并不复杂,包括转换及求值,算法的时间复杂度为O(N),事实上,如果我们在字符一个个读入的时候同时进行转换求值,也是可以的。在实现了四则运算后,这样的程序几乎就可以作为一个比较“智能”的计算器的后台了(这时候我们输入2+3*4,得到的结果不会再是20,而是会得到正确的结果14),但是这样并不能使我们满足,我们所实现的四则运算,实在太简单,而如果想计算更为复杂的表达式,仅仅通过这四种运算,就显得力不从心了。这篇文章,作为解析算术表达式的最后一篇,我想主要来延伸讨论下面几个问题: 1.四则运算属于左结合的运算符,那么对于右结合的运算符,能否很好的加入进来呢?比如“^”这样的幂指运算符(对于习惯C语系的童鞋来说,a ^ b这样的运算等效于pow(a, b)),至于左结合和右结合的区别,稍后会在下文中谈到。 2.能否加入函数运算,让表达式支持sqrt(a+b)+c