1、 1 C 语言编译器语言编译器 摘 要 编译原理是计算机科学与技术专业最重要的一门专业基础课程,内容庞 大,涉及面广,知识点多。由于该课程教、学难度都非常大,往往费了大量时间而达不 到预期教学效果俗语说:学习的最好方法是实践。本次课程设计的目的正是基于此,力 求为学生提供一个理论联系实际的机会, 通过布置一定难度的课题, 要求学生独立完成。 我们这次课程设计的主要任务是编程实现对输入合法的算符优先文法的相应的字符 串进行算符优先分析,并输出算符优先分析的过程。算符优先分析法特别有利于表 达式的处理,宜于手工实现。算符优先分析过程是自下而上的归约过程,但这种归约未 必是严格的规范归约。而在整个归
2、约过程中,起决定作用的是相继连个终结符之间的优 先关系。因此,所谓算符优先分析法就是定义算符之间的某种优先关系,并借助这种关 系寻找句型的最左素短语进行归约。通过实践,建立系统设计的整体思想,锻炼编写程 序、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验、探索前言知 识的习惯,树立团队协作精神。同时,课程设计可以充分弥补课堂教学及普通实验中知 识深度与广度有限的缺陷,更好地帮助学生从全局角度把握课程体系。 关键词 程序设计;数据库;SQL;C+; 1 1 任务申请任务申请 1.1、 引言引言 编译器的设计涉及到编译程序构造的一般原理、基本设计方法、主要实现技术和一 些自动构造工具
3、。 尽管 “编译程序” 是特指将高级程序设计语言翻译成低级语言的软件, 但编译程序构造的基本原理和技术也广泛应用于一般的设计和实现,因此,是一门对实 践性要求较高的课程。 目前,世界上存在着数千种源语言,既有 Fortran 和 Pascal 这样的传统程序设计 语言,也有各计算机应用领域中出现的专用语言。目标语言也同样广泛,目标语言可以 是另一种程序设计语言或者是从微处理机到计算机的任何计算机的机器语言。不同语言 需要不同的编译器。根据编译器的构造方法或者它们要实现的功能,编译器被分为一遍 编译器、多遍编译器、装入并执行编译器、调试编译器、优化编译器等多种类别。从表 面上看,编译器的种类似乎
4、千变万化,多种多样,实质上任何编译器所要完成的基本任 务都是相同的。通过理解这些任务,我们可以利用同样的基本技术为各种各样的源语言 和目标机器构建编译器。 1.2、 背景背景 编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止 2 一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功 能上看,一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序 翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它 把汇编语言程序翻译成机器语言程序。如果源语言是像 FORTRAN,PASCAL,或 C 那样的 高级语言,目标语
5、言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编 译程序。 1.3、 目标目标 (1)设计符号表 确定符号表的组织方式,一般应包括名字栏和信息栏,其中名字栏作为关键字。要 考虑能够存储有关名字的信息,并可以高效地完成如下操作: a.查找: 根据给定的名字, 在符号表中查找其信息。 如果该名字在符号表中不存在, 则将其加入到符号表中,否则返回指向该名字的指针; b.删除:从符号表中删除给定名字的表项。 (2)设计词法分析器 设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语 法分析器调用的子程序。功能包括: a.具备预处理功能。将不翻译的注释等符号先滤掉,只保留
6、要翻译的符号串,即要 求设计一个供词法分析调用的预处理子程序; b.能够拼出语言中的各个单词; c.将拼出的标识符填入符号表; d.返回(种别码, 属性值) 。 (3)语法分析器 要求用预测分析法、递归下降分析法、算符优先分析法、SLR 分析法(几种方法任 选) ,实现对表达式、各种说明语句、控制语句进行语法分析。 (4)目标代码生成器 能完成指定寄存器个数的情况下将一中间代码程序段翻译成汇编语言目标代码(汇 编指令应包括加、减、乘、除) ,要求指令条数最少的情况下,尽量使用寄存器,尽量 少访问内存,这样才能做到运行效率高 2 可行性研究报告可行性研究报告 2.1、引言引言 编写编译器的原理和技术具有十分普遍的意义,以致于在每一个计算机科学家的研 究生涯中,许多原理和技术都会反复用到。编译器的编写涉及到程序设计语言、计算机 体系结构、语言理论、算法和软件工程等学科。简单的说,编译器是一个程序,它读入 用某种语言(源语言)编写的程序并将其翻译成一个与之等价的以另一种语言(目标语 言)编写的程序。作为这个翻译过程匠一个重要组成部分,编译器能够向用户报告被编 3 译的源程序