《编译原理》课程设计报告--词法分析器.doc_第1页
《编译原理》课程设计报告--词法分析器.doc_第2页
《编译原理》课程设计报告--词法分析器.doc_第3页
《编译原理》课程设计报告--词法分析器.doc_第4页
《编译原理》课程设计报告--词法分析器.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

201x-201x学年第x学期编译原理课程设计报告院 系: 计算机科学与技术 班 级: xx级xx 班 学生姓名: xxxxxx 学 号: xxxxxxxx 指导老师: xxxxxx 计算机科学与技术学院监制20xx年x月目录 1.课程设计的目的2.课程设计的内容和要求3.问题分析和相关知识介绍4.设计思路和关键问题及其解决方案5.测试和结果分析6.总结和心得体会附件1:参考文献附件2:核心源代码1. 课程设计的目的(1) 编写词法分析器(2) 加深对词法分析器工作原理的了解和认识2.课程设计的内容和要求编写词法分析器,词法分析器能够识别关系算符,词法分析器能够识别标识符和关键字,词法分析器能够识别无符号数。3.问题分析和相关知识介绍构成词法分析器的一种简单方法是用状态转换图来描述源语言词法记号的结构,然后手工把这种状态转换图翻译成为识别词法记号的程序。词法分析器的任务是把构成源程序的字符流翻译成词法记号流。4.设计思路和关键问题及其解决方案把自然语言构造成正规式,把正规式构造成有限自动机nfa,然后根据子集构造法把有限自动机构造成无限自动机dfa,根据极小化dfa状态数算法把dfa构造成最简dfa,其次根据最简dfa画出转换表,根据转换表画出装换图,最后根据装换图就可以编写词法分析器。5.测试和结果分析6.总结和心得体会通过本次试验,不仅仅是我学会了c#基础知识,而且还是我对词法分析器有了更深入的认识,虽然在编写词法分析器过程中遇到了很多困难,例如:c#语言不熟悉,对此法分析器的工作原理分析的不透彻,但在老师和同学的帮助下,我有了很大的提高,通过不断的努力最终顺利的完成了课程设计,很感谢帮助我的xx同学和xx老师。附件1:参考文献 编译原理(第2版) 高等教育出版社;c#程序设计及应用教程(第2版) 人民教育出版社。附件2:1code文档截图2.程序源代码using system;using system.collections.generic;using system.text;using system.io;namespace lexicalanalysis class program static string keys = static, true, return, string, length, break, console, writeline, bool, false, ture, void, if, else, while, int, float, for, enum, default, case, double, do ; static list key = new list(); /保存关键字 static list bsf = new list(); /保存标识符 static list sz = new list(); /保存数字 static list gx = new list(); /保存关系运算符 static list ys = new list(); /保存数字运算符 /数字,标识符,空白,关系符,运算符 static void main(string args) string date = file.readalllines(d:code.txt); /路径,并存入data for (int i = 0; i date.length; i+) console.writeline(第 + (i + 1) + 行code: + date.getvalue(i); analysisbyline(datei); /分别输出存储在四个list中的string console.writeline(关键字,输入回车); /输出所有的关键字 console.readline(); foreach (string id in key) console.writeline(id); console.writeline(标识符,输入回车); /输出所有的标识符 console.readline(); foreach (string id in bsf) console.writeline(id); console.writeline(数字,输入回车); /输出所有的数字 console.readline(); foreach (string id in sz) console.writeline(id); console.writeline(关系运算符,输入回车); /输出所有的关系运算符 console.readline(); foreach (string id in gx) console.writeline(id); console.writeline(算数运算符,输入回车); /输出所有的算数运算符 console.readline(); foreach (string id in ys) console.writeline(id); console.writeline(输入回车退出); console.readline(); static void analysisbyline(string code) char a = ; string temp = ; int j = 0; while (j code.length) a = codej; temp = ; if (char.isletter(a) | a = _) /是否为标识符 temp = temp + a.tostring(); j+; a = codej; while (char.isletterordigit(a) temp = temp + a.tostring(); j+; a = codej; if (iskey(temp) /console.writeline(保留字:+temp); if (!key.contains(temp) /console.writeline(添加成功); key.add(temp); else /console.writeline(标识符:+temp); if (!bsf.contains(temp) /console.writeline(添加成功标识符=); bsf.add(temp); else if (char.isdigit(a) temp = temp + a.tostring(); j+; a = codej; while (char.isdigit(a) temp = temp + a.tostring(); j+; a = codej; /判断是否是小数 if (a.equals(.) temp = temp + a.tostring(); j+; a = codej; while (char.isdigit(a) temp = temp + a.tostring(); j+; a = codej; /判读是否是科学记数法 if (a.equals(e) | a.equals(e) temp = temp + a.tostring(); j+; a = codej; while (char.isdigit(a) temp = temp + a.tostring(); j+; a = codej; / console.writeline(数字:+temp); if (!sz.contains(temp) /console.writeline(添加成功标识符=); sz.add(temp); else if (a = ) temp = temp + a.tostring(); j+; a = codej; /console.writeline(关系符+temp); if (!gx.contains(temp) /console.writeline(添加成功标识符=); gx.add(temp); else if (a = =) temp = temp + a.tostring(); j+; a = codej; / console.writeline(关系符+temp); if (!gx.contains(temp) /console.writeline(添加成功关系=); gx.add(temp); else if (a = ) temp = temp + a.tostring(); j+; a = codej; if (a = =) temp = temp + a.tostring(); j+; a = codej; / console.writeline(关系符+temp); if (!gx.contains(temp) /console.writeline(添加成功标识符=); gx.add(temp); else if (a = + | a = - | a = / | a = *) temp = temp + a.tostring(); j+; a = codej; /console.writeline(运算符+temp); if (!ys.contains(temp) /console.writeline(添加成功标识符=); ys.add(temp ); else j+; /判断是不是保留字的iskey方法 static bool iskey(string key) bool flag = false; fo

温馨提示

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

评论

0/150

提交评论