资源描述:
《编译原理实验一.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验内容:实现标准C语言词法分析器实验目的:1.掌握程序设计语言词法分析的设计方法;2.掌握DFA的设计与使用方法;3.掌握正规式到有限自动机的构造方法;实验要求:1.单词种别编码要求基本字(关键字)、运算符、界符:一符一种;标识符(变量名):统一为一种;常量():按类型编码;2.词法分析工作过程中建立符号表、常量表,并以文本文件形式输出;3.词法分析的最后结果以文本文件形式输出;4.完成对所设计词法分析器的功能测试,并给出测试数据和实验结果;5.为增加程序可读性,请在程序中进行适当注释说明;6.整理上机步骤,总结经验和体会;7.认真完成并按时提
2、交实验报告。二、设计方案:这个词法分析器分析的主要关键字有:main,int,float,char,if,else,for,while,do,switch,case,break;default……。选择要分析的c文件,首先对其去掉注释和与空格处理,再根据字符的不同类型分析。1、全局数据结构:*key[]:关键字表全局文件指针*fr,*fw,*temp1,*temp2用于文件的读写。2、以层次图模块的组成及调用关系Main()check()isLet()clock()isBoudany()isKey()isNum()3、主要函数的设计要求(功能、参
3、数、返回值):isKey:判断ch中的字符是否为关键字;isLer和isNum:布尔函数过程,分别判断ch中的字符是否为字母和数字;isBoudany():布尔函数过程,分别判断ch组成的字符否为边界符号;check:词法分析;clock:时间函数,计算程序运行所需的时间main:主函数。4、状态转换图:61字母或数字字母非字母或数字702数字数字非数字83字符a字符a94字符b‘=’5字符c字符a包括:=,&,
4、,+,--字符b包括:--,<,>,
5、,*字符c包括:,,:,(,),{,},[,],!,#,%,”,/,*,+,--,>,<,.#i
6、nclude#include#include#include#includeFILE*fr,*fw,*temp1,*temp2;char*key0[]={"main","printf","scanf","else","if","auto","double","int","struct","break","long","switch","case","enum","register","typedef","char","extern","return","u
7、nion","const","float","short","unsigned","continue","for","signed","void","default","goto","sizeof","volatile","do","while","static"};/*关键字表*/char*key1[]={""","\","(",")","[","]","{","}",",",";","'"};/*边界符表*/intisLet(charc)//判断是否是字母{if(c>='a'&&c<='z'
8、
9、c>='A'&&c<='Z')return1
10、;elsereturn0;}intisNum(charc)//判断是否是数字{if(c>='0'&&c<='9')return1;elsereturn0;}intisKey(char*word){intm,i;for(i=0;i<36;i++){if((m=strcmp(word,key0[i]))==0){if(i==0)return2;elsereturn1;}}return0;}intisBoudany(charc){if(c=='\')return2;elseif(c=='('
11、
12、c==')'
13、
14、c=='{'
15、
16、c=='}'
17、
18、c=='
19、['
20、
21、c==']'
22、
23、c==','
24、
25、c==';'
26、
27、c=='''
28、
29、c=='"'
30、
31、c=='"')return1;elsereturn0;}voidcheck(FILE*fr){charword[30];while(!feof(fr)){memset(word,0,sizeof(word));charch,temp;ch=fgetc(fr);//获取字符,指针fr并自动指向下一个字符inti,c;if(ch=='#')//预处理{//temp=fgetc(fr);while(ch!='>')ch=fgetc(fr);ch=fgetc(f
32、r);fprintf(fw,"*****************************************跳过头文件和文件宏定义