逆波兰式的生成算法.doc_第1页
逆波兰式的生成算法.doc_第2页
逆波兰式的生成算法.doc_第3页
逆波兰式的生成算法.doc_第4页
逆波兰式的生成算法.doc_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论