燕大编译原理实验词法分析

燕大编译原理实验词法分析

ID:13321872

大小:43.00 KB

页数:7页

时间:2018-07-22

燕大编译原理实验词法分析_第1页
燕大编译原理实验词法分析_第2页
燕大编译原理实验词法分析_第3页
燕大编译原理实验词法分析_第4页
燕大编译原理实验词法分析_第5页
资源描述:

《燕大编译原理实验词法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include#include#includeusingnamespacestd;#definekeyword_num13#definedelimiter_num5#definewords_num200#definestr_num10//变量定义charstr[str_num];//str用于存放接收的单词charwords[words_num][str_num];inti=0,n=-1,j=1,k;//i作str的下标,n作数组words行的下标intline_num

2、=1;charc;char*keyword[keyword_num]={"begin","call","const","do","end","if","odd","procedure","read","then","var","while","write"};//关键字13个按照顺序排列便于折半查找chardelimiter[delimiter_num]={'(',')',';','.',','};//分界符5个FILE*fout;//存放分词结果的文件ifstreamfin;strings;intmain(){printf

3、("输入文件名:");cin>>s;fin.open(s.c_str());while(!fin.is_open()){printf("文件不存在,请重新输入:");fin.clear();cin>>s;fin.open(s.c_str());}printf("行(类别单词)");//打开文件“分析结果.txt”,将分词结果写到该文件中fout=fopen("分析结果.txt","w");fprintf(fout,"行(类别单词)");if(!fin.eof())c=fin.get();while(1){//忽略回车

4、、tab键和空格,且当是回车时,行号加1while(c==10

5、

6、c==9

7、

8、c==''){if(c==10)++line_num;if(!fin.eof())c=fin.get();}j=1;if(fin.eof())break;//关键字或标识符的接收,以字母或下划线开头if(c>='a'&&c<='z'

9、

10、c>='A'&&c<='Z'

11、

12、c=='_'){str[0]=c;while(1){if(!fin.eof())c=fin.get();//第二个字符接收字母或数字或下划线if(c>='a'&&c<='z'

13、

14、c>=

15、'A'&&c<='Z'

16、

17、c>='0'&&c<='9'

18、

19、c=='_')str[++i]=c;elsebreak;}strcpy(words[++n],str);//将分离的词放入word中//折半查找关键字inta=0;intb=keyword_num-1;do{k=(a+b)/2;if(strcmp(str,keyword[k])<=0){b=k-1;}if(strcmp(str,keyword[k])>=0){a=k+1;}}while(a<=b);if(a-1>b){//输出关键字,以行号,二元组(类型,单词)格式p

20、rintf("%-5d(关键字,%-10s)",line_num,str);fprintf(fout,"%-5d(关键字,%-10s)",line_num,str);}else{//输出标识符printf("%-5d(标识符,%-10s)",line_num,str);fprintf(fout,"%-5d(标识符,%-10s)",line_num,str);}for(;i>=0;i--)str[i]='';i=0;}//常数接收,以数字或负号开头elseif('0'<=c&&c<='9'

21、

22、c=='-'

23、

24、

25、c=='.'){intflag=0;str[0]=c;while(1){if(!fin.eof())c=fin.get();//接收数字或小数点if('0'<=c&&c<='9'

26、

27、c=='.'){str[++i]=c;flag=0;}//取到以数字开头的字符串以出错处理elseif(str[0]!='-'&&(c>='a'&&c<='z'

28、

29、c>='A'&&c<='Z'

30、

31、c=='_')){str[++i]=c;flag=1;}elseif(str[0]=='-'&&c=='-'){j=0;flag=2;break;}e

32、lseif(str[0]!='-'&&c=='-'){j=0;flag=2;break;}elseif(str[0]=='-'&&(c>='a'&&c<='z'

33、

34、c>='A'&&c<='Z')){j=0;flag=2;break;}elseif(str[0]=='.'&&('0'>=c

35、

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

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

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