版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译基础课程设计报告标题名称语法高亮转换软件班学生编号(全名)教师写作时间 课程设计题目语法高亮转换软件课程设计任务的目的和任务描述:在我们使用的集成编译环境(IDE)中,C+语言的源代码通常是用高亮语法来表示的,比如关键字的显示。但是,如果我们将这段代码发布到网页上,它高亮显示的语法就会消失,看起来非常直观。我们希望代码在网页中仍能保持原来突出显示的语法。课程设计要求:作为C+源代码输入的文件,即后缀为cpp的文件,要输出为web文件,即后缀为html的文件。课程设计与实现功能:基于词法分析语法,通过高亮转换软件将C+源代码转换成网页文件。在浏览器中打开网页文件时,网页中显示C+源代码,并以
2、高亮语法显示。设计思想和实现方法(一)、设计思路要将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 、 dynamic_cast 、 else
3、、 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 、 short 、 signed 、 signedC+语言中的所有标识符都是由字母或数字组成的。当遇到这些标识符时,先读取它们,然
4、后与key数组中的关键字进行匹配。如果匹配成功,则为关键词,高亮显示,输出到目标文件(html);否则,它们将被直接输出而不进行处理。(2)需要特殊处理的字符的突出显示:每次从C+源文件中读取单个字符,根据不同的情况进行不同的处理。处理方法如下:当读取字符“+-*/% =”时,它以运算符样式显示。阅读字符 ,并以既定的样式显示它们。读字!$ % & ( ) * + - , .: ;= ? | 这些字符直接以既定的样式显示。如果读入,一直读到 再次出现,然后将这些字符作为字符串输出。如果读入 ,则一直读到 再次出现,然后以字符样式输出这些字符。如果以1 9读入,会一直读到非数字连续出现,然后以正
5、常的数字样式输出这些数字。如果读入了 # ,则继续读入字符,直到出现、 n 或 t 为止,并以#开头的字符串输出。(2)实现方法(1)实现功能的描述根据上述具体的处理条件,分别定义了is_keyword(char *str)、is_identifier(char *type)、is_operator(char ch)、is _ seprat (charch)和is_notes(char ch)五个函数来处理关键字、标识符、运算符、分隔符和注释语句。getstr(fstream & src)函数用于读取字符,get(fstream src)函数用于读取空格字符。根据源程序中字符的不同,调用相应的
6、函数进行处理。使用lex(ifstream &src,ofstream &dst)分析函数。在主程序中,已经传递了ifstream src (rensha.cpp ,iOS: in)和ofstream dst (output.html ,iOS:out);读取源程序(rensha.cpp)并输出目标文件。(2)主程序流程图开始输入C+源文件调用ifstream函数接受字符调用lex函数是空格字符。是个人物。字符/空格字符匹配key数组的内容。直接输出普通是一样的吗Y、或关键字标识符处理。区分字符类型是一个字符串。是注释语句。是单眼的操作员是分裂的。符节是整数还是实数注释语言句子处理单目操作者处
7、理边界字符处理整数或实数处理字符串处理Y还有其他角色吗?普通输出HTML文件结束程序说明使用getstr(fstream & src)和get(fstream src)函数将rensha.cpp中的字符逐个取出,与bool is_keyword(char *str)函数中定义的char *key的数组容量进行比较,进行关键字匹配。如果匹配成功,则按关键字显示;如果不成功,将按运算符、分隔符、注释语句、分隔符和字符串显示。其中包括运算符、分隔符、注释语句、分隔符、字符串等。分别定义相应的函数进行处理,符合要求的字符高亮显示。程序运行结果实验报告存在的问题及分析显然,实现这种设计的关键是人物的分类
8、。对于功能不同的字符,要用不同的颜色显示。C或C+中的字符大致可以分为以下几类:字符集、标识符、关键字、文本、运算符(operator)、分隔符、空格等。其中,标识符和关键字可以作为关键字对待,其他字符则根据自身的类型和功能进行分类。一个好的分类为它们的凸显提供了前提条件,这样它们的功能就不会因为分类不具体而冲突,也不会因为分类太细而无法实现某些功能,这就使得这种设计的实现成为可能。做好分类就相当于成功了一半。总结经验本课程设计需要一个简单的编译器来实现C+源文件在转换为HTML文件过程中的关键字和特殊字符的高亮显示功能。设计之初,和其他课程设计一样,感觉无从下手,整个人就像一只无头苍蝇在周围
9、乱撞。但通过耐心收集资料,向老师同学请教,慢慢有了头绪,有了自己的设计思路和实现方法。对于设计题目来说,并没有那么复杂,但是设计师要将所学转化为相应的实际应用,并不容易。这个设计题目的设计思路很简单。它只需要对关键词、符号、评论等进行分类。,然后通过定义实现函数进行字符搜索和字符匹配。当匹配成功后,就可以进行相应的处理。但是如何分类定义实现功能,还是需要自己去思考和实践。在课程设计过程中,我深刻体会到编译原理不同于一般集成环境的设计语言,它是高度抽象的。这就需要我们在设计过程中真正理解编译器是如何构造的,如何实现其功能,这比常见的设计语言要困难和抽象得多。当然,这也可以让我们对编程语言的设计和
10、实现以及编程语言相关的理论知识有更深入的了解。此外,实践可以提高学生的编程能力、协作能力和创新能力,为以后的学习打下良好的基础。通过这次课程设计,我认识到了编译原理课程的重要性,对编译原理课程有了更深刻的理解。深刻认识到编译原理是计算机专业本科生的一门重要的专业基础课,对理论和实践都有很高的要求。编译原理课程设计也是计算机专业课程编译原理的后续实践教学环节。在这个课程设计中,虽然我只做语法高亮软件。但是这个设计题目用的是词法分析,和别人有关系,所以用的是编译原理全教程的知识。词法分析作为编译原理的一个重要问题,是语法分析、语义分析、中间代码生成、代码优化、代码生成等的前提。只有把这些联系起来,
11、才能真正学好编译原理这门课。只有应用好这些,才能做好这个设计。另外,通过这次设计,我对编程语言的设计和实现有了深入的了解,不仅巩固了我的计算机理论知识,也加强了我将理论融入实际问题的能力,提高了我学习和实践的积极性。更重要的是,在这次课程设计中,我也发现了自己的一些不足,比如对知识点的把握不牢,独立思考的能力有待提高。总之,这个课程设计让我受益匪浅。参考于一,编译原理,高等教育建中守绪,编译原理,机械工业附录:(1)主程序代码:#包含#包含#include#include#includeusing命名空间stdbool是_ keyword(char * str);/是关键字。bool是_ id
12、entifier(char * type);/是标识符。bool is _ operator(char ch);/运算符bool is _ separator(char ch);/分隔符bool是_ 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”、
13、“case”、“catch”、“char”、“class”、“const”,“const_cast”、“继续”、“默认”、“定义”、“删除”、“执行”, double , dynamic_cast , else , enum , except ,“显式”、“extern”、“false”、“finally”、“float”,“for”,“friend”,“goto”,“if”,“include”,“inline”,“int”,“long”,“mutable”,“namespace”,“new”,“operator”,“私有”、“受保护”、“printf”、“pi”、“公共”、“注册”,重新解释
14、_铸造,返回,短,签署,“sizeof”、“static”、“static_cast”、“struct”,开关,模板,这个,抛出,真, try , type_info , typedef , typeid , typename ,“联合”、“无符号”、“使用”、“虚拟”、“无效”、“易变”,当;/C语言关键字for(int I = 0;i = ,ch)returntrueelsereturnfalse/分隔符bool is _ seprator(字符通道)if(strchr(;:,.()!&?| ,ch)returntrueelsereturnfalse/注释布尔型注释(字符型)if(strc
15、hr(/,ch)returntrueelsereturnfalse/读入下一个字符char getstr(ifstream &src)char c = 1;if (src.eof()返回c;src . get(c);返回c;/读入空格char get(ifstream &src)char c =“”;src . get(c);while(c= )src . get(c);返回c;/光标后退一个字符无效返回(ifstream和src)src.seekg(-1,IOs:cur);/分析功能void lex(ifstream &src,ofstream &dst)char ch,token1000=
16、0,* tempint I = 0;ch = getstr(src);if (ch=1)返回;while(ch= )ch = getstr(src);if (ch=1)返回;if (ch =n) dst /换行elseif (ch =t) dst;/空格else if(ch = = )dst & nbsp;If(isalpha(ch)/判断为关键字形式或标识符。while(is alpha(ch)| | is digit(ch)| | ch = = _ )tokenI= ch;ch = getstr(src);if (ch=1)返回;i+;令牌I= 0 ;cout token endltemp
17、 = new charI;memcpy(temp,token,I);/将I个字节从token指示的内存区域复制到temp指示的内存区域。tempI= 0 ;if(is _ keyword(temp)dst temp ;else dst temp背部(src);/判断为整数或实数elseif(isdigit(ch)while(isdigit(ch)|ch= . )tokeni+= ch;ch = getstr(src);if (ch=1)返回;temp = new charI+1;memcpy(temp,token,I);tempI= 0 ;dst token ;背部(src);/判断字符串的情
18、况elseif(ch= )tokenI= ch;ch = getstr(src);i+;if (ch=1)返回;而(ch!=)tokenI= ch;ch = getstr(src);if (ch=1)返回;i+;tokenI= ch;令牌I= 0 ;dst token ;/判断注释语句情况elseif(is_notes(ch)if(ch=getstr(src)=/)而(ch!=n )ch = getstr(src);if (ch=1)返回;tokeni+= ch;令牌I= 0 ;dst & nbsp / token ;/判断一元运算符的情况elseif(is_operator(ch)dst c
19、h endl/对于分隔符的情况else if(is _ separator(ch)dst ch endlelseif(ch=# )dst ch ;elseif(ch= )dst ch endlelseif(ch= )dst ch endlelseif(ch= )dst ch endlelseif(ch= !)dst ch endlelseif(ch=$ )dst ch endlelseif(ch= ?)dst ch endlelseif(ch=| )dst ch endlelseif(ch= :)dst ch endlint main()ifstream src(rensha.cpp ,IOs:in);ofstream dst(Out
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《中药学(第2版)》课件24- 补阴药 补血药
- 安全施工协议书15篇
- 2026年上海市杨浦区八年级语文下学期期中考试试卷及答案
- 钢结构伸缩缝处理施工工艺流程
- 2026年校园食品安全管理制度及规范
- 接待资料收集管理规定
- 生产现场叉车等搬运设备安全操作自查报告
- 患者气管插管意外滑脱应急演练脚本流程及总结
- 水利工程安全管理制度
- 南京市辅警招聘笔试题及答案
- 中信兴业投资集团2026届校园招聘笔试历年典型考点题库附带答案详解
- DB32-T 5389-2026 太阳能光伏与建筑一体化应用技术规程
- 26年ap化学2025真题及答案
- 2026陕西省为县以下医疗卫生机构定向招聘医学类毕业生招聘607人农业笔试参考题库及答案解析
- 2026年中考时政热点综合分析学案(含答案)
- AQ 3026-2026《化工企业设备检修作业安全规范》全面解读
- 2026中级社工《综合能力》高分通关卷5
- 水利工程安全文明措施费用分解
- 重庆水务集团招聘真题
- 2026民用航空器维修执照考试题库
- 基层脑卒中防治中心建设与管理指南
评论
0/150
提交评论