编译原理课程的设计.docx

上传人:b****5 文档编号:2940462 上传时间:2022-11-16 格式:DOCX 页数:43 大小:345.85KB
下载 相关 举报
编译原理课程的设计.docx_第1页
第1页 / 共43页
编译原理课程的设计.docx_第2页
第2页 / 共43页
编译原理课程的设计.docx_第3页
第3页 / 共43页
编译原理课程的设计.docx_第4页
第4页 / 共43页
编译原理课程的设计.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

编译原理课程的设计.docx

《编译原理课程的设计.docx》由会员分享,可在线阅读,更多相关《编译原理课程的设计.docx(43页珍藏版)》请在冰豆网上搜索。

编译原理课程的设计.docx

编译原理课程的设计

C语言编译器

学生姓名:

翟桐指导老师:

单承刚

摘要编译原理是计算机科学与技术专业最重要的一门专业基础课程,内容庞大,涉及面广,知识点多。

由于该课程教、学难度都非常大,往往费了大量时间而达不到预期教学效果俗语说:

学习的最好方法是实践。

本次课程设计的目的正是基于此,力求为学生提供一个理论联系实际的机会,通过布置一定难度的课题,要求学生独立完成。

我们这次课程设计的主要任务是编程实现对输入合法的算符优先文法的相应的字符串进行算符优先分析,并输出算符优先分析的过程。

算符优先分析法特别有利于表达式的处理,宜于手工实现。

算符优先分析过程是自下而上的归约过程,但这种归约未必是严格的规范归约。

而在整个归约过程中,起决定作用的是相继连个终结符之间的优先关系。

因此,所谓算符优先分析法就是定义算符之间的某种优先关系,并借助这种关系寻找句型的最左素短语进行归约。

通过实践,建立系统设计的整体思想,锻炼编写程序、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验、探索前言知识的习惯,树立团队协作精神。

同时,课程设计可以充分弥补课堂教学及普通实验中知识深度与广度有限的缺陷,更好地帮助学生从全局角度把握课程体系。

关键词程序设计;数据库;SQL;C++;

1任务申请

1.1、引言

编译器的设计涉及到编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。

尽管“编译程序”是特指将高级程序设计语言翻译成低级语言的软件,但编译程序构造的基本原理和技术也广泛应用于一般的设计和实现,因此,是一门对实践性要求较高的课程。

目前,世界上存在着数千种源语言,既有Fortran和Pascal这样的传统程序设计语言,也有各计算机应用领域中出现的专用语言。

目标语言也同样广泛,目标语言可以是另一种程序设计语言或者是从微处理机到计算机的任何计算机的机器语言。

不同语言需要不同的编译器。

根据编译器的构造方法或者它们要实现的功能,编译器被分为一遍编译器、多遍编译器、装入并执行编译器、调试编译器、优化编译器等多种类别。

从表面上看,编译器的种类似乎千变万化,多种多样,实质上任何编译器所要完成的基本任务都是相同的。

通过理解这些任务,我们可以利用同样的基本技术为各种各样的源语言和目标机器构建编译器。

1.2、背景

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

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

它把一种语(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。

比如汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。

如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编译程序。

1.3、目标

(1)设计符号表

确定符号表的组织方式,一般应包括名字栏和信息栏,其中名字栏作为关键字。

要考虑能够存储有关名字的信息,并可以高效地完成如下操作:

a.查找:

根据给定的名字,在符号表中查找其信息。

如果该名字在符号表中不存在,则将其加入到符号表中,否则返回指向该名字的指针;

b.删除:

从符号表中删除给定名字的表项。

(2)设计词法分析器

设计各单词的状态转换图,并为不同的单词设计种别码。

将词法分析器设计成供语法分析器调用的子程序。

功能包括:

a.具备预处理功能。

将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序;

b.能够拼出语言中的各个单词;

c.将拼出的标识符填入符号表;

d.返回(种别码,属性值)。

(3)语法分析器

要求用预测分析法、递归下降分析法、算符优先分析法、SLR分析法(几种方法任选),实现对表达式、各种说明语句、控制语句进行语法分析。

(4)目标代码生成器

能完成指定寄存器个数的情况下将一中间代码程序段翻译成汇编语言目标代码(汇编指令应包括加、减、乘、除),要求指令条数最少的情况下,尽量使用寄存器,尽量少访问内存,这样才能做到运行效率高

2可行性研究报告

2.1、引言

编写编译器的原理和技术具有十分普遍的意义,以致于在每一个计算机科学家的研究生涯中,许多原理和技术都会反复用到。

编译器的编写涉及到程序设计语言、计算机体系结构、语言理论、算法和软件工程等学科。

简单的说,编译器是一个程序,它读入用某种语言(源语言)编写的程序并将其翻译成一个与之等价的以另一种语言(目标语言)编写的程序。

作为这个翻译过程匠一个重要组成部分,编译器能够向用户报告被编译的源程序中

3功能需求分析

3.1、引言

3.1.1词法语法分析简介

词法分析的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个的单词(也称单词符号或符号)。

这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。

语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等等,即判断单词序列是否符合组成各类语法短语的组成规则,一般这种语法短语,也称为语法单位,可表示成语法树。

3.1.2词法需求分析简

介词法分析阶级是编译过程的第一个阶级。

这个阶级的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别一个个单词(也称为单词符号或符号)。

这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。

比如标识是由字母开头,后跟字母、数字字符序列组成的一种单词,。

保留字是一种单词,此外还有算符,界符等等。

 

3.2、任务概述

3.2.1目标

1、了解编译器的基本结构,分析编译器的设计原理。

2、加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。

3、加深对语法分析器工作过程的理解;加强对递归下降法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。

4、加深对中间代码生成的工作过程的理解。

5、加深对代码优化的工作过程的理解。

6、加深对目标代码生成的工作过程的理解

 

3.3、语法需求分析简介

语法分析是编译过程的第二个阶级。

语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等等。

一般这种语法短语,也称为语法单位,可表示成语法树。

语法分析所依据的是语言的语法规则,即描述程序结构的规则。

通过语法分析确定整个输入串是否构成一个语法上正确的程序。

词法分析和语法分析本质上都是对源程序的结构进行分析。

但词法分析的任务仅对源程序进行线性扫描即可完成,比如识别标识符,因为标识符的结构是字母打头的字母和数字序列,这只要顺序扫描输入流,遇到既不是字母又不是数字字符时,将前面所发现的所有字母和数字组合在一起而构成单词标识符。

但这种线性扫描则不能用于识别递归定义的语法成分,比如就不能用此办法去匹配表达式中的括号。

语法分析的任务是语法分析器接收词法分析研究器提供的记号串,检查它们是否能由源程序的文法产生,语法分析器在编译器中的位置如图所示:

源程序

记号中间表示

语法树

取下一

个记号

 

典型的文法的语法分析器有三类:

一类是通用的语法分析方法,如Cocke-Younger-Kasami算法和Early算法,这些方法在生成编译器时效率太低。

编译器常用的是自顶向下和自底向上的方法。

采用自顶向下的递归子程序法,就是对应每个非终结符语法单元,编一个独立的处理子程序。

语法分析从读入第一个单词开始,由非终结符即开始符出发,沿语法描述图箭头指出的方向进行分析。

当遇到非终结符时,则调用相应的处理子程序,从语法描述图看也就进入了一个语法单元,再沿当前所进入的语法描述图的箭头方向进行分析,当遇到终结符时,则判断当前读入的单词是否与图中的终结符相匹配,若匹配,则执行相应的语义程序。

再读取下一个单词继续分析。

遇到分支点时将当前的单词与分支点上的多个终结符逐个相比较,若都不匹配时可能是进入下一非终结符语法单位或是出错。

4关键技术实现介绍

4.1、引言

本次课程设计中的关键是:

扫描和语法分析函数,它使用一个用于存放文法符号的先进后出栈,并利用有限关系可以确定最左素短语是否已形成来决定分析器的动作。

如果当前栈顶的终结符号和带输入符号之间优先关系是<或=则表示栈顶符号串未形成最左素短语,此时分析器将移进输入符号。

如果当前栈顶的终结符号和待输入符号之间的优先关系是>,则表示已找到最左素短语的尾,在从栈顶开始,按优先关系在栈内向左寻找最左素短语的头,然后分析器将归约最左素短语。

如果出现两个终结符号之间不存在优先关系,则表示存在语法错误。

以及如何编写、调试、修改代码。

还要了解一个题目有许多种解决方法。

锻炼我们的思维能力。

4.2、用途

4.2.1功能

员工培训管理信息系统以计算机为工具,通过对培训部门所需的信息管理,把管理人员从繁琐的数据计算处理中解脱出来,使其有更多的精力从事公司的其他业务需求。

4.2.2性能

1数据精确度

由于采用数据库技术并且用户的应用领域对数据精确度的要求不是太高,所以这点在系统中表现得比较少,但是用户数据的安全性与正确性是完全保证的,所以对用户的使用没有多大的障碍。

2时间特性

本系统的数据库较小,所以程序在响应时间,数据更新处理时间上性能是比较突出的。

而且也正由于数据量相对较少,故在数据传输时间和系统运行时间上表现的较让人满意。

3适应性

该系统软件是使用VisualC++6.0在windowsxp系统下完成的所以只要是兼容windows的软件或是操作系统,该软件都可以正确地运行,有较好的适应能力与兼容性。

而且应用户的特殊需求软件在完成后的维护阶段可以保持一个与其他类软件接口,随时满足用户的使用要求。

4.3、运行环境

4.3.1硬设备

选用PC级服务器。

具体配置如下:

Intel486CPU或以上

256M内存

1个4.3G硬盘,1个激光打印机

4.3.2支持软件

Microsoftaccess

4.3.3数据结构

charch='\0';/*从字符缓冲区中读取当前字符*/

intcount=0;/*词法分析结果缓冲区计数器*/

staticcharspelling[10]={""};/*存放识别的字*/

staticcharline[81]={""};/*一行字符缓冲区(最多80个字符)*/

char*pline;/*字符缓冲区指针*/

staticcharntab1[100][10];/*变量名表:

共100项,每项长度为10*/

5系统分析

5.1、基础知识

5.1.1算符优先分析法的基本思想

仿照算术表达式的四则运算过程

算符优先分析的基本思想是只规定算符(广义为终结符)之间的优先关系,也就是只考虑终结符之间的优先关系,不考虑非终结符之间的优先关系。

在归约过程中只要找到可归约串就归约,并不考虑归约到那个非终结符名,算符优先分析的可归约串不一定是规范句型的句柄,所以算符优先归约不是规范归约。

算符优先分析的可归约串是当前符号栈中的符号和剩余的输入符号构成句型的最左素短语。

5.1.2算符优先关系的定义

设G是一个不含ε产生式的算符文法,a和b是任意两个终结符,A、B、C是非终结符,算符优先关系

定义如下:

  ①a

b当且仅当G中含有形如A→…ab…或A→…aBb…的产生式

  ②a

b当且仅当G中含有

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1