已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
逆波兰式的生成程序(选做)一、实验目的和要求内容:掌握语法分析的基本思想,并用高级语言编写逆波兰式的生成程序。 要求:利用逆波兰式生成算法编写程序,将从键盘中输入的算术表达式(中缀表达式)转化为逆波兰式。二、实验内容和原理逆波兰表达式的生成过程涉及到运算符的优先级,下表中列出几个常用运算符的优先关系。常用运算符优先关系矩阵右左+-*/()+-*/(逆波兰表达式生成算法的关键在于比较当前运算符与栈顶运算符的优先关系,若当前运算符的优先关系高于栈顶运算符,则当前运算符进栈,若当前运算符的优先级小于栈顶运算符,则栈顶运算符退栈。逆波兰式生成算法的流程图 实验代码:import java.io.BufferedReader ;import java.io.IOException ;import java.io.InputStreamReader ;public class ReversePolishNotation/*-成员变量的声明-*/private final char operatorPriorMatrix = , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ; private char infixExpression ; /字符串infix用于表示要处理的中缀表达式private String reversePolishExpression = new String( ) ; /字符串reversePlishExpression用于表示处理结果逆波兰式private String analysisStack = new String( ) ; /字符串analysisStack用于表示分析栈private int lengthOfInfixExpression = 0 ; /中缀表达式的长度,初始值为0private int count = 0 ; private int matchFlag = 1 ; /用来标识左右括号是否配对正确/*-*/*-成员方法的定义-*/private void init( String str )str = str.trim( ) ;infixExpression = str.toCharArray( ) ;lengthOfInfixExpression = infixExpression.length ;private int operatorJudgement( char currentOperator )int flag = -1 ;switch( currentOperator )case + :flag = 0 ; break ;case - :flag = 1 ; break ;case * :flag = 2 ; break ;case / :flag = 3 ; break ;case ( :flag = 4 ; break ;case ) :flag = 5 ; break ;return flag ; private void convertProcess( String str )init( str ) ;while( true )matchFlag = 0 ;if( count = lengthOfInfixExpression )while( analysisStack.length( ) != 0 )if( analysisStack.charAt( analysisStack.length( ) - 1 ) = ( ) System.out.println( n您输入的中缀表达式中有无法配对的(括号,请仔细核实! ) ; System.exit( 0 ) ;else reversePolishExpression += analysisStack.charAt( analysisStack.length( ) - 1 ) ;analysisStack = analysisStack.substring( 0 , analysisStack.length( ) -1 ) ;System.out.println( n 逆 波 兰 式 为: + reversePolishExpression ) ; System.exit( 0 ) ;else if( operatorJudgement( infixExpression count ) = -1 )reversePolishExpression += infixExpression count ;else while( analysisStack.length( ) != 0 )if( operatorPriorMatrixoperatorJudgement(analysisStack.charAt(analysisStack.length()-1 ) )operatorJudgement(infixExpressioncount) = )analysisStack += infixExpression count ; break ;else if( infixExpression count != ) )reversePolishExpression += analysisStack.charAt( analysisStack.length() - 1 ) ;analysisStack = analysisStack.substring( 0 , analysisStack.length( ) -1 ) ;elsewhile( analysisStack.length( ) = 0 | analysisStack.charAt( analysisStack.length() -1 ) != ( )if( analysisStack.length( ) = 0 )System.out.println( n您输入的中缀表达式中有无法配对的)括号,请仔细核实! ) ;System.exit( 0 ) ;else reversePolishExpression += analysisStack.charAt( analysisStack.length() - 1 ) ;analysisStack = analysisStack.substring( 0 , analysisStack.length() -1 ) ;if( analysisStack.charAt( analysisStack.length() -1 ) = ( )analysisStack = analysisStack.substring( 0 , analysisStack.length( ) - 1 ) ;matchFlag = 1 ;break ;if( analysisStack.length( ) = 0 )if( infixExpression count != ) )analysisStack += infixExpression count ;else if( matchFlag != 1 )System.out.println( n您输入的中缀表达式中有无法配对的)括号,请仔细核实! ) ;System.exit( 0 ) ;count + ; public static void main(String args) throws IOException System.out.print( 请输入中缀表达式: ) ;BufferedReader
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高级天车工试题及答案
- 2025云南事业单位联考面试试题及答案解析
- 高温中暑事故应急预案演练方案(2篇)
- 2025年产科常见并发症急救处理能力考核试题及答案
- 基于用户故事的需求规划与估算计划
- 客户成功经理初级工作计划与客户维护方案
- 新进会计助理日常工作计划及提升策略
- 公路养护安全指南
- 新手妈妈中级产后恢复师的工作与安排
- 钢琴教师教学规划与时间管理手册
- 佣金合同协议书
- 2024-2025学年贵州省部分校九年级上学期期中联考英语试卷
- 深度融合与责任担当:企业主责主业的实践与思考
- 教学事故认定与处理办法
- 《光传输原理与技术》课件
- 广西田林八渡金矿 资源储量核实报告
- 水溶性肥料项目可行性研究报告
- 教育戏剧促进幼儿认知发展
- 四川省护理质量管理评价标准
- 测绘类专业大学生职业生涯发展
- 【MOOC】市场调查与研究-南京邮电大学 中国大学慕课MOOC答案
评论
0/150
提交评论