以前没学好, 一直没写过, 自己想了一会, 结合网上的资料, 罗列重点如下
1 需要三个栈, 在顺序扫描表达式时, 分别存放操作符和操作数; 以及最终输出的表达式栈
2 每个操作符有两种优先级,如下定义:
+ -, 总比* /低, 理所当然。 +的f比g大, 是因为a+b+c时, 先算a+b, 所以前面的+号优先级更好。 f就表示前面的意思。
同理 (的f比g小, 是因为((a+b)-c)时,先选a+b, 前面的(没有后面的(的优先级高。
每个操作符的f,g设置是需要经过严密设定的
当“下一个操作符”比栈内操作符优先级高时, 直接入栈, 继续分析下一个
当相等时(由设定知,必定都为0:括号或者$), 直接退栈, 继续分析下一个
当低时,操作符一直退栈, 至栈顶操作符优先级低于下一个操作符; 相应的操作数也要退栈,建立表达式入栈;然后将该“下一个操作符入栈”, 继续分析下一个
来源于 http://blog.csdn.net/dananhai/archive/2008/03/17/2191104.aspx