您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 编译原理课程设计说明书
山东科技大学学生课程设计课程设计说明书设计题目:词法分析程序设计专业:计算机科学与技术班级:设计人:山东科技大学2014年6月1日山东科技大学学生课程设计课程设计任务书学院信息科学与工程学院专业计算机科学与技术班级姓名一、课程设计题目:词法分析程序设计二、课程设计主要参考资料(1)韩太鲁等,编译原理.石油大学出版社.2007.9(2)邵顺增、李琳,C#程序设计.2008.8(3)lex-yacc使用说明.PPT(4)window_bison_flex使用举例.PDF三、课程设计应解决的主要问题:(1)设计编写词法分析程序(2)学会使用Lex软件进行词法分析(3)(4)四、课程设计相关附件(如:图纸、软件等):(1)词法分析器.exe(2)源代码(3)五、任务发出日期:2014-3-5课程设计完成日期:2014-6-5指导教师签字:系主任签字:山东科技大学学生课程设计指导教师对课程设计的评语成绩:指导教师签字:年月日山东科技大学学生课程设计目录实验一词法分析程序............................................1一、设计目的..............................................1二、设计要求................................................1三、设计说明................................................1四、运行结果及分析.........................................13五、总结...................................................15实验二Lex词法分析..........................................16一、实验目的.............................................16二、实验要求...............................................16三、实验说明...............................................16四、运行结果...............................................16五、总结...................................................17山东科技大学学生课程设计1实验一词法分析程序一、设计目的通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。二、设计要求编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)三、设计说明a)需求分析(程序任务)输入:源程序(保留字,标识符,数字,运算符,分隔符,以及错误字符)输出格式:(“单词所属类别别”,“单词”)其中:类别1(保留字):if,else,int,short,double,long,float,string,char,void,bool,false,true,null,class,main,for,while,do,return,switch,break,continue,case,try,catch,new,private,protect类别2(标识符):除保留字外的其他字母开头的单词类别3(数字):无符号整型或浮点型类别4(运算符):+、-、*、/、、=、、=、==、!=类别5(分隔符):,、;、(、)、{、}类别6(错误字符):其他不能识别的单词山东科技大学学生课程设计2正规式和状态转换图:b)概要设计①建立保存编译结果的类:classResult{publicintstyle;publicstringword;publicvoidinit(ints,stringw){style=s;//单词所属类别word=w;//单词}}②主程序流程:山东科技大学学生课程设计3c)详细设计(主要模块流程图及算法)①预处理模块:流程图:山东科技大学学生课程设计4算法:privatestringPretreatment(){//去除//注释for(inti=0;istr.Length;i++){if(str[i].Contains(//))//判断str[i]中是否存在“//”{//将字符串str[i]中‘/’之后内容去掉string[]strr=str[i].Split('/');str[i]=strr[0];}}山东科技大学学生课程设计5//去除换行,将所有输入字符存入一个字符串st1for(inti=0;istr.Length;i++)str1+=str[i]+;//去除跳格,回车if(str1.Contains(/v))//垂直制表符str1=str1.Replace(/v,);if(str1.Contains(/r))//换行str1=str1.Replace(/r,);if(str1.Contains(/n))//换行str1=str1.Replace(/n,);if(str1.Contains(/t))//制表符str1=str1.Replace(/t,);//去除注释while(str1.Contains(/*)&&str1.Contains(*/)){str1=str1.Remove(str1.IndexOf(/*),str1.IndexOf(*/)-str1.IndexOf(/*)+2);}//去除多余空格while(str1.Contains()){str1=str1.Replace(,);}returnstr1;}②分析编译模块:采用超前搜索方法。即,分析当前字符时,超前读入一个字符,以判断当前字符串是否结束。流程图:山东科技大学学生课程设计6主要代码:山东科技大学学生课程设计7privatevoidAnalysis_button_Click(objectsender,EventArgse){Output_textBox.Text=null;stringprogram=Pretreatment(Input_textBox.Text);inti;//循环programResult[]im=newResult[100];intx;for(x=0;x100;x++){im[x]=newResult();}intj=0;//循环imi=0;while(iprogram.Length){if(isornotchar(program[i]))//第一个是字母{intflag=1;//正确的标识符im[j].word+=Convert.ToString(program[i]);if(iprogram.Length-1){i++;while(program[i]!=''&&program[i]!='\r'&&program[i]!=','&&program[i]!=';'&&program[i]!='+'&&program[i]!='-'&&program[i]!='*'&&program[i]!='/'&&program[i]!=''&&program[i]!=''&&program[i]!='='&&program[i]!='!'&&program[i]!='('&&program[i]!=')'&&program[i]!='['&&program[i]!=']'&&program[i]!='{'&&program[i]!='}'){if(!(isornotchar(program[i]))&&!(isornotnum(program[i])))flag=0;im[j].word+=Convert.ToString(program[i]);if(iprogram.Length-1)i++;山东科技大学学生课程设计8else{i++;break;//到了程序的结束}}}else//是标志符{im[j].word=Convert.ToString(program[i]);im[j].style=2;i++;}/*******************保留字*************************/if(im[j].word==else||im[j].word==if||im[j].word==int||im[j].word==return||im[j].word==while||im[j].word==for||im[j].word==void||im[j].word==main||im[j].word==break||im[j].word==continue||im[j].word==double||im[j].word==float||im[j].word==switch||im[j].word==case||im[j].word==double||im[j].word==case||im[j].word==class||im[j].word==private||im[j].word==protected||im[j].word==public||im[j].word==defult||im[j].word==char||im[j].word==string||im[j].word==false||im[j].word==true||im[j].word==null||im[j].word==try||im[j].word==catch||im[j].word==static)im[j].style=1;elseim[j].style=1;if(flag==0)im[j].word+=program[i];j++;}elseif(isornotnum(program[i]))//第一个是数字{intlocation=0;//记录小数点的位置山东科技大学学生课程设计9charstyle='';//初始状态为整数stringword=null;word+=Convert.ToString(program[i]);if(iprogram.Length-1){i++;location++;while(isornotnum(program[i])|program[i]=='.'){location++;if(program[i]=='.'){style='.';}word+=Convert.ToString(program[i]);if(iprogram.Length-1)i++;else{i++;break;}}}else{//im[j].style=3;im[j].style=1;}if(style=='')//整数{intnum=Convert.ToInt32(word);im[j].word=num.ToString();}else//小数{//location对应点的位置//确定location的位置intn;for(n=0;nword.Length;n++)山东科技大学学生课程设计10{if(word[n]=='.')location=n;}stringleft=null;stringright=0;intm;//用于循环for(m=0;mword.Length;m++){if(mlocation)left+=word[m];elseright+=word[m];}im[j].word+=Convert.ToString('.');im[j].word+=Convert.ToInt16(left);im[j].word+=Convert.ToDouble(right)
本文标题:编译原理课程设计说明书
链接地址:https://www.777doc.com/doc-2069433 .html