编译原理结课论文.doc

合集下载

编译原理期末论文

编译原理期末论文

编译原理期末论文一、概述算符文法:即它的任一产生式的右部都不含两个相继的非终结符的文法。

如果G是一个不含空字符的算法文法,那么只要它的任一对终结符都只满足>,=,<的关系的一种,则称G是一个算符优先文法。

算符文法分类:对于一个算符优先文法,只要能构造出它的算符优先表,就可以利用算符优先分析方法,分析一个句子是否符合这个文法的定义。

那么定义FirstVT(P)={a|P(+=>)a···或P(+=>)Qa···,a属于终结字符集,而Q属于非终结字符集},其中···表示所有字符集LastVT(P)={a|P(+=>)···a或P(+=>)···aQ,a属于终结字符集,而Q 属于非终结字符集}由以下两条规则来构造FirstVT集:(1) 若有产生式P=>a···、或P=>Qa···,则a属于FirstVT(P);(2) 若有a属于FirstVT(Q),且有产生式P=>Q···,则a属于FirstVT(P);类似的有构造LastVT集的规则:(1) 若有产生式P=>···a或P=>···aQ,则a属于LastVT集。

(2) 若a属于LastVT(Q),且有产生式P=>···Q,则a属于LastVT集。

构造FirstVT集的算法:BeginFor 每个非终结符P和终结符a Do F[P,a]=FALSE;For 每个形如P=>a...或P=>Qa...的产生式 (1)DO insert(P,a)While Stack 非空 DoBegin把Stack 的顶项,记为(Q,a),上托出去;For每条形如P=>Q...的产生式DO . (2)Insert(P,a)End of while;END构造LastVT集的算法:将上述算法的对应的(1),(2)分别修改为For 每个形如P-〉…a或P-〉…aQ的产生式,For每条形如P-〉…Q的产生式便可得。

编译原理格范文

编译原理格范文

编译原理格范文编译原理是计算机科学中的一个重要课程,主要研究如何进行程序的编译,即将高级语言程序转换为机器语言程序的过程。

它涉及到词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等多个方面。

编译器就是实现编译过程的工具,它可以将源程序翻译成目标程序,并进行一系列的优化。

在编译原理中,最基础的部分就是词法分析,它主要将源程序中的字符序列转换成有意义的词法单元序列。

这些词法单元包括关键字、标识符、常量、运算符和分隔符等。

词法分析是通过正则表达式和有限自动机来实现的,正则表达式描述了各种词法单元的形式,而有限自动机则用于识别并生成这些词法单元。

紧接着词法分析的是语法分析。

语法分析将词法单元序列转换为抽象语法树,以表示源程序的结构和语义。

语法分析主要使用的方法是上下文无关文法和语法分析器,其中上下文无关文法由产生式和终结符号组成,产生式描述了语法规则,而终结符号则描述了具体的语法单元。

语法分析器则根据给定的文法规则和输入的词法单元序列来生成语法树。

语法分析后是语义分析,它对语法树进行检查和处理以确定程序的语义一致性。

语义分析主要包括类型检查、符号表管理和错误检测。

类型检查主要检查程序中的类型是否兼容,比如对于不同类型的变量进行运算等。

符号表管理则维护了程序中的标识符信息,包括变量、函数和类等。

错误检测则用于检测程序中的错误,如变量未定义、函数调用参数错误等。

语义分析后是中间代码生成,它将源程序转换为一种介于高级语言和机器语言之间的中间表示形式。

中间代码一般是一种虚拟机的指令序列,它比源程序更容易进行分析和优化。

中间代码生成方法有很多,包括语法制导翻译和生成式翻译等。

语法制导翻译是在语法分析的基础上直接生成中间代码,而生成式翻译则是通过对源程序进行语义递归分析来生成中间代码。

中间代码生成后是代码优化,它主要通过一系列优化技术来改进中间代码的质量。

代码优化主要包括常量合并、循环展开、死代码删除等技术。

编译原理结课论文

编译原理结课论文

目录1. 绪论 (2)1.1概述 (2)1.2设计目的 (2)1.3设计题目及要求 (2)2.背景知识 (3)2.1语法制导翻译方法 (3)2.2属性文法 (3)2.3几种常见的中间语言 (4)2.4四元式的简介 (4)3.设计过程 (5)3.1设计思路 (5)3.2实现 (6)4.上机调试运行 (6)4.1代码调试界面及结果 (7)4.2执行及结果 (7)5.注意事项 (8)6.总结 (9)参考文献 (10)附录 (11)1.绪论1.1概述“编译原理”是一门研究设计和构造编译程序原理课程,是计算机各专业的一门重要的专业课。

编译原理这门课程蕴含着计算机学科中解决问题的思路和解决问题的方法,对应用软件和系统软件的设计与开发有一定的启发和指导作用。

“编译原理”是一门实践性很强的课程,要掌握这门课程中的思想,就必须要把所学到的知识应用于实践当中。

而课程设计是将理论与实践相互联系的一种重要方式。

1.2设计目的课程设计是对学生的一种全面综合素质训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

通常,设计题中的问题比平时的练习题要复杂很多,但也更接近实际。

编译原理这门课程安排的课程设计的目的是旨在要求学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构解决问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解决实际问题的能力。

1.3设计题目及要求基于这个学期所学习的内容以及自己所掌握到的知识,本次我所要设计的题目是赋值语句的四元式生成。

要求:(1)设计语法制导生成赋值语句的四元式的算法;(2)编写代码并上机调试运行通过;(3)输入一赋值语句;(4)输出相应的表达式的四元式;2.背景知识2.1语法制导翻译方法语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序。

语义动作是为产生式赋予具体意义的手段,它一方面指出了一个产生式所产生的符号串的意义,另一方面又按照这种意义规定了生成某种中间代码应做哪些基本动作。

编译原理论文

编译原理论文

编译原理论文《编译原理》课程论文编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都配有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。

从功能上讲,一个编译程序就是一个语言翻译程序。

语言翻译程序把一种源语言书写的程序翻译成另一种目标语言的等价程序,所以总的说编译程序是一种翻译程序,其源程序是高级语言,目标语言程序是低级语言。

编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。

从概念上来讲,一个编译程序的整个工作过程是划分成几个阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的。

一般一个编译过程是词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。

编写编译器的原理和技术具有十分普遍的意义,以至于在每个计算机工作者的职业生涯中,本书中的原理和技术都会反复用到。

在这本书中,向我们介绍了文法的概念,在讲词法分析的章节中讲述了构造一个有穷自动机的方法,以及如何将一个不确定的有穷自动机转化成确定的有穷自动机和有穷自动机的最小化等方法。

词法分析相对来说比较简单。

可能是词法分析程序本身实现起来很简单吧,很多没有学过编译原理的人也同样可以写出各种各样的词法分析程序。

不过编译原理在讲解词法分析的时候,重点把正则表达式和自动机原理加了进来,然后以一种十分标准的方式来讲解词法分析程序的产生。

这样的做法道理很明显,就是要让词法分析从程序上升到理论的地步。

词法分析中的重点是有穷自动机DFA的生成以及DFA和正规式与正规文法的关系。

还要熟练掌握NFA转换为DFA的方法及DFA的化简。

词法分析的核心应该是构建DFA,最后维护一个状态转移表。

通过转态转移的结果来识别词性。

DFA的思想和字典树很像。

NFA通过求每个状态的闭包后构造出的自动机与DFA等价。

正则表达式闭包,连接,或三种操作都有相应的NFA与其等价。

编译原理课程论文

编译原理课程论文

编译原理课程论文09计本(3)班0904013028 周幼新一、编译原理概述编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。

包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。

编译器将源程序编写的程序作为输入,从而产生用目标语言编写的等价程序输出。

通常地,源程序为高级语言,如C或C + +,而目标语言则是目标机器的目标代码(有时也称作机器代码),也就是写在计算机机器指令中的用于运行的代码。

这一过程可以表示为:源程序→编译器→目标程序。

二、编译原理的发展历程20世纪40年代,由于冯·诺伊曼在存储程序在计算机方面的应用,编写一串代码或程序保存在计算机中供计算机执行是十分方便的。

起初这些程序都是用机器语言编写的指令(只有0和1的程序),但编写这样的代码十分费时、困难和乏味,从而产生用符号语言(汇编语言)编写的程序代替了。

在汇编语言中,都是以符号形式给出指令和存储地址的。

汇编程序将用汇编语言的符号代码和存储地址翻译成与机器语言相对应的数字代码。

汇编语言大大提高了编程的速度和准确度。

尤其在要求程序有极快的速度和极高的简洁程度时更为重要。

汇编语言也有许多缺点:编写起来也不容易(比机器语言好多了),阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。

所以编程技术的下一个重要目的就是以一个更类似于数学定义或自然语言的简洁形式来编写程序,编写后的程序与任何机器都无关。

Noam Chomsky通过对自然语言结构的研究,发现并最终使得编译器结构异常简单,甚至还带有了一些自动化。

Chosmky的研究根据语言文法(指定其结构的规则)的难易程度以及识别它们所需的算法来为语言分类。

与乔姆斯基分类结构一样,包括了文法的4个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特例。

编译原理课程设计论文

编译原理课程设计论文

编译原理课程设计论文一、教学目标本课程的教学目标是使学生掌握编译原理的基本概念、理论和方法,培养学生运用编译原理解决实际问题的能力。

具体分为以下三个维度:1.知识目标:学生需要掌握编译原理的基本概念、词法分析、语法分析、中间代码生成、代码优化和目标代码生成等核心技术。

2.技能目标:学生能够运用编译原理的方法和技巧,独立完成编译器的设计与实现。

3.情感态度价值观目标:通过本课程的学习,学生能够了解编译原理在软件开发和计算机科学中的重要性,培养对编译技术的兴趣和热情。

二、教学内容根据课程目标,本课程的教学内容主要包括以下几个部分:1.编译原理概述:介绍编译器的功能、编译过程和编译器的分类。

2.词法分析:讲解词法分析的基本概念、词法分析器的实现方法以及词法分析在编译器中的作用。

3.语法分析:介绍语法分析的基本方法、语法分析树的构建以及分析器的实现。

4.中间代码生成:讲解中间代码的概念、生成方法以及中间代码的作用。

5.代码优化:介绍代码优化的基本方法和策略,以及优化在编译器中的重要性。

6.目标代码生成:讲解目标代码生成的方法和技术,以及目标代码生成在编译器实现中的地位。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行授课:1.讲授法:通过讲解编译原理的基本概念、理论和方法,使学生掌握编译原理的核心知识。

2.讨论法:学生进行课堂讨论,激发学生的思考,培养学生的创新能力和团队合作精神。

3.案例分析法:分析典型的编译器实例,使学生更好地理解编译原理在实际应用中的作用。

4.实验法:安排学生进行编译器设计的实验,提高学生的实际操作能力和解决问题的能力。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:《编译原理》(第三版),作者:Alfred V. Aho、Monica S.Lam、Ravi Sethi、Jeffrey D. Ullman。

2.参考书:《编译原理与实践》,作者:Peyton J. Publications。

编译原理论文

编译原理论文

编译原理论文第一篇:编译原理论文编译原理心得体会编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法,在计算机本科教学中占有十分重要的地位。

该课程理论性与实践性都很强,我们在学习是普遍感到内容非常抽象,不易理解,内容多且繁琐,难以完整、全面地掌握编译原理的有关知识,更不用说灵活运用编译原理知识从事相关设计或应用于其他领域。

虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对我们提供了系统而有效的训练,有利于提高软件人员的素质和能力。

在我们学习编译原理以前,都认为编译原理只能应用在写程序语言的编译器上,觉得用处不大,学习兴趣不高。

而在后来的学习中,我们逐渐认识到计算机专业的学生,除了要会编写程序语言之外,还应该了解它是如何被计算机所识别,这才是真正并且透彻地学习软件。

另外,编译器中每一个模块的编写,都能对我们的编程能力的提高有很大帮助。

在今后若从事软件工程,这门课程也能够对编写程序有所帮助。

为了能够系统掌握这门专业课,我们把编译原理分为以下几个模块:①语言和文法;②词法分析;③语法分析;④语义分析和中间代码生成;⑤代码优化和目标代码生成。

在学习的开始,我们需要掌握什么是编译,编译分为哪些阶段,编译程序和解释程序的区别等等。

在做好了这些方面的准备后,开始了系统的学习。

语言和文法部分的知识包括文法基本概念及文法的二义性。

基本概念有文法定义、推导、句型、句子等等。

二义性文法是通过画语法树的方法来证明。

词法分析中的重点是有穷自动机DFA的生成以及DFA和正规式与正规文法的关系。

还要熟练掌握NFA转换为DFA的方法及DFA的化简。

语法分析包括自上而下和自下而上分析。

自上而下分析着重掌握LL(1)文法,自下而上分析重点掌握算符优先文法和LR(0)、SLR(1)文法。

语义分析重点是其功能,中间代码生成和语法制导翻译定义与方法。

最后,优化分为局部优化和循环优化,重点理解一些关键词,如基本块、流图等,要学会自己画出程序流图。

编译原理结课论文

编译原理结课论文

char *k[]={"begin","do","else","end","if","then","var","while"};
char *p1[]={",",";",".",":","(",")"}; // 分界符
char *p2[]={"+","-","*","/"};
//运算符
char *p3[]={"<","<=","=",">",">=","!="}; //关系运算符
单词符号及种别编码
单词符号
种别编码
单词符号
种别编码
main
1
[
28
int
2
]
29
char
3
{
30
if
4
}
31
else
5
,
32
for
6
:
33
while
7

34
标识符 ID
10

35
整型常数 NUM
20

36
=
21
>=
37
+
22
<=
38
-
23
==
39
*
24
!=
40
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录1. 绪论 (2)1.1概述 (2)1.2设计目的 (2)1.3设计题目及要求 (2)2.背景知识 (3)2.1语法制导翻译方法 (3)2.2属性文法 (3)2.3几种常见的中间语言 (4)2.4四元式的简介 (4)3.设计过程 (5)3.1设计思路 (5)3.2实现 (6)4.上机调试运行 (6)4.1代码调试界面及结果 (7)4.2执行及结果 (7)5.注意事项 (8)6.总结 (9)参考文献 (10)附录 (11)1.绪论1.1概述“编译原理”是一门研究设计和构造编译程序原理课程,是计算机各专业的一门重要的专业课。

编译原理这门课程蕴含着计算机学科中解决问题的思路和解决问题的方法,对应用软件和系统软件的设计与开发有一定的启发和指导作用。

“编译原理”是一门实践性很强的课程,要掌握这门课程中的思想,就必须要把所学到的知识应用于实践当中。

而课程设计是将理论与实践相互联系的一种重要方式。

1.2设计目的课程设计是对学生的一种全面综合素质训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

通常,设计题中的问题比平时的练习题要复杂很多,但也更接近实际。

编译原理这门课程安排的课程设计的目的是旨在要求学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构解决问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解决实际问题的能力。

1.3设计题目及要求基于这个学期所学习的内容以及自己所掌握到的知识,本次我所要设计的题目是赋值语句的四元式生成。

要求:(1)设计语法制导生成赋值语句的四元式的算法;(2)编写代码并上机调试运行通过;(3)输入一赋值语句;(4)输出相应的表达式的四元式;2.背景知识2.1语法制导翻译方法语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序。

语义动作是为产生式赋予具体意义的手段,它一方面指出了一个产生式所产生的符号串的意义,另一方面又按照这种意义规定了生成某种中间代码应做哪些基本动作。

在语法分析的过程中,当一个产生式获得匹配(对于自顶向下分析)或用于规约(对于自底向上分析)时,此产生式相应的语义子程序就进入工作,完成既定的翻译任务。

语法制导翻译分为自底向上语法制导翻译和自顶向下语法制导翻译。

2.2属性文法属性文法是编译技术中用来说明程序语言语义的工具,也是当前实际应用中比较流行的一种语义描述方法。

属性是指与文法符号的类型和值等有关的一些信息,在编译中用属性描述处理对象的特征。

属性文法是一种适用于定义语义的特殊文法,即在语言的文法中增加了属性的文法,它将文法符号的语义以“属性”的形式附加到各个文法的符号上,再根据产生式所包含的含义,给出每个文法符号属性的求值规则,从而形成一种带有语义属性的上下文无关文法,即属性文法。

属性文法也是一种翻译文法,属性有助于更详细的指定文法中的代码生成动作。

2.3几种常见的中间语言(1)抽象语法树(2)逆波兰表示法(3)三地址代码在编译程序中,三地址代码语言的具体实现通常有三种表示方法:四元式、三元式和间接三元式。

2.4四元式的简介四元式是具有四个域的记录(即结构体)结构,这四个域为:(op,arg1,arg2,result)其中,op为运算符,arg1、arg2及result为指针,他们可指向有关名字在符号表中的登记项或一临时变量(也可空缺)。

常用的三地址语句与相应的四元式对应如下:X=y op z 对应(op,y,z,x)X=-y 对应(uminus,y,_,x)X=y 对应(=,y,_,x)Par x1 对应(par,x1,_,_)Call p 对应(call,_,_,p)Goto L 对应(j,_,_,L)If x rop y goto L 对应(jrop,x,y,L)注意规则:如果op是一个算术或逻辑运算符,则result总是一个新引进的临时变量,它用来存放运算结果。

四元式出现的顺序与表达式计值的顺序是一致的,四元式之间的联系是通过临时变量实现的。

四元式由于其表示更接近程序设计的习惯而成为一种普遍采用的中间代码形式。

3.设计过程3.1设计思路(1)定义部分:定义常量、变量、数据结构。

(2)初始化:设立算符优先分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等(3)控制部分:从键盘输入一个表达式符号串;(4)利用算符优先分析算法进行表达式处理:根据算符优先分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。

3.2实现本设计主要通过C语言来实现。

C语言的语法结构类型很多,从实习的角度可分为以下六类:⑴明语句。

如各种数据类型说明(整型、实型、布尔型、字符型、复型、双精度型、枚举、子界、数组、集合、文件、记录、指针等),各种数据空间特性说明(如公用语句,共名语句,等价语句等),初值语句。

实习重点是内存空间的分配方法。

⑵序结构语句。

典型代表是各类表达式(如算术表达式、布尔表达式、字符表达式、位表达)及相应的赋值语句。

实习重点是算术表达式的翻译方法。

⑶制结构语句。

常见的有转移语句、条件语句和各种分叉语句。

实习重点是拉链返填的方法。

⑷子程序结构。

指子程序、函数、过程这类结构的定义和调用。

实习重点是哑实结合的方法。

⑸环结构。

如计数循环、条件循环等。

实习重点是循环化简的方法。

⑹式语句。

主要指输入输出语句的格式加工。

4.上机调试运行在VC++中c语言环境下调试运行4.1代码调试界面及结果4.2执行及结果输入一语句:a=((b+c)*2-3)/d 对应的输出应该为:(1)(+,b,c,A)(2)(*,2,A,B)(3)(-,3,B,C)(4)(/,C,d,D)(5)(=,C,_,a)图如下所示:5.注意事项(1)表达式中允许使用运算符(+-*/)、分割符(括号)、字符i,结束符#;(2)如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);(3)测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以分号分割。

同时将预期的输出结果写在另一个文本文件中,以便和输出进行对照6.总结实践是检验真理的唯一标准,当然也是检验学习成果的标准。

在经过一段时间的学习之后,我们需要了解自己的所学应该如何应用在实践中,因为任何知识都源于实践,归于实践,所以要将所学的知识在实践中来检验。

在做设计写论文期间,我遇到了好多问题,比如:程序总是出现错误,执行不了等等。

但是在周围同学的帮助下,这些问题都得到了解决。

由于对知识的不了解,许多地方不是很懂,需要通过其他同学和老师的指点才能明白。

感谢周围同学的大力帮助还有老师的谆谆教导,才使我完成此次的结课论文。

通过这次的设计,我得到了许多宝贵的经验。

经验如下:思想上,学会了用坚持不懈的精神去解决问题,很多事情看起来很简单,但实际做起来会发现有许多很困难。

中间有许多你想不到的东西。

学习上,使自已在大学所以的知识在这次得到实践,学到一些书本上无法学到的经验,对编译原理有了进一步的认识。

同时,也明白了知识是需要实践的,很多你能说出来的东西,但是在实际应用的时候,并不是那么顺利。

所以以后,我们要注重理论与实践的结合。

这次设计考察了我们这一学期的知识,熟练的话可以很容易的做出来,不熟练的需要翻书擦能得到解决,在这次四元式的设计中,充分应用了老师上课所讲的知识,是我对此有了更深的了解。

并且通过此次设计,对之前掌握不太好的现在也能熟练运用了。

参考文献【1】《编译原理教程》(第四版)主编:胡元义【M】西安电子科技大学出版社【2】《编译原理》作者:胡伦俊、徐兰芳、骆婷【M】电子工业出版社附录#include<stdio.h>#include<stdlib.h>#define MAX 100void SET_Mul_Div(int i,int m); void SET_Add_Sub(int j,int m); void print();int m=0;int count=0;char tempvar='A';int temp;char string[MAX]; //用于存放表达式int main(){int p[MAX];char ch;int c=-1,q=0;printf("请输入赋值语句:\n");while((ch = getchar())!='\n'){string[m++]=ch;if(ch=='='||ch=='+'||ch=='-'||ch=='*'||ch=='/')count++;elseif(ch=='('){ p[++c]=m-1; }else if(ch==')'){q=m-1;SET_Mul_Div(p[c],q); //从左括号处理到又括号SET_Add_Sub(p[c],q);temp=(int)tempvar-1;tempvar=(char)temp;string[p[c]]=string[m-1]=tempvar;c--;temp=(int)tempvar+1; tempvar=(char)temp;} } /*****调用生成四元式的函数********/ print(); /*********判断是否成功**********/if(count==0)printf("Successful!\n");elseprintf("Wrong!");printf("\n");system("pause"); }void SET_Mul_Div(int i,int m) //处理乘除运算{for(i++;i<=m-1;i++){if(string[i]=='*'||string[i]=='/'){printf("(%c %c %c %c)\n",string[i],string[i-1],string [i+1], tempvar);string[i-1]=string[i]=string[i+1]=tempvar;count--;temp=(int)tempvar+1;tempvar=(char)temp; } } }void SET_Add_Sub(int j,int m) //处理加减运算{ j++;for(;j<=m-1;j++){if(string[j]=='+'||string[j]=='-'){printf("(%c %c %c %c)\n",string[j],string[j-1],string[j+ 1],tempvar);string[j-1]=string[j]=string[j+1]=tempvar; count--;temp=(int)tempvar+1;tempvar=(char)temp; } } } /*打印*/void print(){ int i;for(i=0;i<=m-1;i++)//处理乘除运算{ if(string[i]=='*'||string[i]=='/'){printf("(%c %c %c %c)\n",string[i],string[i-1],string[i+ 1],tempvar);string[i-1]=string[i]=string[i+1]=tempvar;count--;temp=(int)tempvar+1;tempvar=(char)temp; }}int j;for(j=0;j<=m-1;j++)//处理加减运算{if(string[j]=='+'||string[j]=='-'){printf("(%c %c %c %c)\n",string[j],string[j-1],string[j+ 1],tempvar);string[j-1]=string[j]=string[j+1]=tempvar;count--;temp=(int)tempvar+1;tempvar=(char)temp; } }int k;for(k=0;k<=m-1;k++) //处理赋值运算{ if(string[k]=='='){ temp=(int)tempvar--;tempvar=(char)temp;printf("(%c %c %c) \n",string[k],string[k+1], string[k-1],tempvar);count--;string[k-1]=tempvar; } } }。

相关文档
最新文档