编译原理实验:中间代码生成——逆波兰表达式
编译原理实验:中间代码生成——逆波兰表达式 逆波兰表达式 测试 逆波兰表达式 运算对象写在前,运算符写在后(后缀表示形式) 例如:a+b → \rightarrow → ab+ (a+b) c → \rightarrow → ab+c a+b c → \rightarrow → abc + a=b c+b d → \rightarrow → abc bd += 优点:易于计算机处理 利用栈,将扫描到的运算对象入栈,碰到运算符: 若是双目运算符,则对栈顶的两个运算对象实施该运算并将运算结果代替这两个运算对象进栈; 若是单目运算符,对栈顶元素,执行该运算,将运算结果代替该元素进栈,最后结果即栈顶元素。 c++代码: # include <string> # include <iostream> # include <map> # include <stack> # include <vector> using namespace std ; string str ; //需要进行分析的算术表达式 stack < char > tem ; //当无法确定运算符是否要输出的时候,将运算符进栈 vector < string > exp ; //逆波兰表达式序列 map < char , int > opPri ; //定义预定义运算符的优先级 bool convert ( )