编译原理结课论文.docx
《编译原理》范文

《编译原理》范文《编译原理》是计算机科学中重要的一门课程,主要研究的是如何将高级程序设计语言翻译为计算机可执行的程序。
编译原理涉及到多个领域,包括语法分析、语义分析、中间代码生成、代码优化和代码生成等。
本文将从编译原理的基本概念、编译器的结构和常见的编译原理算法等方面进行阐述。
编译原理的基本概念包括源程序、目标程序、编译器、解释器和汇编器等。
源程序是用高级程序设计语言编写的程序,目标程序是经过编译器处理后生成的机器代码。
编译器是将源程序翻译为目标程序的程序,而解释器则是逐行执行源程序的程序。
汇编器负责将汇编语言翻译为机器代码。
编译器的结构一般包括词法分析、语法分析、语义分析和代码生成等几个阶段。
词法分析是将源代码分解为单词或词素的过程,例如将程序中的关键字、标识符、运算符等进行分类。
语法分析则是在词法分析的基础上,根据语法规则检查源程序的正确性。
当源程序通过了语法分析后,进入到语义分析阶段,该阶段主要对程序的语义进行分析,例如检查变量的声明和使用是否一致。
最后,代码生成阶段将根据源程序生成目标程序。
编译原理中有一些常见的算法,例如自顶向下的语法分析算法、自底向上的语法分析算法和中间代码生成等。
自顶向下的语法分析算法是从根结点开始递归地向下分析源程序,最常见的自顶向下的语法分析算法是递归下降分析法。
而自底向上的语法分析算法则是从叶结点开始逐步合并到根结点,常见的自底向上的语法分析算法是LR分析算法。
中间代码生成是在语法分析的过程中生成一种类似于汇编代码的中间代码,统一了源程序和目标程序之间的表示方式,方便后续的代码优化和代码生成。
编译原理在计算机科学中有着广泛的应用,不仅对于理解计算机的工作原理有着重要的作用,还对于计算机程序的正确性和性能优化有着重要的影响。
通过学习编译原理,可以深入理解程序设计语言的底层实现原理,提高程序设计的能力和技巧。
同时,掌握编译原理的知识也为实现自己的编程语言或编译器打下基础。
编译原理格范文

编译原理格范文编译原理是计算机科学中的一个重要课程,主要研究如何进行程序的编译,即将高级语言程序转换为机器语言程序的过程。
它涉及到词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等多个方面。
编译器就是实现编译过程的工具,它可以将源程序翻译成目标程序,并进行一系列的优化。
在编译原理中,最基础的部分就是词法分析,它主要将源程序中的字符序列转换成有意义的词法单元序列。
这些词法单元包括关键字、标识符、常量、运算符和分隔符等。
词法分析是通过正则表达式和有限自动机来实现的,正则表达式描述了各种词法单元的形式,而有限自动机则用于识别并生成这些词法单元。
紧接着词法分析的是语法分析。
语法分析将词法单元序列转换为抽象语法树,以表示源程序的结构和语义。
语法分析主要使用的方法是上下文无关文法和语法分析器,其中上下文无关文法由产生式和终结符号组成,产生式描述了语法规则,而终结符号则描述了具体的语法单元。
语法分析器则根据给定的文法规则和输入的词法单元序列来生成语法树。
语法分析后是语义分析,它对语法树进行检查和处理以确定程序的语义一致性。
语义分析主要包括类型检查、符号表管理和错误检测。
类型检查主要检查程序中的类型是否兼容,比如对于不同类型的变量进行运算等。
符号表管理则维护了程序中的标识符信息,包括变量、函数和类等。
错误检测则用于检测程序中的错误,如变量未定义、函数调用参数错误等。
语义分析后是中间代码生成,它将源程序转换为一种介于高级语言和机器语言之间的中间表示形式。
中间代码一般是一种虚拟机的指令序列,它比源程序更容易进行分析和优化。
中间代码生成方法有很多,包括语法制导翻译和生成式翻译等。
语法制导翻译是在语法分析的基础上直接生成中间代码,而生成式翻译则是通过对源程序进行语义递归分析来生成中间代码。
中间代码生成后是代码优化,它主要通过一系列优化技术来改进中间代码的质量。
代码优化主要包括常量合并、循环展开、死代码删除等技术。
编译原理小论文

编译原理小论文编译原理小论文编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。
那么编译原理小论文要怎么写呢?不妨来参考一下小编带来的编译原理小论文样本。
希望大家喜欢哦!编译原理小论文摘要:本文探讨了在计算机软件技术快速发展的情况下,高校计算机类专业编译原理课程的改革问题。
提出了编译原理课程教学模型从过程式向对象式的转变、编译程序的面向对象构造(包括编译算法的描述)等问题,以及由此带来的教学内容的调整和课程实验的设计问题。
关键词:编译程序;教学改革;对象式程序设计;Java1 引言编译原理课程是高校计算机类专业的重要基础和骨干课程。
编译原理对计算机专业的学生的重要性与高等数学对理科学生的重要性几乎可以相提并论。
同时,由于这门课程涉及其他多门课程的知识,使得它成为大学阶段中最难学的课程之一。
从表面上看,编译程序是将高级语言源程序翻译成低级语言程序,但编译程序构造的基本原理和技术也广泛应用于一般软件的设计和实现,其中的设计思想、算法、思维方式和技术都可能会对学生今后的职业发展产生比较大的影响。
当今,程序设计已经基本上从传统的过程式转向对象式,并且正在从对象式转向组件型。
这其实是程序设计范型的变迁,是在计算机技术背景下认识世界的观点的变化:过程式将完成事务看成是一系列的步骤,而对象式却将世界看成是由一系列对象组成的,这些对象之间交互合作完成特定的事务。
从过程式到对象式,有着质的变化,而非一般的修改和完善,由此带来了语言(算法描述工具)的变化。
编程语言影响思维,面向对象的思维方法又促进了编程语言的发展。
目前,程序设计的一些后继课程,如数据结构等都进行了同步跟进,出现了诸如用C++或Java描述的数据结构教材。
但编译原理课程却没有及时跟进,上述改变基本上没有反映到编译原理课程中。
这门课程近20年来基本上没有大的变化,教学内容仍然是基于过程式语言展开的,编译算法和模型描述是用PASCAL语言或者C语言。
编译原理复旦范文

编译原理复旦范文编译原理是计算机科学与技术中的一门重要课程,其研究的是如何将源程序翻译成目标代码的理论和方法。
编译原理是计算机科学领域中的基础课程之一,它对于理解和掌握计算机科学与技术的核心概念和基本原理具有重要意义。
下面是一篇关于编译原理的范文:编译原理是一门研究程序设计语言的翻译和转换问题的学科。
它研究的核心问题是如何将高级语言的源程序翻译成机器语言的目标程序,以使计算机能正确地执行源程序中的功能和逻辑。
在计算机科学与技术领域中,编译原理是一门非常重要的课程。
它涉及到计算机编程语言、编程语言的语法和语义、编程语言的语法分析和语义分析、目标代码的生成和优化等核心问题。
掌握编译原理的理论和方法,对于理解和运用计算机科学与技术的核心概念和基本原理具有重要意义。
编译原理的核心是编译器的设计和实现。
编译器是将高级语言源程序翻译成机器语言目标程序的程序。
它通过对源程序进行词法分析、语法分析、语义分析、目标代码生成和目标代码优化等过程,最终生成可由计算机执行的目标程序。
因此,编译原理的研究不仅需要深入理解计算机硬件体系结构和指令集,还需要熟悉各种编程语言的语法和语义规则,并且需要熟练掌握相关的算法和数据结构。
编译原理涉及到的主要问题有词法分析、语法分析、语义分析、目标代码生成和目标代码优化等。
词法分析是将源程序中的字符序列转换成词法单元序列的过程。
语法分析是对词法单元序列进行语法分析,判断是否符合语法规则。
语义分析是对语法分析后的结果进行语义分析,判断是否符合语义规则。
目标代码生成是将源程序翻译成目标代码的过程。
目标代码优化是对目标代码进行优化,以提高目标代码的执行效率和运行性能。
编译原理的研究对于计算机科学与技术的发展具有重要意义。
它不仅可以帮助人们更好地理解和掌握计算机科学与技术的核心概念和基本原理,还可以提高计算机科学与技术的研究和应用水平。
在计算机科学与技术领域的研究和开发工作中,编译原理的研究成果可以被广泛应用于编程语言设计、编程语言实现、编程语言标准化、软件开发工具、编译器设计和实现等方面。
编译原理论文

编译原理论文《编译原理》课程论文编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都配有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。
从功能上讲,一个编译程序就是一个语言翻译程序。
语言翻译程序把一种源语言书写的程序翻译成另一种目标语言的等价程序,所以总的说编译程序是一种翻译程序,其源程序是高级语言,目标语言程序是低级语言。
编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。
从概念上来讲,一个编译程序的整个工作过程是划分成几个阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的。
一般一个编译过程是词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。
编写编译器的原理和技术具有十分普遍的意义,以至于在每个计算机工作者的职业生涯中,本书中的原理和技术都会反复用到。
在这本书中,向我们介绍了文法的概念,在讲词法分析的章节中讲述了构造一个有穷自动机的方法,以及如何将一个不确定的有穷自动机转化成确定的有穷自动机和有穷自动机的最小化等方法。
词法分析相对来说比较简单。
可能是词法分析程序本身实现起来很简单吧,很多没有学过编译原理的人也同样可以写出各种各样的词法分析程序。
不过编译原理在讲解词法分析的时候,重点把正则表达式和自动机原理加了进来,然后以一种十分标准的方式来讲解词法分析程序的产生。
这样的做法道理很明显,就是要让词法分析从程序上升到理论的地步。
词法分析中的重点是有穷自动机DFA的生成以及DFA和正规式与正规文法的关系。
还要熟练掌握NFA转换为DFA的方法及DFA的化简。
词法分析的核心应该是构建DFA,最后维护一个状态转移表。
通过转态转移的结果来识别词性。
DFA的思想和字典树很像。
NFA通过求每个状态的闭包后构造出的自动机与DFA等价。
正则表达式闭包,连接,或三种操作都有相应的NFA与其等价。
编译原理论文模板 - 副本

本科生课程论文封面(2013—2014学年第二学期)课程名称:课程类型:授课教师:学时:学分:论文题目:姓名:学号:年级:专业:学院:注意事项:1、以上各项由本科生本人认真填写;2、本科生课程论文应符合一般学术规范,具有一定学术价值,严禁抄袭或应付;凡学校检查或抽查不合格者,一律取消该门课程成绩和学分,并按有关规定追究相关人员责任;3、论文得分由批阅人填写,并签字确认;4、原则上要求所有课程论文均须用A4纸打印,加装本封面,左侧装订;5、课程论文由学生所在学院(系)统一保存,以备查用。
商丘工学院信息与电子工程学院制浅谈面向构件的软件开发方法学摘要:20世纪90年代中期以来,由于分布对象技术与软件重构工程的有机结合,促使面向构件的软件开发方法应运而生。
面向构件方法(COM)与面向对象方法(OOM ) 的本质差异在于:对象化建模过程一般针对单一应用系统,对象抽象一般针对问题域,对象模型的生成过程是静态的,软件重用粒度是原子级的;而构件化建模过程一般针对领域应用系统,构件抽象则针对解域,构件化模型即构架的生成过程是动态的,软件重用粒度是组合级的。
领域应用是多个单一应用通用化和重用化的应用集群,解域是问题域的过程与层次深化,构件则是对象的软件实现与集成;因此,COM法与OOM法在研究范畴、研究对象及其研究方法上都是有区别的。
不言而喻,面向构件方法是21世纪软件方法学的主流研究方向。
本文叙述了用过程与方法的组合理念来展开研究内容。
关键词:面向构件软件开发构件化一、面向构件软件开发的一般过程构件化软件开发的过程模型,所谓构件化,是指软件体系结构可重组以及软件成份可重用的系统开发方法。
这种方法的基本内涵是:应用需求领域化,软件结构框架化,软件元素构件化,应用原型实例化。
这一思想可以概括为四个阶段、三个层次和两大过程,如图 1 所示从工程化与过程管理的角度讲,整个软件系统的开发过程可定义为四个阶段: 分析,设计,实现,评价。
编译原理课程论文

编译原理课程论文09计本(3)班0904013028 周幼新一、编译原理概述编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。
包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。
编译器将源程序编写的程序作为输入,从而产生用目标语言编写的等价程序输出。
通常地,源程序为高级语言,如C或C + +,而目标语言则是目标机器的目标代码(有时也称作机器代码),也就是写在计算机机器指令中的用于运行的代码。
这一过程可以表示为:源程序→编译器→目标程序。
二、编译原理的发展历程20世纪40年代,由于冯·诺伊曼在存储程序在计算机方面的应用,编写一串代码或程序保存在计算机中供计算机执行是十分方便的。
起初这些程序都是用机器语言编写的指令(只有0和1的程序),但编写这样的代码十分费时、困难和乏味,从而产生用符号语言(汇编语言)编写的程序代替了。
在汇编语言中,都是以符号形式给出指令和存储地址的。
汇编程序将用汇编语言的符号代码和存储地址翻译成与机器语言相对应的数字代码。
汇编语言大大提高了编程的速度和准确度。
尤其在要求程序有极快的速度和极高的简洁程度时更为重要。
汇编语言也有许多缺点:编写起来也不容易(比机器语言好多了),阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。
所以编程技术的下一个重要目的就是以一个更类似于数学定义或自然语言的简洁形式来编写程序,编写后的程序与任何机器都无关。
Noam Chomsky通过对自然语言结构的研究,发现并最终使得编译器结构异常简单,甚至还带有了一些自动化。
Chosmky的研究根据语言文法(指定其结构的规则)的难易程度以及识别它们所需的算法来为语言分类。
与乔姆斯基分类结构一样,包括了文法的4个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特例。
编译原理结课论文精选全文

可编辑修改精选全文完整版目录1. 绪论 (2)1.1概述 (2)1.2设计目的 (2)1.3设计题目及要求 (3)2.背景知识 (3)2.1语法制导翻译方法 (3)2.2属性文法 (4)2.3几种常见的中间语言 (4)2.4四元式的简介 (4)3.设计过程 (5)3.1设计思路 (5)3.2实现 (6)4.上机调试运行 (7)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语法制导翻译方法语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 实现 (5)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为运算符,argl、arg2及result为指针,他们可指向有关名字在符号表中的登记项或一临时变量(也可空缺)。
常用的三地址语句与相应的四元式对应如下:X=y OP z 对应(OP,y,z,x )X=-y 对应(uminus,y,_,x )对应(=,y,_,x )X=yPar 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)(/,GdQ)(5)(=,C,_,a)图如下所示:SSxKttiWk≡<<∣⅛+c>*2-2>>d 小 Ξ E> OD> a> ∣SuEcessf ul !5. 注意事项(1)表达式中允许使用运算符(+-*/ )、分割符(括号)、字符i , 结束符#;(2) 如果遇到错误的表达式,应输出错误提示信息(该信息越详细 越好);(3) 测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以分号分割。
同时将预期的输出结果写在另一个文本文件中,以便和输出进行对照 6.总结实践是检验真理的唯一标准, 当然也是检验学习成果的标准。
在 经过一段时间的学习之后, 我们需要了解自己的所学应该如何应用在 实践中,因为任何知识都源于实践,归于实践,所以要将所学的知识 在实践中来检Ii E;\q aπ∖EtekħJ∣g∣∖q d∣ΓLc>e¢.+ Λ C <*Λ<-B 3验。
在做设计写论文期间,我遇到了好多问题,比如:程序总是出现错误,执行不了等等。
但是在周围同学的帮助下,这些问题都得到了解决。
由于对知识的不了解,许多地方不是很懂,需要通过其他同学和老师的指点才能明白。
感谢周围同学的大力帮助还有老师的谆谆教导,才使我完成此次的结课论文。
通过这次的设计,我得到了许多宝贵的经验。
经验如下:思想上,学会了用坚持不懈的精神去解决问题,很多事情看起来很简单,但实际做起来会发现有许多很困难。
中间有许多你想不到的东西。
学习上,使自已在大学所以的知识在这次得到实践,学到一些书本上无法学到的经验,对编译原理有了进一步的认识。
同时,也明白了知识是需要实践的,很多你能说出来的东西,但是在实际应用的时候,并不是那么顺利。
所以以后,我们要注重理论与实践的结合。
这次设计考察了我们这一学期的知识,熟练的话可以很容易的做出来,不熟练的需要翻书擦能得到解决,在这次四元式的设计中,充分应用了老师上课所讲的知识,是我对此有了更深的了解。
并且通过此次设计,对之前掌握不太好的现在也能熟练运用了。
参考文献【1】《编译原理教程》(第四版)主编:胡元义【学出版社【2】《编译原理》作者:胡伦俊、徐兰芳、骆婷【社Mll西安电子科技大Mll电子工业出版附录#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;if(count==0)printf("Successful else printf("Wrong ! "); printf("\n");system("pause"); } void SET_Mul_Div(int i,int m) // 处理乘除运算 { for(i++;i<=m-1;i++){if(string[i]=='*'||string[i]=='/')*****调用生成四元式的函数 ******** print();*********判断是否成功 ********** !\n");{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 string[k-1],tempvar);count--;string[k-1]=tempvar; } }处理赋值运算 %c) \n",string[k],string[k+1],。