您好,欢迎访问三七文档
作业要求作业一:继续完成第三周布置的作业二,该作业在第七周上机时检查。编写一个程序,对于输入的一段程序,可以获取该程序的单词符号。单词符号的类别有基本字、标识符、常数、算符和界符。关键字为基本字,由字母组成,如int、for和while;变量名和函数名为标识符,由字母和数字构成,如fun1和age;固定不变的数值为常数,如12、13.86和25e8(科学计数法);算符如+、-、*、/、%、&&;界符如{、[、(、;和:等。如,若输出源程序如下,publicstaticvoidmain(String[]args){doublesum5=0.0;for(inti=1;i5;i++){sum5=sum5+(i+10);sum5=sum5+(i*2);}}则输出如下,public基本字static基本字void基本字main标识符(界符String基本字[界符]界符args标识符)界符{界符double基本字sum5标识符=算符0.0常数;界符for基本字(界符int基本字i标识符=算符1常数;界符i标识符算符5常数;界符i标识符++算符)界符{界符sum5标识符=算符sum5标识符+算符(界符i标识符+算符10常数)界符;界符sum5标识符=算符sum5标识符+算符(界符i标识符*算符2常数)界符;界符}界符}界符提示,要想写出满足上述要求的词法分析器,需要有三个步骤。(1)了解该语言的单词符号(2)为单词符号构对应造状态转换图。状态转换图的构造可以参考课本P41(图3.2)和P43(图3.3)(3)根据状态转图的结构进行计算机实现。作业二flex是-fastlexicalanalyzergenerator的简称,即快速词法分析器。给出的“lex_实验”是一个通过flex得到的词法分析器及相关文件,该词法分析器可以统计源程序的行数及字符数。(一)目录介绍参考“lex_实验”,在完成实验后,实验目录中包括两个子目录。1、子目录flex它包含了flex.exe,flex.hlp,libfl.lib三个文件,另外还有一个例子文件example.l及该例子生成的lex.yy.c。2、子目录lex_yy这个目录是为lex.yy.c建立的一个项目(如,使用VC6)。它包含有lex.yy.c,libfl.lib(拷贝自目录flex),以及相关的项目文件。在debug子目录中是已经生成的词法分析器lex.yy.exe,利用它可以进行词法分析。(二)实验示范生成“lex_实验”的各文件的步骤如下:1、编写lex程序,如example.l文件所示2、调用flex以生成lex.yy.c,DOS命令格式:flexexample.l3、新建一个目录(如lex_yy),把lex.yy.c及libfl.lib拷贝到该目录下。4、用VC6或其它的C语言集成开发环境,打开lex.yy.c,并生成一个新项目。5、编译并链接libfl.lib,得到词法分析器debug/ley.yy.exe。6、验证词法分析器的功能:1)编写一输入文件(如lex_yy/debug/12.txt)2)调用lex.yy.exe(DOS命令格式lex.yy.exe12.txt)3)观察输出结果是否与预想的相符(实际是有点不相符的)。注意:flex.exe,flex.hlp,libfl.lib三个文件是flex工具,自带的。(三)作业要求编写一个词法分析器,它针对输入文件,实现以下功能:1)每遇到你的学号,就输出你的名字,对于其他的串原样输出。2)统计输入文件中字母的数目。例如:(以肖永跃的上机题为例):输入文件如下所示:200213001helloworldwoaitiananmenhelloworldilove200213001输出应该如下所示:肖永钦helloworldwoaitiananmenhelloworldilove肖永钦#ofchars=66该作业在第七周上机时检查。
本文标题:第五周上机作业
链接地址:https://www.777doc.com/doc-2129596 .html