编译原理课程设计报告--语法高亮转换软件

上传人:m**** 文档编号:503738657 上传时间:2024-01-28 格式:DOCX 页数:16 大小:455.34KB
返回 下载 相关 举报
编译原理课程设计报告--语法高亮转换软件_第1页
第1页 / 共16页
编译原理课程设计报告--语法高亮转换软件_第2页
第2页 / 共16页
编译原理课程设计报告--语法高亮转换软件_第3页
第3页 / 共16页
编译原理课程设计报告--语法高亮转换软件_第4页
第4页 / 共16页
编译原理课程设计报告--语法高亮转换软件_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《编译原理课程设计报告--语法高亮转换软件》由会员分享,可在线阅读,更多相关《编译原理课程设计报告--语法高亮转换软件(16页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上编译原理课程设计报告题目名称语法高亮转换软件班 级学 号姓 名指导教师 编写时间2009-12-311. 课程设计题目名称语法高亮转换软件2. 课程设计任务目的与任务u 问题描述:在我们使用的集成化编译环境(IDE)中,C+语言的源代码通常使用高亮语法表示,例如关键字的显示。但是如果我们将这段代码发布到网页中,它的高亮语法表示将消失,这样看起来非常不直观,我们希望在网页中代码仍然能保持原来的高亮语法表示。u 课程设计要求:将输入为C+源代码的文件,即后缀为cpp的文件,用网页文件输出,即用后缀为html的文件输出。u 课程设计实现功能:基于词法分析语法高亮转换软件将C

2、+源代码转换为网页文件,在浏览器中打开网页文件时,网页中显示C+源代码并以高亮语法表示显示。3. 设计思想和实现方法(一)、设计思想 要将C+源文件转换成高亮显示的HTML文件,主要设计思想为:(1)关键字的高亮显示:源程序中需高亮显示的字符都是关键字或一些特殊字符,因此可以将这些关键字都存入key数组中。key数组为:key=asm, auto, bad_cast, bad_typeid, bool, break, case, catch,char, class, const, const_cast, continue, default, define,delete,do,double, d

3、ynamic_cast, else, enum, except, explicit,extern, false, finally, float, for, friend, goto, if,include,inline, int, long, mutable,namespace,new,operator,private,protected,printf,pi,public,register,reinterpret_cast,return, short, signed, sizeof, static, static_cast, struct,switch, template, this, thr

4、ow, true, try, type_info,typedef, typeid, typename, union, unsigned, using, virtual,void, volatile,whileC+语言中的标识符均由字母或数字组成。当碰到这些标识符时先读取,然后与key数组中的各关键字进行匹配,匹配成功则为关键字,并以高亮处理并输出到目标文件(html)中,否则不做处理直接输出。(2)需要特殊处理的字符的高亮显示:每次从C+源文件中读取单个字符,根据不同的情形进行不同的处理。处理情况如下: 读到字符+-*/%= 时,以运算符样式显示出来。 读到字符,以既定样式显示。 读到字符!

5、$ % & ( ) * + - , . : ; = ? | 这些字符,直接以既定样式显示。 如果读入,则一直读到再次出现为止,然后将这些字符以字符串样式输出。 如果读入,则一直读到再次出现为止,然后将这些字符以字符样式输出。 如果读入19,则连续读到非数字出现,然后将这些数字以正常数字样式输出。 如果读入,继续读入字符,直到出现 、n或t为止,以开头的字符串样式输出。(二)、实现方法(1)实现函数说明针对上述具体的处理情况,分别定义: is_keyword(char *str)、is_identifier(char *type)、is_operator(char ch)、is_seprator

6、(char ch)、is_notes(char ch)这五种函数分别处理关键字、标识符、运算符、分界符、注释语句。函数getstr(fstream & src) 用来读取字符,函数get(fstream src)用来读入空格符。根据源程序中的不同字符分别调用相应的函数进行处理。用lex(ifstream &src, ofstream &dst)来分析函数。在主程序中通过ifstream src(rensha.cpp,ios:in)和ofstream dst(Output.html,ios:out);来实现对源程序(rensha.cpp)的读取以及目标文件的输出。(2)主程序流程图开 始输入C+

7、源文件调用ifstream函数取字符调用lex函数是字符是空格符字符/空格符与key数组内容匹配N直接输出Y是否相同关键字或标示符处理判别字符类型是注释语句是字符串是单目算符是整数或实 数是 分界 符整数或实数处理分界符处理单目运算符处理注释语句处理字符串处理Y是否还有字符N输出HTML文件结 束4. 程序说明通过函数getstr(fstream & src) 和函数get(fstream src)逐个取出rensha.cpp中的字符,通过与bool is_keyword(char *str)函数中定义的char *key数组内容比较,进行关键字匹配,匹配成功则按关键字方式显示,如果不成功再按

8、运算符、分界符、注释语句、分界符、字符串等做出相应的处理。其中,运算符、分界符、注释语句、分界符、字符串等均单独定义了相应函数进行处理,对符合要求的字符进行高亮显示。5. 程序运行结果6. 测试报告7. 存在问题及分析很显然,本设计的实现关键就是字符的分类问题。对于不同作用的字符,应该用不同的颜色将其分别显示。在C或者C+中的字符大概可以分为以下几类:字符集,标识符,关键字,文字,操作符(运算符),分隔符,空白符等。其中标识符和关键字都可以当作关键字处理,其他的字符则按自己的种类及功能进行分类。好的分类为他们的高亮显示提供了一个前提条件,让他们的功能既不会因为分类不具体而冲突也不会因为分得太细

9、而使得某些功能没有实现,这使得了本设计的实现成为了可能,做好分类问题就相当于成功了一半。8. 总结及体会本次课程设计要求设计一个简单的编译器,用以实现C+源文件在向HTML文件转换过程中的关键字及特殊字符的高亮显示功能。在设计刚开始时,如做其他课程设计一样,觉得无从下手,整个人就像是个无头苍蝇到处乱撞,但通过自己耐心搜集资料,向老师和同学请教,慢慢理出了头绪,也有了自己的设计思想和实现方法。对于设计题目来说,并非那么得复杂,带要设计者将所学转换成相应的实际应用却并非一件容易的事情。本设计题目的设计思想是简单的,只需要将关键字、标示符、注释等分门别类,然后通过定义实现函数进行字符搜索及字符匹配,

10、匹配成功时作出相应的处理即可。但是如何进行分类,如何定义实现函数,还是需要自己下功夫考虑和实践的。在课程设计过程中,我深刻地体会到:编译原理不同于一般集成环境的设计语言,它具有很强的抽象性。这就要求我们在设计过程中要真正理解编译器是如何构造,如何实现功能的,而这相对普通设计语言在难度和抽象程度上有了更大的提升。当然这也能使我们对程序设计语言的设计和实现有了更深刻的理解,对和程序设计语言相关的理论知识有了更深层次的了解。除此之外,通过实践提高学生的编程能力、协作能力和创新能力,为以后的学习打下良好的基础。通过本次的课程设计,我认识到了编译原理这门课程的重要性,对编译原理这门课程有了更深刻地认识。

11、深刻认识到编译原理课程作为计算机专业本科生的一门重要的专业基础课程,对理论性和实践性要求均很高。编译原理课程设计也是计算机专业课编译原理的后续实践性教学环节。在本次课程设计中,虽然我只做了语法高亮显示软件。但这一设计题目用到了词法分析,而词法分析又是跟其他相关联的,所以运用的是整个编译原理课程的知识,词法分析作为编译原理课程的一个重要问题,它是语法分析,语义分析,中间代码生成,代码优化,代码生成等的前提,把这些联系了起来才算真正学到了编译原理这门课程,把这些运用好了,才能做好本次设计。另外,通过本次的设计,使我对程序设计语言的设计和实现有深入的理解,不仅巩固了计算机专业理论的知识,而且还加强了

12、把理论融入到实际问题中的能力,提高了我学习和实践的积极性。更重要的是在本次课程设计中,我也发现了自身存在的一些不足,比如说,对知识点掌握不牢固,独立思考问题能力还有待提高等。总之,本次课程设计中我受益匪浅。参考文献1 陈意云 张昱 ,编译原理,高等教育出版社2 李建中 姜守旭,编译原理,机械工业出版社附录:(1)主程序代码:#include #include #include #include#include using namespace std;bool is_keyword(char *str); /为关键字bool is_identifier(char *type); /为标志符boo

13、l is_operator(char ch); /运算符bool is_seprator(char ch); /分界符bool is_notes(char ch);/注释char getstr(fstream & src); /读入一个字符char get(fstream src) ; /读入空格符/ 判断是否为关键字bool is_keyword(char *str) bool Flag= false; /做标记用char *key=asm, auto, bad_cast, bad_typeid, bool, break, case, catch,char, class, const, const_cast, continue, default, define,delete,do,double, dynamic_cast, else, enum, except, explicit,extern, false, finally, float, for, friend, goto, if,include,inline, int, long, mutable, namespace, new, operator,private, protected,printf,pi,public, registe

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号