编译课程方案课设报告_第1页
编译课程方案课设报告_第2页
编译课程方案课设报告_第3页
编译课程方案课设报告_第4页
编译课程方案课设报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

个人资料整理 仅限学习使用课程设计题目名称:语法高亮转换软件课程设计任务目的与任务目的:·通过此次课程设计更深一步了解此法分析·培养解决工程问题的能力,例如方案的制定·了解设计和实现一个实际高级语言编译器所面临的各种问题及其复杂程度。主要任务:输入: cpp 源代码文件,后缀为 .cpp 的文件;输出:网页文件,后缀为 .html文件;实现功能:将 cpp 源代码转换成网页文件,在浏览器中打开网页文件时,网页中显示 C++ 源代码并以高亮语法表示显示。设计思想和实现方法设计思想:词法分析程序完成从输入文件中读取字符形式的高级语言源程序,并把输入转化为一个由单词符号组成的流。构造词法分析器的一种简单办法是用状态转化图来描述源语言词法记号流,然后手工把这种状态转换图翻译成为识别记号的程序。用这种方法可以产生高效的词法分析器。实现方法:用C++语言编写一个词法分析器 ,使之能识别输入串 ,并把分析结果 (单词符号,标识符,关键字等等>输出.输入源程序,输入单词符号,本词法分析器可以辨别关键字,标识符,常数,运算符号和某些界符,运用了文件读入来获取源程序代码,再对该源程序代码进行词法分析,这就是词法分析器的基本功能.当词法分析器调用预处理子程序处理出一串输入字符放进扫描缓冲区之后 ,分析器就从此缓冲区中逐一识别单词符号 .当缓冲区里的字符串被处理完之后 ,它又调用预处理子程序来处理新串 .程序说明:程序一开始要求读入一个代码文件 ,接着把读入的源程序打印出来 .然后进行词法分析,程序定义两个数组 keyword[60]和cha[31],前者用来存放关键字,后者用来存放中断字符。从文件中读入字符,与cha[31]中的中断字符相比较。判断读入的是否为中断字符,如果不是继续读入字符;如果是中断字符,将前面读入的字符放入到一个个人资料整理 仅限学习使用字符串当中,将此字符串与 keyword[60]中存放的关键字比较,如是关键字则做相应处理即着色;如果不是关键字不作处理。程序流程图:程序运行结果example.cpp 文件中的内容: //example.cpp#include<iostream>#definepi3.1415usingnamespacestd 。intmain(>{intn=0。floata=12.34 。charch='a'。cout<<"helloC++" 。for(inti=0。i<10。i++>a=n+ch。return0。}个人资料整理 仅限学习使用运行程序 :查看wyl.html中的显示内容:测试报告:为了更好的检查程序最终输出是否正确,可以用记事本打开wyl.html查看代码。wyl.html 代码如下:个人资料整理 仅限学习使用存在问题及分析:刚开始编写程序时,编写程序不知道如何从一个文件中读入字符,如何将一个字符串直接输出到文件当中。这主要是对 C++语言中的一些函数不了解造成的。在设计如何过滤中断字符和判断是否为关键字时,出现了迷茫,不知道该如何操作。这主要是算法不成熟导致的,没有正确的算法就不可能设计出正确的。要想设计出一个好的程序首先要有一个好的思想然后将这个思想转化为正确的算法,根据算法编写程个人资料整理 仅限学习使用序。虽然最终程序写出来了也完成了课程设计的要求,但是编写的程序还是存在一些不足。首先,程序并没有把 C++中所有的关键子都添加进去,只是添加了一些最常用的。其次,由于自己编程能力有限所编的程序执行效率有点低。总结及体会:经过一个星期的编译原理课程设计,本人在单老师的指导下,顺利完成该课程设计.通过该课程设计,收获颇多。一、对实验原理有更深的理解通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程,对课本上的知识有了更深的理解,课本上的知识是机械的,表面的.通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解.二、对该理论在实践中的应用有深刻的理解通过把该算法的内容,算法的执行顺序在计算机上实现,知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解.三 、 激 发 了 学 习 的 积 极 性通过该课程设计,全面系统的理解了编译原理程序构造的一般原理和基本实现方法.把死板的课本知识变得生动有趣,激发了学习的积极性.把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解.以前认识是模糊的,概念上的,现在通过自己动手做实验,从实践上认识了知识的运用,对计算机编译原理的认识更加深刻.课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意命令的正确性.,培养实践动手能力和程序 开 发 能 力 .四 、 理 解 了 该 知 识 点 以 及 学 科 之 间 的 融 合 渗 透本次课程设计程序部分是用C++语言编写的,把《编译原理》,《算法分析与设计》《C语言》三门学科联系起来,把各个学科之间的知识融合起来,把各门课程的知识联系起来,对计算机整体的认识更加深刻.使我加深了对《编译原理》,《算法分析与设计》《C++语言》三门课程的认识.个人资料整理 仅限学习使用参考文献陈意云张昱,《编译原理》,高等教育出版社王雷刘志成周晶,《编译原理课程设计》,机械工业出版社Internet网络相关资源附录:源代码/*cpp完成将wyl文件里的.cpp文本转换成 wyl.html文件并可以识别出关键字并用高亮表示*///头文件#include<iostream>#include<fstream>#include<string>usingnamespacestd。//关键词表stringkeyword[60]={"auto","bool","break","case","catch","char","class","const","const_cast","continue","default","delete","do","double","dynamic_cast","else","enum","explicit","extern","false","float","for","friend","goto","#include","if","inline","int","long","mutable","namespace","new","operator","private","protected","public","register","return","short","signed","sizeof","static","static_cast","struct","switch","template","this","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","while","_asm",} 。//中断字符表charcha[31]={' ','\t','\n','{','}',',','.','[',']','*','\\','/','?','<','>',' 。 ',':','^','%','@','!','~','`','(','>','+','-','|','=','\'','\"'}。ifstreamfin("wyl.cpp"> 。ofstreamfout("wyl.html"> 。voidmain(>{/*主函数*/fout<<"<html>"<<endl。fout<<"<body>"<<endl。intnum=60。个人资料整理 仅限学习使用//查找是否为关键字的函数 如果是则高亮表示voidsearchword(stringword>。//判断读入字符是否为中断字符boolismark(char>。//处理中断字符voidmark(char>。charm。while(!fin.eof(>>{/*读入文件的字符并处理 */m=fin.get(>。stringn。while(!ismark(m>&&!fin.eof(>>{/*如果不是中断字并且不是全文结束符,则继续读入下一个次,并将之前读入的字符全部存入字符串a中*/n=n+m。m=fin.get(>。}if(ismark(m>>{/*如果是中断字,则判断字符串a是否为关键字,并处理关键字*/searchword(n>。mark(m>。}if(fin.eof(>>break。}fout<<"</body>"<<endl 。fout<<"</html>"。fin.close(>。fout.close(>。}voidsearchword(stringword>{/*查找关键字并输出 */intflag=0。for(inti=0。i<50。i++>{if(keyword[i]==word.data(>>{flag=1。fout<<"<fontcolor=\"blue\">"<<word.data(><<"</font>" 。break。}}if(flag==0>fout<<word.data(> 。}个人资料整理 仅限学习使用boolismark(charch>{/*判断中断符*/for(inti=0。i<31。i++>{if(ch==cha[i]>return1。}return0。}voidmark(charch>{/*处理中断符*/charm。stringa。a=ch。stringb。intn=0。voidsearch_end(int>。switch(ch>{case'\n':fout<<"<br>"。n=0。break。case'\t':fout<<" 。 。 。 。"。n=0。break。//一个制表符等于个空格case'<':fout<<"<。"。n=0。break。case'>':fout<<">。"。n=0。break。case'':fout<<" 。"。n=0。break。case'\'':{/*当读入字符为'时,查找匹配的下一个'并输出之间的字符*/m=fin.get(>。while(m!='\n'&&m!='\''>{switch(m>{case'<':b="<。"。break。case'>':b=">。"。break。case'':b=" 。"。break。case'\t':b=" 。 。 。 。"。break。default:b=m。break。}a=a+b。m=fin.get(>。}if(m=='\n'>fout<<a.data(><<"<br>"。elsefout<<a.data(><<'\''。break。个人资料整理 仅限学习使用}case'\"':{/*查找匹配的"并输出字符串*/m=fin.get(>。while(m!='\n'&&m!='\"'>{switch(m>{case'<':b="<。"。break。case'>':b=">。"。break。case'':b=" 。"。break。case'\t':b=" 。 。 。 。"。break。case'\\':b='\\'。m=fin.get(>。b=b+m。break。default:b=m。break。}a=a+b。m=fin.get(>

。}if(m=='\n'>fout<<"<fontcolor=\"ff00ff\">"<<a.data(><<"<br>"<<"</font>"elsefout<<"<fontcolor=\"ff00ff\">"<<a.data(><<'\"'<<"</font>"break。

。。}case'/':{/*判断是否为注释,如果是,则调用处理注释函数,如果不是,则当做一般字符处理*/m=fin.get(>。if(m=='/'>search_end(0>。elseif(m=='*'>search_end(1>。elsefout<<'/'<<m。break。}case'\\':{m=fin.get(>。fout<<'\\'<<m。break。}default:fout<<ch。break。}}voidsearch_end(intflag>{/*读入注释并输出的函数 */个人资料整理 仅限学习使用stringa。stringb。charm。intn=0。intt=0。if(flag==0>{m=fin.get(>。while(m!='\n'>{switch(m>{case'<':b="<。"。break。case'>':b=">。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论