编译原理课程设计c版
本文由leishensc贡献
doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
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 using namespace std;//申请空间 #define a 22 char ch =' ';//CH 字符类型 空值 string key[15]={//文件指针
cout