将中间顺序表达式转换为后顺序表达式
首先,这里涉及到编译原理中间代码结构的知识。
简单理解,如果要把A和B相加,有三种情况:
前缀表达式:如果运算符在前,则有+AB。
中缀表达式:如果运算符为in,则有a+b。
后缀表达式:运算符后有AB+
根据以上基础知识,中缀表达式a*b+c*(d-e)/f?转换为后缀表达式的过程如下:
(1)?根据算术符号的优先级,可以操作。遇到圆括号,首先要对圆括号中的表达式进行运算,其实和平时的运算过程差不多。
因此,转换如下:
ab* + c*(反)/f
ab* + c(反)*/f
ab* + cde-*f/
ab*?cde-*f/+
最后后缀表达式:?ab* cde-*f/+
第二种方法是利用数据结构中的堆栈来解决问题,其规则如下:
遭遇”(“?然后进入堆栈
遇到了其他操作数,即。Abc等加表情。
遇到一个运算符(比如+-?*/)放入堆栈中,需要注意的是,在处理该运算符时,需要依次从堆栈中弹出优先级比当前处理的运算符高或同级别的符号,直到遇到优先级比当前处理的运算符低的符号或遇到“("?停止突然出现。也就是说,如果当前扫描的是+号,栈顶有一个*号,因为乘号的运算符优先级比加号高,所以需要将*号弹出栈,加入表达式。当然,当加号遇到优先级相同的减号时,也需要在栈顶弹出减号,加入表达式。
当遇到“)”时,堆栈中的“(”,即左括号前的堆栈中的符号,会依次弹出加入表达式。
具体流程可以参考2014计算机考研408真题的相关问题。