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

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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
语法高亮转换软件 编译原理 课程设计报告

编译原理 课程设计报告 题目名称 语法高亮转换软件 班 级 学 号 姓 名 编写时间 课程设计题目名称 语法高亮转换软件 课程设计任务目的与任务 在我们使用的集成化编译环境(IDE)中,C++语言的源代码通常使用高亮语法表示, 但是如果我们将这段代码发布到网页中,它的高亮语法表示将消失,这样看起来非常不直观,我们希望在网页中代码仍然能保持原来的高亮语法表示,以方便源程序的可读性,可修改性。 要求输入一个cpp源文件,输出html格式的代码,用IE浏览器打开后可以高亮显示关键字,注释,预定义头文件等等。 设计思想和实现方法 设计思想 我们需要一个程序,逐个的读入输入的cpp文件,把读入的字符进行一次词法分析,生产词法记号流,以便后面的对关键字等的识别工作,然后再对源程序文件进行转换,对应的记号输出对应的html语言。 实现方法 在本次设计中,我们使用gun公司编写的flex软件进行词法分析的工作,Lex编译器是一种基于正规式的描述来构造的词法分析器,它广泛用于描述各种语言的词法分析器。使用gcc对flex生成的源程序进行编译,最终可以生成我们所需要的转换软件。 源程序的格式需要被保留,例如程序里的缩进和换行,都是集成化编译环境为了方便阅读而自动生成的格式,所以当这些发布到网页中的时候,我们也需要保留这些,因此在进行html化的翻译前,需要先对cpp文件进行一次预处理,生成html中的标记。 例如:” ”空格是 nbps; “” 小于号是 lt; \t 是需要生成足够的空格nbsp; 这样处理过的cpp文件.里面的特殊字符都被转译,成为IE浏览器可识别的html字符。 下一步,利用html语言对预处理过的cpp文件再进行一次html语言的转译,这次需要之前所提及的词法分析,碰到特定的关键字生成特定的html代码,以产生高亮显示效果。 例如:当分析程序遇到int 关键字的时候 应该输出浅蓝色的关键字标识。当遇到//注释的时候输出灰色的标识,同理需要识别/*和*/之间的内容。 本设计中在对cpp关键字高亮显示时使用了html中css功能,css是html中的样式,可以先预先定义好每种样式的名称以及字体颜色大小字型等,方便后面对cpp转换时的高亮显示,只需要使用class=style1 就可以完成。 程序说明 首先是cpp源文件的格式保留和特殊字符的转换。 %% {printf(lt;);} {printf(gt;);} {printf(amp;);} \t {printf(nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;);} {printf(nbsp;);} nbsp; {printf(nbsp;);} %% 在这里,类似于等不能直接写进html语言中的字符需要被转译掉,即读入一个符合的字符便输出相应的代码,例如: {printf(lt;);} 但是如果cpp源文件中本身就出现国html中的标记,例如nbsp; 如果这里不加以定义,nbsp;中的就会先被转译,如: {printf(amp;);} 这样显然不是我们所要的结果,因此我们在后面添加了对nbsp; 的识别,然后再输出{printf(nbsp;);} 由这个lex文件生成的lex.yy.c经过gcc的编译后,便可以实现对cpp的格式保留和特殊字符html标记化。 接下来是对第一次预处理后的cpp文件进行词法分析 DIGIT [0-9] NUMBER {DIGIT}+ LETTER [a-zA-Z] WORD {LETTER}+ WHITESPACE [ \t]+ DELIMITER [,(){}[]-+*%/=~!|?:;.#] NL \r?\n QUOTATION \[^\n]*\ LINECOMMENT \/\/.*\n 这是几个需要用flex处理的正规定义,由上面可以看出number是digit的闭包,word是letter的闭包,最后一个quotation是引号的正规定义,表示是在” ”之间可以出现除了”和\n的任何字符. Linecomment是注释的正规定义,\ / 在这里是一个转字符的作用,即//后面可以出现任何字符,然后以\n换行结束。 KEYWORD

文档评论(0)

yurixiang1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档