欢迎来到天天文库
浏览记录
ID:43601923
大小:953.08 KB
页数:17页
时间:2019-10-11
《【精品】编译实习-词法分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实习—-三四五六七八九十总评教师签名成绩《编译原理》课程实习报告编号:实习题冃:词法分析器专业(班):学生学号:学生姓名:任课教师:2010年12月29日1•问题定义和分析1.1实习口的1.2实习要求1.3要求分析2.程序设计2.1.数据结构2.2.算法及程序流程图2.3.界面程序运行实例3.1实例13.2实例23.3实例33.4实例43.5非合法词法输入4.部分程序核心源代码5•总结1•问题定义与分析1.1实习目的构造一个小语言的词法分析程序。1.2实习耍求(1)设计一个包含简单算术表达式、赋值语句、IF语句的小语言的文法。(2)
2、根据此文法,构造一词法分析程序。输入以“#”为结束符的源程序,输岀为各类单词表和单词串文件。(3)源程序和输出的单词串均以文件的形式存放。单词的口身值均为其对应的表的指针,如标识符表的指针、常数表的指针等。(4)提交:实习报告、程序运行结果。1.3要求分析1.3.1输入部分输入为文法源程序,定义CString类型变量m_EnterString,川于获取编辑框1的输入,将H转换为char类型的数纟H.,用s保研,RPchar*s=m_EnterString.GetBuffer(),再将s中的内容以文件形式保存于D盘test.Dd中,即
3、:ofstreamoutfile;intx=0;outfile.open("D:\test.txt");while(s[x]!='#'){outfile«s[x];x++;}outfile«s[x];outfilc.closcO;到此,以将输入的内容保存到D:\test.txtol.3.2输出部分输出为字符串与其的对应的种别码,对于不能识别的符号,输出为wrongsymbolo定义CString类型变量m_OutputString,用于输出词法分析结果到编辑框2,用如下函数给m.OutputString添加输出内容,如下即为当所
4、识别的内容为关键字begin时将begin与其种别码添入的代码:m_OutputString.Insert(m_OutputString.GetLength(),arr.c_str());m_OutputString.Insert(m_OutputString.GetLength(),Hlrn);1.3.3待分析的简单的词法(1)关键字:beginendifthenelsewhiledointchar(2)标识符和数字(3)运算符+*/=:=<<=«<>>>=»(4)界限符{}[1();,(5)结束符#1.3.4各种单词符号对
5、应的类别码单词符号类别码单词符号类别码begin1V18end2<=19if3«20then4<>21else5>22while6>=23do7»24int8(25char9)26标识符10{27常数11}28+12I29-13■30*1431/15[32=16]33■•—17#02.设计2.1数据结构定义了以下字符串类型数据:CStringm_EnterString:用于接受编辑框1输入的源程序CStringm_OutputString;:用于保存输出到编辑框2的内容,即单词符号与其对应的类别码char*s=m_EnterStri
6、ng.GetBuffer():用于将输入的Cstring类型转换为字符数组类型,以存入文件屮ofstreamoutfile:用于将源程序写入文件FILE*fpin:用于读取文件内容,即源程序界面数据结构:IDC_STATIC1(Group-boxControl)放输入框的框IDC_STATIC2(Group-boxControl)放输出框的框IDC_EDIT1(EditControl)IDC_EDIT2(EditControl)IDOK(ButtonControl)IDCANCEL(ButtonControl)输入编辑框输出编辑框确
7、定按钮取消按钮界面如下图所示:2.2.算法及程序流程图2.2.1算法设计:算法的基本任务是从字符串表示的源程序中识别出具有独立意思的单词符号,无独立意义的字符视为错误字符,基本思想是根据扫描到单词符号的第一个字符的各类,拉出相应的单词符号,根据字符与类别码对应表,找到相应的类别码并输出,具体见流程图。2.2.1程序流程图如下:2.3.界面3.程序运行实例3.1实例13.2实例21I+In二一n=begintls:^3.3实例3输入:(以#结束)输出:begininti=0;intj=3;intk⑸;do{k[i]:=j;}while
8、(i<=j);end#K27k10[33j10]34•■17•J10■9}3128while6(25i10<=19二j10)26•fend3120确定取消3.4实例4血词法分一计科六班段勇输入:(以#结束)输出:beginintk=1
此文档下载收益归作者所有