资源描述:
《实验安排+词法分析程序设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验一词法分析程序设计与实现一、实验目的:加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。二、实验内容:自定义一种程序设计语言,或者选择已有的一种高级语言(C语言),编制它的词法分析程序。词法分析程序的实现可以采用任何一种编程工具。三、实验要求:1.对单词的构词规则有明确的定义;2.编写的分析程序能够正确识别源程序中的单词符号;3.识别出的单词以<种别码,值>的形式保存在符号表中;4.词法分析中源程序的
2、输入以.c格式,分析后的符号表保存在.txt文件中。5.*对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成整个源程序的词法分析;6.实验报告要求用自动机或者文法的形式对词法定义做出详细说明,说明词法分析程序的工作过程,说明错误处理的实现*。四、实验学时:6学时五、实验步骤:1.定义目标语言的可用符号表和构词规则;2.依次读入源程序符号,对源程序进行单词切分和识别,直到源程序结束;3.对正确的单词,按照它的种别以<种别码,值>的形式保存在符号表中;4.*对不正确的单词,做出错误处理
3、*。六、选作实验学生可以根据自身的情况完善词法分析程序的错误处理功能(实验要求5&6),如对错误的单词给出准确的位置和错误类型提示。七、作业提交时间第8周实验课结束后提交词法分析程序(zzwyanqiu@163.com)。八、提示1.charScanin[100],Scanout[100];//用于接收输入输出文件名FILE*fin,*fout;//用于指向输入输出文件的指针2.//下面定义保留,为简化程序,使用字符指针数组保存所有保留字。//如果想增加保留字,可继续添加,并修改保留字数目#definekeyw
4、ordSum8char*keyword[keywordSum]={"if","else","for","while","do","int","read","write"};3.//下面定义纯单分界符,如需要可添加charsingleword[50]="+-*(){};,:";4.//下面定义双分界符的首字符chardoubleword[10]="><=!";5.scanf("%s",Scanin);printf("请输入词法分析输出文件名(包括路径):");scanf("%s",Scanout);6.if((f
5、in=fopen(Scanin,"r"))==NULL)//判断输入文件名是否正确{printf("打开词法分析输入文件出错!");return(1);//输入文件出错返回错误代码1}if((fout=fopen(Scanout,"w"))==NULL)//判断输出文件名是否正确{printf("创建词法分析输出文件出错!");return(2);//输出文件出错返回错误代码2}7.ch=getc(fin);//读取文件里的一个字符8.isalpha(ch)//字母判断函数isalnum(ch)
6、)//数字判断函数strcmp(token,keyword[n])//串比较fprintf(fout,"%st%s","ID",token);//输出标识符符号到fout指定的文件strchr(singleword,ch)//声明:char*strchr(constchar*string,intc);//在字符串string中搜索字符c,若成功则返回一个指向该字符第一次出现的位置,否则返回NULL//这个例子中的变量x的值为5:charstring[]="hello";char*p;intx;p=strc
7、hr(string,'o');x=p-string+1;http://vip.6to23.com/tenax/clib/clib.html//c库函数查找地址任务1:识别小型语言所有单词的词法分析程序设计源程序设计语言G[<程序>]<程序>→<变量说明><语句表>.<变量说明>→VAR<变量表>:<类型>;
8、<空><变量表>→<变量表>,<变量>
9、<变量><类型>→INTEGER<语句表>→<语句>
10、<语句>;<语句表><语句>→<赋值语句>
11、<条件语句>
12、
13、<复合语句
14、><赋值语句>→<变量>:=<算术表达式><条件语句>→IF<关系表达式>THEN<语句>ELSE<语句>→WHILE<关系表达式>DO<语句><复合语句>→BEGIN<语句表>END<算术表达式>→<项>
15、<算术表达式>+<项>
16、<算术表达式>-<项><项>→<因式>
17、<项>*<因式>
18、<项>/<因式><因式>→<变量>
19、<整数>
20、(<算术表达式>)<关系表达式>→