资源描述:
《词法分析程序构造原理与实现技术实验报告文档.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、龙境久遽尤爭词法分析程序构造原理与实现技术实验报告变更说明日期版本变更位置变更说明作者2014/4/91.0初稿生成房皓2014/4/91.0兀書截稿房皓一、实验目的:本实验的目的在于在教师的引导下以问题回朔与思维启发的方式,使学生在不断的探究过程中掌握编译程序设计和构造的基本原理和实现技术,启迪学生的抽象思维、激发学生的学习兴趣、培养学生的探究精神和专业素养,从而提高学生发现问题、分析问题和解决问题的能力。二、实验内容:[实验项日]完成以下正则文法所描述的Pascal语言子集单词符号的词法分析程序。<标识符〉一字母丨〈标识符〉字母丨<标识符〉数字
2、〈无符号整数〉一数字丨<无符号整数〉数字〈单字符分界符〉I-I*I;I(I)〈双字符分界符>-<大于〉二I〈小于>二I〈小于>>I〈冒号>二I〈斜竖>*〈小于〈〈等于>->二〈大于〉->><冒号〉一:〈斜竖〉->/该语言的保留字:beginendifthenelsefordowhi1eandornot[设计说明](1)该语言大小写不敏感;(2)字母为竝-zA-乙数字为0-9;(3)可以对上述文法进行扩充和改造;(4)'/*……*/'为程序的注释部分。[设计要求](1)给出各单词符号的类别编码;(2)词法分析程序应能发现输入串中的错误;(3)词法分析
3、作为单独一遍编写,词法分析结果为二元式序列组成的中间文件;(4)设计两个测试用例(尽可能完备),并给出测试结果。操作系统:Windows7软件:VC++6.0四、程序功能描述:•给出了各单词符号的类别编码;•词法分析程序能够对给出的文件中的输入串做出正确的词法;•词法分析程序能发现文件输入串中的错误;•词法分析结果为二元式序列组成的中间文件;•词法分析程序能兼容注释并能发现文件注释未关闭的错误五、数据结构设计:charT0KEN[20J;FILE*fp_out=Fopen(,"result.txt1-/'w**);charch;inti=O,c;i
4、ntzhushi=O;ch=Fgetc(Fp);六、程序结构描述:•设计方法:本程序采用从文件读取字符串,根据己有文法、词法的构成及规定对字符串进行词法分析,其种类主要包括保留字、标识符、无符号数字、字符等,将分析的结果写入另一个文件。程序规定的单词符号及其种别码见下表:单词符号及其种别码表单词符号种别码单词符号种别码begin1无符号整数13end2+14If3-15then4*16else5■17for6(18do7)19while8=20and9>21or10>=22not11<23标识符12<=24<>25■•26/27/*28*/29•主
5、要函数说明:-cffxclasses口臼GlobalsQlookupfchar*str)QmainQQscanner(FILE*fp)lookupO:每调用一次,就以TOKEN中的字符串查保留字表,若查到,就将相应关键字的类别码赋给整型变量c;否则将c置为0;main():主函数;scanner():扫描函数,完成程序的主要功能,包括读字符串、分析处理、分析处理等。•函数调用关系说明:main()函数调用scanner()函数;scanner()函数调用lookupO函数。•执行框图:1)总体结构图:2)扫描程序结构框图:it文件七、实验过程结果截
6、图:测试用例一:(12,(2&.丁input.txt-记事本殳牛(F)编辑(E]梧式(匝查看M秒助(H)asdf1234a4<><>(?#*//*dfakldfj*/3=dfa结果一:result.txt-记事本文件(F)桶(E)梧式(O)M(V)耕助(H)asdf)(13,1234)(12,a)(13,4)(23,<)(21,»(25,<»(18,0(17,;)(非法字符,#)(16,*)(27,/)/*)(注釋结束,*/)(22Q二)(12,dfa)•测试用例二:结果二■result.txt-记事本-文件(F)翱(E)t6xC(O)查看(V)琶
7、助(H)(13,123)(13,2)(12,asdf)(12,w)(17,;)(13,678)(1&0(12,dfer)(19,))(3,if)(4,then)(2&/*)(程序有错误,注释没有关闭!)八、实验总结:•实验心得:通过本次实验我锻炼了自己的上机操作能力及编程能力,并对理论知识有了进一步的了解。本实验基木思路比较清晰,用较为简单的算法就能实现;解决实验中遇到的问题也花费了一部分时间,我增长了处理关于文件错误的能力;•实验中遇到的问题:主要问题就是在读取文件时对文件末尾的判断预处理,有两个问题花费了大部分时间,一个是在回退时要判断是否为文
8、件末尾,若是则不需要回退;另外一个就是要先读取一个字符再用feof(fp)來判断是否为文件尾,且两个应紧密相连;•程序的自