编译原理词法分析器语法分析课程设计范本

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

12020年4月19日编译原理词法分析器语法分析课程设计《编译原理》课程设计院系信息科学与技术学院专业软件工程年级级学号2723姓名林苾湲西南交通大学信息科学与技术学院12月目录课程设计1词法分析器.......................................................................21.1设计题目..............................................................................21.2设计内容..............................................................................21.3设计目的..............................................................................2文档仅供参考12020年4月19日1.4设计环境..............................................................................21.5需求分析..............................................................................21.6概要设计..............................................................................21.7详细设计..............................................................................41.8编程调试..............................................................................51.9测试....................................................................................111.10结束语...............................................................................13课程设计2赋值语句的解释程序设计.............................................142.1设计题目............................................................................142.2设计内容............................................................................142.3设计目的............................................................................142.4设计环境............................................................................142.5需求分析............................................................................152.6概要设计............................................................................162.7详细设计............................................................................162.8编程调试............................................................................242.9测试....................................................................................242.10结束语...............................................................................25文档仅供参考22020年4月19日课程设计一词法分析器设计一、设计题目手工设计c语言的词法分析器(能够是c语言的子集)。二、设计内容处理c语言源程序,过滤掉无用符号,判断源程序中单词的合法性,并分解出正确的单词,以二元组形式存放在文件中。三、设计目的了解高级语言单词的分类,了解状态图以及如何表示并识别单词规则,掌握状态图到识别程序的编程。四、设计环境该课程设计包括的硬件和软件条件如下:4.1.硬件(1)IntelCoreDuoCPUP8700(2)内存4G4.2.软件文档仅供参考32020年4月19日(1)Window732位操作系统(2)MicrosoftVisualStudioc#开发平台4.3.编程语言C#语言五、需求分析5.1.源程序的预处理:源程序中,存在许多编辑用的符号,她们对程序逻辑功能无任何影响。例如:回车,换行,多余空白符,注释行等。在词法分析之前,首先要先剔除掉这些符号,使得词法分析更为简单。5.2.单词符号的识别并判断单词的合法性:将每个单词符号进行不同类别的划分。单词符号能够划分成5中。(1)标识符:用户自己定义的名字,常量名,变量名和过程名。(2)常数:各种类型的常数。(3)保留字(关键字):如if、else、while、int、float等。(4)运算符:如+、-、*、、、=等。(5)界符:如逗号、分号、括号等。5.3.将所有合法的单词符号转化为便于计算机处理的二元组形式:(单词分类号,单词自身值);以图形化界面显示出来。5.4.可选择性地将结果保存到文件中。六、概要设计6.1.数据类型文档仅供参考42020年4月19日6.1.1.单词的分类:本词法分析器演示的是C语言的一个子集,故字符集如下:(1)标识符:以字母开头的字母数字串。(2)整数或浮点型(3)保留字:auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,if,int,long,register,return,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile,while(4)运算符:+、-、*、/、%、、、=、!=、==、=、=、++、--、!、&、&&、||;(5)界符:[]{}():;‘“#,6.1.2.单词二元组:(单词分类号,单词自身值)表6.1单词分类表单词分类号标识符1常数2保留字3界符4运算符56.2.词法分析器的结构源程序输入缓冲区预处理子程序扫描缓冲区1扫描缓冲区2词法分析子程序调用数据返回—单词文档仅供参考52020年4月19日图6.1词法分析器的结构6.3.部分单词的正规式与状态转换图图6.2部分单词的状态转换图6.4.功能模块表6.2词法分析器的C#程序过程或函数功能表过程或函数名简要功能说明GetTokens()分析源程序得到单个单词并大致区分其类型,并生成二元组GetInput(stringget)输入源程序NoWs(stringaCopy,intcp)去除源程序中的空格符GetTokenType最终确定标识符和保留字OutPut输出二元组到指定的.txt文件中GetResult输出二元组七、详细设计7.1.总体流程图文档仅供参考62020年4月19日图7.1程序总体流程图7.2.主要分支选择算法介绍7.2.1case0情况算法开始输入C语言源程序初始化source逐个遍历字符,并去除空格符State为0进入switch分支循环判断根据state的值选择适当的处理调用相关函数输出处理结果开始文档仅供参考72020年4月19日图7.2部分分支流程图八、编程调试8.1主要源代码//逻辑操作类与函数usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.IO;开始State为0进入case0是否为界符前一个字符和单词最开始的字符是否为数字对应为哪种界符编码输出结果State置0编号截取该数值输出结果是否为单目运算符是否为数字是否为字母State=10标记该位置为数字开始处State=11记该处为字符开始处State对应更改进入对应选择分支词法出错输出错误原因以及行列结束是是是是是否否否否否文档仅供参考82020年4月19日namespaceTokenAnalysis{structTokenNode{publicstringtype;publicstringtoken;}classTokenAnalysis{intcPosition=0;intlPosition=0;intignorWs=0;intrecordWs=1;FileInfooutput;stringsource;string[]kwList={auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,if,int,long,register,return,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile,while,printf,scanf,end,main};intError=-2;intNormal=-1;intstatue=-1;boolisComment=false;文档仅供参考92020年4月19日ListTokenNoderesultTokenNodes=newListTokenNode();publicListTokenNodeGetTokens(){TokenNodenode2Add=newTokenNode();intcp=0;//currentpositionintlp=0;//lastpositionstringaCopy=source;intlength=aCopy.Length;aCopy=aCopy.Trim();while(cpaCopy.Length){//IDorKeyWordsnode2Add=this.GetToken(ignorWs,aCopy,refcp,reflp);if(node2Add.type==cmtLeft){isComment=true;}if(node2Add.type==cmtRight){isComment=false;}if(!isComment&&node2Add.type!=cmtRight){resultTokenNodes.Add(node2Add);}文档仅供参考102020年4月19日}returnresultTokenNodes;}publicTokenNodeGetToken(){if(cPositionsource.Length){TokenNodetoken=this.GetToken(ignorWs,source,refcPosition,reflPosition);returntoken;}else{TokenNodetok

1 / 55
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功