资源描述:
《词法分析实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理实验名称:词法分析器班级:计科0705姓名:郑磊学号:040711752010年4月29日词法分析器一.实验目的要求用C语言编写一个词法分析器,使之能识别输入串,并把分析结果(单词符号,标识符,关键字等等)输出。输入源程序,输出单词符号,本词法分析器可以辨别关键字,标识符,常数,运算符号,逻辑符号和某些界符,运用了文件读入来获取源程序代码,再对该源程序代码进行词法分析,逐个识别出其中的单词,并将其转换为内部编码形式的单词符号串作确为输出。通常,可采用二元式(value,class)来表示一个单词符号的内部编码,其中:class为一类型
2、码,用于表示该单词的类别;value则是该单词之值。二.单词分类表将单词分为五类:1.:保留字2:标识符3:数字符4:运算符5:界符1.对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。2.本程序我们自行规定(即单词分类表):(1)关键字:"auto","double","union","int","struct","break","else","long","switch","case","enum","register","t
3、ypedef","char","extern","return","const","float","short","unsigned","continue","for","signed","void","default","goto","sizeof","volatile","do","while","static","if"};运算符:"+","-","*","/","="界符:",",";","{","}","(",")","[","]",".","#"(4)其他标记如字符串,表示以字母开头的标识符。(5)空格、回车、换行符过滤。在屏幕上
4、显示如下:=>1保留字=>2标识符=>3数字符=>4运算符=>5界符三.单词状态图标识符不存在时存入空白字母或数字OO字母保留字已存在开始O数字数字非数字字母小数点小数点报错O数字O小数点数字非数字字母小数点O=号字母报错字母报错OOO=号非=号(*/状态与=相同)=号OO+号非+号=号/号O(-状态与+相同)O,等界符+号*号*号/号OOO/号非/或*非/号非t,n,r,fOO号t或n或r或f(号O(号计数匹配O)号)号计数不匹配出错(中括号大括号状态与小括号相同)O四.算法描述由主程序main()先调入index()函数进入主界面,用户
5、根据提示输入要进行词法分析的文件,然后进入analysis()函数调入用户输入的文件进行分析。当所读入的文件不为空时开始分析,1:进行注释判断,将注释消除2:过滤空格及判断出的注释符3:判断标识符和保留字4:判断数字5:判断运算符和界符(同时进行括号匹配)6:在各部分中增加相对的错误提示7:将结果输出到界面以及相应的out.txt。五.程序结构#defineBaoliuzi1#defineBiaoshifu2#defineShuzifu3#defineYunsuanfu4#defineJiefu5intmain()intanalysis()/
6、*用来实现:读写文件,判断注释,对空格进行过滤,判断注释符,判断标识符和保留字,判断是数字,判断是运算符或者是界符,判断括号匹配。*/intletterjudge(charch)//判断一个字符是否是字母intnumberjudge(charch)//判断一个字符是否是数字六.运行调试结果通过运行调试,初步实现所需功能,报错功能仍有较大空间提高七.个人在词法分析器中的任务我在里面负责判断标识符,保留字,数字。intletterjudge(charch);intnumberjudge(charch);并且参与程序整体的维护和构架,以及几大模块之
7、间的衔接。在标识符和保留字中,充分利用文件的一些操作和程序。在数字判断方面考虑到数字的类型,分类进行处理,最后的判断输出到文件out.txt中。八.设计技巧及体会进行词法分析器之前,现在网上参考了一些分析器的设计思路,从而确定了自己的设计方向,开始设计完成后仅仅是不到二百行的一个简易程序,通过观察老师检查别的设计小组时提出的问题,发现自己的程序仍存在很大的缺陷,例如:没有报错,无法消除注释和注释符,相同的标识符在输出文件中重复出现。通过全组人员不断的修改调试以及运行结果检测,程序的应用性有了很大的提高。通过这次程序设计,加强了我与人配合共同完
8、成一个程序的合作经验,并且更加清楚明白了许多程序设计时需要注意到的细节问题,熟悉了程序语言及构造词法分析器的原理,总之,这次试验让我受益匪浅。(注:源程序清单请见电