编译原理太原理工大学
- 格式:doc
- 大小:331.50 KB
- 文档页数:12
《编译原理》课后习题第 1 章引论第1 题解释下列术语:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第2 题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。
第一大题小题概念题,下面会零散分布第二大题正规集、正规式、NFA、DFA、3型文法(正规式跟正规集是一样的,更好描述,更精确)这五个点是等价的,要求可以互相转换(老师原话:最讨厌的是给正规集,构造正规式或者文法自动机到文法的转换,自己可以看一下)考试要求的是最基本的转换:给正规式,构造它对应的DFA(三个步骤,一个步骤5分)1、先把正规式变化为NFA(规则是死的,有三种规则拆弧或增加弧或增加节点,把字拆的越来越短,最后满足一条弧上要么是一个字符或者是一个空字)(见PPT的3.7 3.8节)2、用子集构造法( -closure)确定化为DFA确定化是对NFA的状态重新组合3、化简词法分析和语法分析都用到的理论基础是形式语言与自动机词法分析用到是自动机(自动机的模型很棒,处理离散问题的一个经典的数学模型,例如电梯控制,密码破译等等)语法分析是重点(两部分)文法的概念:文法是对语言语法结构的一种形式化描述,通过文法的话非常精确。
(什么是文法?)(这是老师口述,建议可以再自查校对一下)乔姆斯基定义了四种类型的文法:PPT的chapter4-1语法分析P700型文法 1型文法2型文法(上下文无关文法)3型文法(正规文法)其中,V T:终结符号,是小写符号的集合,例{a,b}V N:非终结符号,是大写符号的集合,例{A,B}S:开始符号P:产生式例:文法G:S→P|aPPbP→ba|bQaQ→abV T:{a,b} V n:{S,P,Q} 开始符号:S 产生式:以上三行几个简单的定义:句子:文法的语言:给出一个文法,说出这个文法的语言是什么例1:例2:G:S→P|aPPbP→ba|bQaQ→ab求语言,L(G)此处为正规式的表述:(ba+|aba(ba)+b)求语言一般用语言描述就好,参见例1例3例3:例4:语言:{a m b n|m,n>=1}集合元素是什么?答:以a开头以b结尾的ab串(只写是ab串是不得分的){a n b n| n>=1}给一个语言,把文法描述出来(太难,掌握2型的就好,目测不考)文法的二义性如果问如何证明文法是二义的,参见课本第二章的第九题,文法的改写很重要!通过文法的改写:1 消除了二义性2 消除了左递归3 消除了回溯写文法的题会有语法分析方法两类四种:两类是推导和规约这两种方法的特点:自上而下有四个问题:①回溯问题②虚假匹配问题③不能左递归④错误匹配不准确自下而上只有一个问题:确定这个句子里哪个串是可规约串必须掌握两种方法:第三大题给一个文法,构造一个LL(1)分析表(实际上是构造它的预测分析方法)两种类型的题型:1 给一个文法,问:它是LL(1)文法么这个问题可以直接判定它是或者不是(有左递归就不是LL(1))2 给一个文法,构造它的LL(1)分析表,判断是不是LL(1)文法这个问题里面可能含有左递归,那第一步需要消除左递归,第二步要消除回溯,然后要求两个集合,FIRST和FOLLOW这两个集合然后构造表,如果里面有冲突的话,就不是,如果没有冲突的话,就是LL(1)文法记住一个定理,递归下降子程序(不考)递归下降方法的特点:自然,容易写要求写编译程序的语言是支持递归的代码长第四大题规约算符优先方法(了解)LR方法:LR(0)SLR(1)二义文法的应用这三个选一个(我猜是后两个选一个)LR方法转换为:给一个文法,构造识别这个文法活前缀的下垂自动机(核心问题)直接话项目集组,看看里面有没有冲突没有冲突就是LR(0),有冲突看看能不能依靠FOLLOW集去解决,FOLLOW集解决解决不掉就用规范LR(1)文法有二义性时,用硬规定的方式消除掉二义性遇到这种题,把冲突消除的时候,要说明用什么规则消除的,要不然扣分语义分析:(小题)知道什么是属性文法什么是语法制导翻译中间代码生成:小题:什么是中间代码?为什么引用中间代码?尤其注意有四种常见的中间代码形式,会用它表示例:给一个中缀形式,表示成后缀形式,三元式,四元式,间接三元式第五大题大题:给一个句子,要求语法制导翻译成中间代码仅写中间代码的话,不得分(一般采用四元式,看四元式生成的个数对不对)把语法分析生成过程一步步写出来,尽可能简写,或者画出来语法分析树1 把中间代码四元式单独写成一个表2 一定要把语法制导的过程写出来尽可能简练3 遗留问题符号表管理不考出错管理概念性知道:1 编译程序能够发现几种类型的错误语法错误(包括语法错误和词法错误)和语义错误(只能发现部分的)2 错误处理方法有几种方式:一个矫正,另一个是局部化优化:重要思想:流图概念性知道:有三种层次的优化:局部优化,循环优化和全局优化局部优化的算法要求掌握 dag 借助无环路有向图实现了局部优化循环优化:代码外提,强度削弱,改变控制变量全局优化基本的目标代码生成算法,必须掌握最后一个大题dag图实现局部优化,优化以后反写得到中间代码,再到目标代码生成目标代码生成:待用信息、活跃信息要求一下生成过程中,两个数组R-value和A-value要描述一下生成较优的目标代码的话需要注意dag反写时的次序运行时:内存分配方案有两种,一个静态一个动态,有什么特点,看一下,动态分配又叫栈式活动记录看一下形参实参的四种方式是什么意思。
《编译原理》课程教学大纲课程代码:课程名称:编译原理/Compile Principle课程类型:专业课学时学分:48学时/3学分适用专业:计算机科学与技术开课部门:灾害信息工程系一、课程的地位、目的和任务《编译原理》是计算机专业的一门重要的专业基础课程,它的主要任务是系统地介绍编译程序的基本原理、基本实现方法,编译方面的最新技术及其研究发展方向。
通过本课程的学习,应使学生掌握高级程序设计语言的编译原理及其基本实现技术,了解编译方面的最新技术发展和研究方向,具有设计、实现编译程序的基本能力。
二、课程与相关课程的联系与分工编译原理与操作系统原理、数据库系统原理、计算机系统结构关系密切同时它的研究对象是计算机语言的编译过程,所以本门课程的先修课是高级语言程序设计、数据结构、操作系统原理、数据库系统原理、计算机系统结构。
通过教学使学生了解、掌握高级语言编译程序构造的一般原理和基本实现方法。
即:词法分析--语法分析--中间代码生成--优化--目标代码生成。
而且,编译技术所涉及的建模技术同样适合其他软件的建模,也帮助学生提高运用所学知识进行独立分析问题和解决问题的能力。
本课程的后续课程是计算理论。
三、教学内容与基本要求课程内容要按章、节、目的顺序列出,并按“了解”、“理解”和“掌握”等层次,对主要“知识点”、“能力点”提出基本要求。
同时指明教学的重点和难点所在。
大学计算机基础、体育等课程也可以根据内容分块。
第一章概述1.教学内容1.1 程序设计语言与翻译程序1.2 编译过程和编译程序的结构1.3 编译程序的构造1.4 编译程序的发展与应用1.5 小结1.6 习题2.重点难点重点:通用程序设计语言的主要特征;编译器在计算机系统中的地位和作用;编译器的基本工作原理;编译器各个阶段的工作与任务;编译器的编写工具。
难点:编译器的基本工作原理。
3.基本要求理解什么是编译程序,了解编译程序工作的基本过程及其各阶段的基本任务,熟悉编译程序总体框架,了解编译程序的生成过程和构造工具。
笔试科目对应的考试专业
试题编号:001
机械制图、理论力学、材料力学、机械原理、机械设计
试题编号:002
固体物理化学、材料科学概论、金属材料及热处理、材料性能学、材料现代分析方法
试题编号:003
数字电子技术、自动控制理论、电力电子技术、电机学、单片机原理试题编号:004
信号与系统、模拟电子线路、微机原理、数字信号处理、电路分析基础
试题编号:005
模拟电子技术、电路、C语言程序设计、微机原理与接口技术、计算机文化基础
试题编号:006
软件工程、数据库原理、离散数学、面向对象程序设计、编译原理试题编号:007
公共建筑技术原理、城市规划原理、室内空间设计方法、中国古代建筑装饰、建筑节能
试题编号:008.
混泥土结构基本原理、结构基本原理、土木工程施工、建筑结构抗震土力学
土力学、水利工程测量、水利工程概论、
试题编号:010
有机合成化学、物理化学、化工原理、综合化学实验、无机化学
试题编号:011
矿业基础
试题编号:012
地质基础
试题编号:013
环境监测、环境工程微生物学、建筑给水排水工程、给水排水管道工程、水处理工程
试题编号:014
供热工程、暖通空调
试题编号:015
财政学、市场营销学、金融学、组织行为学、人力资源管理
试题编号:016
教育学、体育心理学、体育概论、体育保健学、运动生理学
试题编号:017
中国美术史、构成基础、装饰基础、解剖、透视原理、艺术概论、外国美术史
试题编号:018
理论力学、材料力学、线性代数、生理学
量子力学、电路分析基础、电动力学、光电技术、原子物理。
理科就业前景好的专业排名NO.1 计算机科学与技术青睐指数:★★★★★毕业生/年:100000人以上主要课程电路原理、数字逻辑、数字分析、通信原理概论、模拟电子技术、计算机原理、微型计算机技术、计算机系统结构、计算机网络、高级语言、汇编语言、数据结构、操作系统、编译原理、系统分析与控制、信号处理原理等。
就业前景计算机科学与技术专业是近些年来随着计算机的广泛应用发展起来的,国际互联网Internet的发展,网络时代的到来,使计算机的功能不仅仅只是替代人脑的一些脑力运算工作,还成为了信息时代人们进行交流的重要工具。
该专业的研究方向主要有计算机软件与理论、数据库与信息系统、计算机系统结构等。
无论是重点大学还是一般大学,与计算机相关的专业都属于热门专业,在不同批次院校中录取分数都比较高,但是由于大量学校盲目上马此类专业,其培养出来的人才也是良莠不齐,如果选报学校不当,毕业后只能去从事卖电脑或维修电脑的一般工作。
就目前社会的需求情况来看,以下四类计算机人才比较吃香:软件编程人才,网络工程人才,信息安全人才,电脑动画人才。
这个专业设置的历史虽然不长,但发展速度却异常惊人。
全国各级各类的高校几乎都开设了这个专业,成为招收理工科考生人数最多的专业之一。
随之而来的是就业率的急剧下降,有的排行榜统计甚至把该专业就业率归入倒数之列。
就业目标软件开发工程师:在软件公司设计开发各种软件产品和信息系统;信息管理人员:在各类企事业单位从事管理和维护单位的各种信息系统;硬件开发设计人员:在电脑公司设计开发各种信息硬件产品。
提示1.报考这个专业的考生需要活跃的逻辑思维能力,所以它最适合数学成绩好的考生报考。
2.该专业也可以授予理学学士学位。
与计算机相关的职业,基本上都属于“年轻人的事业”,从事此类工作着实累人,熬夜加班是常有的事,而且淘汰率极高。
点评:该专业毕业生容易就业,薪资水平高,但是二本及以下的学校毕业生就业形势不好,因为二本学生很难学到过硬的技术本领,一本以上的名校学生容易学出较强的专业知识本领,容易获得高薪工作。
课程标准-编译原理-程细柱《编译原理》课程标准一、课程概述“编译原理”主要是以中小型高级程序设计语言为研究对象,介绍从高级语言程序到低级目标程序的主要翻译过程、以及编译器的构造原理和实现方法。
程序设计语言编译器的构造原理和实现方法是软件的核心技术之一,“编译原理”属于计算机科学与应用专业本科教学重要专业课。
其的前置课程包括“高级程序设计语言”、“数据结构”、“汇编语言”等。
这门课程重点是培养学生在掌握编译的基础知识和基本方法的基础上,同时具有分析和设计中小型编译器的能力,并提高对高级程序设计语言的理解能力和程序设计与应用能力;因此它对学生计算机业务的发展具有极其重要的意义。
二、课程目标知道“编译原理”这门课程的性质、地位,知道这门课程的研究范围、分析框架、研究方法和应用领域。
理解这门课程的主要概念、基本原理和方法,尤其是分析、实现与代码生成。
学会运用一些具体的词法、语法的分析方法,如:自顶向下的递归下降法和LL分析法、自底向上优先分析法和LR分析法。
学会语义分析和运行时的存储环境的管理。
掌握中间代码生成、中间代码优化、目标代码生成。
培养分析和实现中小型编译程序的能力。
三、课程内容与教学要求这门学科的知识与技能要求分为知道、理解、掌握、学会四个层次。
这四个层次的一般涵义表述如下:知道———是指对这门课程性质、地位、独立价值、研究范围、基本框架、研究方法、学科进展和未来方向等的认知。
理解———是指对这门课程涉及到的概念、原理、策略与技术的说明和解释等有准确的理解。
掌握———是指运用已理解的概念和原理说明、解释、类推同类事件和现象。
学会———是指能模仿或在教师指导下独立地完成某些教学知识和技能的操作任务,或能识别操作中的一般差错,能够把所学的原理应用到具体的实践中去,培养学生发现、分析和解决问题的能力等。
教学内容和要求表中的“√”号表示教学知识和技能的教学要求层次。
本标准中打“某”号的内容可作为自学,教师可根据实际情况确定要求或不布置要求。
姜守旭编译原理
《编译原理》是普通高等教育“十一五”国家级规划教材,也是国家精品课程主讲教材,作者是姜守旭。
本书结合了作者近三十年在哈尔滨工业大学、北京工业大学讲授该课程的经验和体会,根据本科生教学的实际需要选择和组织相关内容,包含了“编译原理”课程所需的知识。
本书以知识为载体,探讨了本学科问题求解的典型思想和方法,致力于培养学生的四大专业基本能力,为“能力导向”的课程教学提供有力支持。
为了便于读者学习和掌握相关内容,面向工程应用型学生的培养,在附录中给出了相应的课程设计。
本书适合高等学校计算机科学与技术学科本科生“编译原理”课程教学使用,也可供有关专业的学生、教师和科研人员参考。
编译原理实验报告本科实验报告课程名称:编译原理D实验地点:实验室专业班级:学号:_学生姓名:java编译指导教师:成绩:2015年月日实验一、无符号数的词法分析程序(4学时)内容:掌握词法分析的基本思想,并用高级语言编写无符号数的词法分析程序。
要求:从键盘上输入一串字符(包括字母、数字等),最后以“;”结束,编写程序识别出其中的无符号数。
无符号数文法规则可定义如下:<无符号数>→<无符号实数>│<无符号整数><无符号实数>→<无符号整数>.<数字串>[E<比例因子│<无符号整数>E<比例因子><比例因子>→<有符号整数><有符号整数>→[+│-]<无符号整数><无符号整数>→<数字串><数字串>→<数字>{<数字>}<数字>→0 1 2 3 (9)读无符号数的程序流程图见下图实验代码:package text_1;import java.util.*;public class Text1 {public static void main(String[] args) {int p = 0, w = 0, w1 = 0, j = 0, i = 0, d = 0, e = 1;//定义初值double w2 = 0;String str;System.out.println("请输入一串字符串(以;结束):");Scanner m = new Scanner(System.in);str = m.nextLine();char ch1[] = str.toCharArray(); //字符串转化为字符数组/*** 检测字符数组for(i=0;i<ch1.length;i++){ System.out.print(ch1[i]+" "); }*/while (i < ch1.length) {if (ch1[i] > '9' || ch1[i] < '0') { //查到第一个数字i++;}else {do {d = ch1[i] - '0';w = w * 10 + d;j++;i++;} while (ch1[i] >= '0' && ch1[i] <= '9');if (ch1[i] != '.') {if (ch1[i] != 'E') {System.out.println("整数为:"+ w); //输出整数w = 0;j = 0;}else {i++;if (ch1[i] == '-') {e = -1;i++;if (ch1[i] >= '0' && ch1[i] <= '9') {do {d = ch1[i] - '0';p = p * 10 + d;i++;} while (ch1[i] >= '0' && ch1[i] <= '9');}if (j > 1) {w2 = w / (Math.pow(10.0, j - 1));System.out.println("实型数为:"+w2+"*10"+" "+(e*(p-j+1)));//科学计数法输出实型j = 0;w2 = 0;w = 0;p = 0;}elseSystem.out.println("输入错误!");}if (ch1[i] >= '0' && ch1[i] <= '9') {do {d = ch1[i] - '0';p = p * 10 + d;i++;} while(ch1[i] >= '0'&& ch1[i] <= '9');}if (j > 1) {w2 = w / (Math.pow(10.0, j - 1));System.out.println("实型数为:"+w2+"*10"+" "+(e*(p-j+1)));j = 0;w2 = 0;w = 0;p = 0;} elseSystem.out.println("输入错误!");}}else {i++;if (ch1[i] >= '0' && ch1[i] <= '9') {do {d = ch1[i] - '0';w1 = w1 * 10 + d;j++;i++;} while (ch1[i] >= '0' && ch1[i] <= '9');}elseSystem.out.println("输入错误!");if (ch1[i] == 'E') {i++;if (ch1[i] == '-') {e = -1;i++;if (ch1[i] >= '0' && ch1[i] <= '9') {do {d = ch1[i] - '0';p = p * 10 + d;i++;} while (ch1[i] >= '0' && ch1[i] <= '9');}if (j > 1) {w2 = w / (Math.pow(10.0, j - 1));System.out.println("实型数为:"+ w2 + "*10" + " "+ (e * (p - j + 1)));j = 0;w2 = 0;w = 0;p = 0;} elseSystem.out.println("输入错误!");}if (ch1[i] >= '0' && ch1[i] <= '9') {do {d = ch1[i] - '0';p = p * 10 + d;i++;} while (ch1[i] >= '0' && ch1[i] <= '9');}if (j > 1) {w2 = w / (Math.pow(10.0, j - 1));System.out.println("实型数为:"+w2+"*10" +" "+(e*(p-j+1)));j = 0;w2 = 0;w = 0;p = 0;}elseSystem.out.println("输入错误!");}else if (ch1[i] != 'E') { //输出小数System.out.println("小数为:" + w + '.' + w1);w = 0;w1 = 0;j = 0;}}}}}}运行结果:实验二、 逆波兰式生成程序内容:掌握语法分析的基本思想,并用高级语言编写逆波兰式生成程序(4学时)要求:利用逆波兰式生成算法编写程序,将从键盘上输入的算术表达式(中缀表达式)转化成逆波兰式。
逆波兰表达式的生成过程涉及到运算符的优先级,下表中列出几个常用运算符的优先关系。
常用运算符优先关系矩阵如上表所示的优先关系矩阵表示了+,-,*,/,↑,(,)等七种运算符之间的相互优先关系。
“>、<、=”三种符号分别代表“大于”、“小于”、“相等”三种优先关系。
左边的“=”与右边的“(”之间没有优先关系存在,所以表中为空白。
+ - * / ↑ ( )+> > < < < < > - > > < < < < > * > > > > < < > / > > > > < < > ↑ > > > > > < > ( < < < < < < = ) > > > > > >右关系左逆波兰表达式生成算法的关键在于比较当前运算符与栈顶运算符的优先关系,若当前运算符的优先级高于栈顶运算符,则当前运算符入栈,若当前运算符的优先级低于栈顶运算符,则栈顶运算符退栈。
下面给出了逆波兰表达式生成算法的流程图。
(为了便于比较相邻运算符的优先级,需要设立一个工作栈,用来存放暂时不能处理的运算符,所以又称运算符栈。
实验代码:package text_2import java.util.*;public class Text2 {private char Operator_Precedence_Relation_Matrix[][] = {{ '>', '>', '<', '<', '<', '<', '>' },{ '>', '>', '<', '<', '<', '<', '>' },{ '>', '>', '>', '>', '<', '<', '>' },{ '>', '>', '>', '>', '<', '<', '>' },{ '>', '>', '>', '>', '>', '<', '>' },{ '<', '<', '<', '<', '<', '<', '=' },{ '>', '>', '>', '>', '>', ' ', '>' } };private char Infix_Expression[]; // 字符串infix用于表示要处理的中缀表达式private String Reverse_Polish_Expression = new String();// 字符串reversePlishExpression用于表示处理结果逆波兰式private String Analysis_Stack = new String();//字符串analysisStack 用于表示分析栈private int Length_Infix_Expression = 0;// 中缀表达式的长度,初始值为0 private int match_Parentheses = 1;// 用来查看左右括号是否配对正确private int count = 0;private void init(String str) {Infix_Expression = str.toCharArray();Length_Infix_Expression = Infix_Expression.length;}private int Operator_Judgement(char currentOperator) {int flag = -1;switch (currentOperator) {case'+':flag = 0;break;case'-':flag = 1;break;case'*':flag = 2;break;case'/':flag = 3;case'^':flag = 4;break;case'(':flag = 5;break;case')':flag = 6;break;}return flag;}void convert_Process(String str) {init(str);while (true) {match_Parentheses = 0;if (count >= Length_Infix_Expression) { // 检测输入串为空while (Analysis_Stack.length() != 0) { // 检测分析栈if(Analysis_Stack.charAt(Analysis_Stack.length() - 1) == '(') {System.out.println("\n您输入的中缀表达式中有无法配对的'('括号,请仔细核实!");System.exit(0);} else {Reverse_Polish_Expression += Analysis_Stack.charAt(Analysis_Stack.length() - 1);Analysis_Stack = Analysis_Stack.substring(0,Analysis_Stack.length() - 1);}}// 退栈输出System.out.println("逆波兰式为:"+ Reverse_Polish_Expression);System.exit(0);} else {if (Operator_Judgement(Infix_Expression[count]) == -1) { Reverse_Polish_Expression +=Infix_Expression[count];} else {while (Analysis_Stack.length() != 0) { // 检测分析栈if(Operator_Precedence_Relation_Matrix[Operator_Judgement(Analysis_Stac k.charAt(Analysis_Stack.length() -1))][Operator_Judgement(Infix_Expression[count])] == '<') {Analysis_Stack += Infix_Expression[count];break;} else {if (Infix_Expression[count] != ')') {Reverse_Polish_Expression +=Analysis_Stack.charAt(Analysis_Stack.length() - 1);Analysis_Stack =Analysis_Stack.substring(0,Analysis_Stack.length() - 1);} else {while (Analysis_Stack.length() == 0||Analysis_Stack.charAt(Analysis_Stack.length() - 1) != '(') {if (Analysis_Stack.length() == 0) {System.out.println("\n您输入的中缀表达式中有无法配对的')'括号,请仔细核实!");System.exit(0);} else {Reverse_Polish_Expression += Analysis_Stack.charAt(Analysis_Stack.length() - 1);Analysis_Stack = Analysis_Stack.substring(0,Analysis_Stack.length() - 1);}}if (Analysis_Stack.charAt(Analysis_Stack.length() - 1) == '(') {Analysis_Stack =Analysis_Stack.substring(0, Analysis_Stack.length() - 1);match_Parentheses = 1;break;}}}}if (Analysis_Stack.length() == 0)if (Infix_Expression[count] != ')')Analysis_Stack += Infix_Expression[count];else if (match_Parentheses != 1) {System.out.println("\n您输入的中缀表达式中有无法配对的')'括号,请仔细核实!");System.exit(0);}}}count++;}}public static void main(String[] args) {System.out.println("请输入中缀表达式:");Scanner Expression = new Scanner(System.in);String str1 = Expression.nextLine();new Text2().convert_Process(str1);}}实验结果:。