编译原理实验一.doc

编译原理实验一.doc

ID:52223976

大小:207.00 KB

页数:24页

时间:2020-03-25

编译原理实验一.doc_第1页
编译原理实验一.doc_第2页
编译原理实验一.doc_第3页
编译原理实验一.doc_第4页
编译原理实验一.doc_第5页
资源描述:

《编译原理实验一.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,"*****************************************跳过头文件和文件宏定义

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。