编译原理课程设计c++ 版.docx
- 文档编号:22793876
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:10
- 大小:84.84KB
编译原理课程设计c++ 版.docx
《编译原理课程设计c++ 版.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计c++ 版.docx(10页珍藏版)》请在冰豆网上搜索。
编译原理课程设计c++版
2008-2009学年第二学期
《编译原理》课程设计报告
学院(系):
计算机科学与技术学院
班级:
08级
学生姓名:
学号:
指导教师:
时间:
一.课程设计的目的
词法分析器要实现的功能是依次扫视字符串形式源程序中的各个字符,逐个识别出其中的单词。
从左至右扫描源程序的字符串,按照词法规则识别出一个个正确的单词,并转换成该单词相应的二元式交给语法分析使用。
是该分析器可以识别关键字,普通标识符,阿拉伯数字,单分界符,代表双分界符。
通过本次词法分析器课程设计进一步理解高级语言在计算机中的执行过程,提高自己的编程能力,培养好的程序设计风格。
同时通过某种可视化编程语言的应用,更进一步加深对编译原理中重点算法和编译技术的理解。
二.课程设计的内容及要求
课程设计内容:
利用VC++6.0编写C语言的词法分析
课程设计要求:
完成下述文法所描述的单词符号的词法分析程序:
<标识符>--><字母>|<标识符><字母>|<标识符><数字>
<无符号整数>--><数字>|<无符号整数><数字>
<分界符>-->+|-|*|/|;|(|)|{|}|<|<=|=|!
=|>=|>|:
=|<空格>
<字母>-->a|…|z|A|…|Z
<数字>-->0|…|9
<空格>-->’’
三.问题分析及相关原理介绍
3.1编译系统原理介绍
编译原理是介绍如何将高级程序设计语言变换成计算机硬件所能识别的机器语言,以便计算机进行处理。
它的理论基础坚实,其系统不仅应用于编译技术,还大量应用于人工智能、多媒体技术及数据库等领域。
3.2算法及功能分析
1.Main函数为主函数,在程序开始定义了Iskey,IsLetter,IsDigit几个函数然后把把字符串ch赋值为空,主函数mian.子函数是用来判断是否是关键字,字母和数字。
主函数还有switch语句来进行对运算符,单分界符,双分界符和控制。
2.首先运行主函数,并判断输入文件的路径正确与否。
输入正确后,开始调用函数进行分析。
3.判断是否是为空格,制表符,回车。
是则输出空。
否则继续向下执行。
4.判断是否为字母,若是大写字母的话ch=ch+32,将字母变成小写。
5.调用函数判断该字符串是否为关键字。
是关键字输出字符串及关键字,不是关键字则输出字符,并说明是普通标识符。
6.下面是匹配数字和运算符,并输出结果,其中运算符用switch语句进行判断。
结构图如下:
四设计思路及关键问题的解决方法
1.设计思路
通过主函数,并通过调用子函数,让子函数各司其职通过主函数的调用提高程序运行的效率。
首先判断文件是否存在,是否为空,接着打开输入文件,逐个字符地读入要分析的程序。
对读入的字符串进行分类,分为数字、字符串和其它,然后依次循环分别对数字串、字符串和其他情况进行判断处理,同时将结果输出界面显示。
其中字符串的判断分为标识符和关键字,其它情况的判断分为单分界符、双分界符。
对关键字的存储问题中中用到了指针数组,使字符串的处理更加灵活方便。
2.本词法分析器设计时的难点
首先是指针的用法,通过使用fseek函数,可以重定位流上的文件指针,轻易把文件指针返回上一个字符
第二是单目运算符和双目运算符的引用,开始不知道该如何去做,后来通过switch语句来解决这一难题。
5.结果及测试分析
1.程序运行后输入源文件名和路径名。
2.程序编译器输出结果。
七、总结心得与体会
这次课程设计是用C++编写该程序编写程序,通过这次写程序,了解了词法分析程序的开发过程及程序的运行,掌握了词法分析的一些基本理念,同时也感到自己的知识水平有限,写的这个词法分析程序功能有限在很多方面的功能还有待完善,在这次试验中有几点体会。
1.由于对C语言不太熟悉,所以采用的较为熟悉的C++作为设计语言。
刚开始的时候认为这是个很简单的程序,但一做下来发现,有很多地方不知道该怎么实现,特别是指针部分,以及对程序的整结构方面的不能实现功能,等到后来看了好几遍书之后,捋清思路后才实现功能。
2.写程序前(无论大小)最好先把程序流程写下来,这样一来,有了明确的思路,即使错了也能很好的找出错误,完成程序。
在今后的学习中,要注意实践,不能眼高手低,多做试验才能更好的理解理论,并且要多问几个问什么,把知识学到家。
八、附录(程序源代码:
)
#include
#include
usingnamespacestd;//申请空间缓存
#definea22
charch='';//CH字符类型空值
stringkey[15]={"begin","end","if","then","else","while","write","read",
"do","call","const","char","until","procedure","repeat"};//定义关键字数组
intIskey(stringc)//类型符//关键字判断定义函数
{
inti;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理课程设计c+ 编译 原理 课程设计 c+