本算法具体实现了数学表达式的中缀转后缀(逆波兰),并且对表达式进行了估值,支持基本的四则运算和若干数学函数。最大的缺点是不支持负数并且不能检查表达式的合法性,考虑到其算法的复杂性,笔者决定学习正则表达式来解决这一问题。
具体算法参考http://en.wikipedia.org/wiki/Shunting-yard_algorithm以及相关代码https://github.com/ekg/shuntingyard/blob/master/shuntingyard.py
import sys
import math
import cmath
import operator
# define operator
operator_ad = "+"
operator_mi = "-"
operator_mu = "*"
operator_di = "/"
operator_eq = "="
operator_lp = "("
operator_rp = ")"
# define operator implementation
operator_implement = {
"+": operator.add,
"-": operator.sub,
"*": operator.mul,
"/": operator.div,
}
# define function implementation
function_implement = {
"ceil": math.ceil, "floor": math.floor,
"fabs": math.fabs,
"factorial": math.factorial,
"pow": math.pow,
"sin": math.sin, "cos": math.cos, "tan": math.tan, "asin": math.asin, "acos": math.acos, "atan": math.atan,
"rad2deg": math.degrees, "deg2rad": math.radians,
"sinh": math.sinh, "cosh": math.cosh, "tanh": math.tanh, "asinh": math.asinh, "acosh": math.acosh, "atanh": math.atanh,
"erf": math.erf, "erfc": math.erfc, "gamma&#