欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    《编译原理》课程设计报告词法分析器.doc

    • 资源ID:2385726       资源大小:103KB        全文页数:12页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《编译原理》课程设计报告词法分析器.doc

    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<String> key = new List<string>(); /保存关键字 static List<String> bsf = new List<string>(); /保存标识符 static List<String> sz = new List<string>(); /保存数字 static List<String> gx = new List<string>(); /保存关系运算符 static List<String> ys = new List<string>(); /保存数字运算符 /数字,标识符,空白,关系符,运算符 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; if (a = '=') temp = temp + a.ToString(); j+; a = codej; else if (a = '>') 待添加的隐藏文字内容2 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; for (int i = 0; i < keys.Length; i+) if (keysi = key) flag = true; /Console.WriteLine(key+"是不是key"+flag); break; else flag = false; /Console.WriteLine(key+"是不是key"); / Console.WriteLine(flag+"是不是key"); return flag;

    注意事项

    本文(《编译原理》课程设计报告词法分析器.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开