做表达式的运算时,一般把中缀表达式转换成后缀表达式
比如 a = b + c
转换成 a b c + =
译码时先做词法分析,(就是把表达式中的每个基本部分输入到栈中,我分为运算符和变量两种元素)
按照中缀表达式的顺序,a = b + c
之后转换成后缀表达式,:遇到数字直接入后缀表达式栈,(同时事先定义好运算符的优先级,定义一个暂时的符号栈 ),遇到运算符就将其与符号栈栈顶的运算符优先级比较,低就将其入后缀表达式栈,高则将符号栈顶的运算符出栈,并且入到后缀表达式栈中,继续与现在的符号栈栈顶比较优先级,后续操作如上。
之后的计算就比较简单了,不赘述。
但是译码时也会遇到特殊的格式 比如 a = fun_1(b ,c)+d 这种表达式,函数作为一个基本的运算单位,我想了两天,纠结于是否把函数名当作一个运算符处理,之后的括号,参数按照之前的方式处理。但是这样太复杂了,考虑逗号与数组逗号的重复。
现在我考虑把fun_1(b,c)当作一个变量处理,那么整个表达式就简单了很多了。(吐槽一下我的思考能力,就和考数学一样,审题,然后根据题型特点选择合适的公式和定理,我认为这是数学考高分的诀窍,但是自己总是脑子转不到那里去。常常在笨拙的方法上越走越远,难受。)