资源描述:
《逆波兰式的生成算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、逆波兰式的生成程序(选做)一、实验目的和要求内容:掌握语法分析的基本思想,并用高级语言编写逆波兰式的生成程序。要求:利用逆波兰式生成算法编写程序,将从键盘中输入的算术表达式(中缀表达式)转化为逆波兰式。二、实验内容和原理逆波兰表达式的生成过程涉及到运算符的优先级,下表中列出几个常用运算符的优先关系。常用运算符优先关系矩阵右左+-*/()+>><<<>->><<<>*>>>><>/>>>><>(<<<<<=)>>>><>逆波兰表达式生成算法的关键在于比较当前运算符与栈顶运算符的优先关系,若当前运算符的优先关系高于栈顶运算符,则当前运算符进栈,若当前运算符的优先级小
2、于栈顶运算符,则栈顶运算符退栈。逆波兰式生成算法的流程图实验代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassReversePolishNotation{/*-------------------------------------成员变量的声明--------------------------------------------*/privatefinalcharoperatorPriorMatrix[][]
3、={{'>','>','<','<','<','>'},{'>','>','<','<','<','>'},{'>','>','>','>','<','>'},{'>','>','>','>','<','>'},{'<','<','<','<','<','='},{'>','>','>','>','','>'}};privatecharinfixExpression[];//字符串infix用于表示要处理的中缀表达式privateStringreversePolishExpression=newString();//字符串reversePlishExpressi
4、on用于表示处理结果逆波兰式privateStringanalysisStack=newString();//字符串analysisStack用于表示分析栈privateintlengthOfInfixExpression=0;//中缀表达式的长度,初始值为0privateintcount=0;privateintmatchFlag=1;//用来标识左右括号是否配对正确/*---------------------------------------------------------------------------------*//*-----------
5、-----------------------成员方法的定义-------------------------------*/privatevoidinit(Stringstr){str=str.trim();infixExpression=str.toCharArray();lengthOfInfixExpression=infixExpression.length;}privateintoperatorJudgement(charcurrentOperator){intflag=-1;switch(currentOperator){case'+':flag=
6、0;break;case'-':flag=1;break;case'*':flag=2;break;case'/':flag=3;break;case'(':flag=4;break;case')':flag=5;break;}returnflag;}privatevoidconvertProcess(Stringstr){init(str);while(true){matchFlag=0;if(count>=lengthOfInfixExpression){while(analysisStack.length()!=0){if(analysisStack.ch
7、arAt(analysisStack.length()-1)=='('){System.out.println("您输入的中缀表达式中有无法配对的'('括号,请仔细核实!");System.exit(0);}else{reversePolishExpression+=analysisStack.charAt(analysisStack.length()-1);analysisStack=analysisStack.substring(0,analysisStack.length()-1);}}System.out.println("逆波兰式为:"+rev
8、ersePolishEx