表达式计算:中辍转后辍,一元操作符运算
老邓 2010-04-12 09:30:10 中缀转后缀需要处理的有:
1. 操作数,操作符的提取
2. 括号等关系到运算符优先级的符号
3. 一元操作符(如 +(正), -(负)) 等
4. 操作符和操作数的匹配,括号的匹配
基本思路如下:
用一个链表 std::list<ExpressionToken> 储存将要生成的后缀表达式
用一个栈 std::stack<OperatorType> 储存操作符
判断当前节点,如果是操作数,直接加入后缀表达式中,如果是操作符,则比较前一个操作符和当前操作符的优先级,如果前一个操作符优先级较高,则将前一个操作符加入后缀表达式中,否则将操作符压入操作符栈,如果遇到反括号 ')', 则在操作符栈中反向搜索,直到遇到匹配的正括号为止,将中间的操作符依次加到后缀表达式中。
我的问题:如何处理一元操作符,包括 + - ! ?
比如表达式:(-2 - 1) + !((+3 + !0) - -2) || 1
按上面的思路,如何生成后缀表达式?