欢迎来到天天文库
浏览记录
ID:22506322
大小:31.84 KB
页数:16页
时间:2018-10-29
《编译原理上机实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译技术上机实验题目实验一一、题目编制C语言子集的词法分析程序二、目的通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。三、要求1.根据具体情况,由同学们自己选取C语言的一个适当大小的子集(可取一类典型单词,也可以尽可能使各种类型的单词都兼顾到),如课本表2.1;在上机前一定要制出相应的表。2.程序功能输入:字符串。输出:二元式(种别编码,单词自身)构成的序列。举例:输入:a=$;#输出:(6,a) (12,=) FOUNDERROR (13,;)#include2、ream>#includeusingnamespacestd;stringkey[6]={"begin","if","then","while","do","end"};//关键字boolisKey(stringstr,int&syn)//判断是否为关键字,若是传回相应关键码的种别名{ inti; for(i=0;i<6;i++) { if(str==key) { syn=i+1; returntrue; } } returnfalse;}boolisLe3、tter(charc)//是否为字母 { if((c>='A'&&c<='Z')4、5、(c>='a'&&c<='z')) returntrue; else returnfalse; }boolisDigit(charc)//是否为数字{ if(c>='0'&&c<='9') returntrue; else returnfalse;}voidanalyse(FILE*fileP){ intn; charc; stringstr=""; while((c=fgetc(fileP))!=E6、OF) { if(c==''7、8、c==''9、10、c=='t') continue; elseif(isDigit(c))//数字 { while(isDigit(c)) { str+=c; c=fgetc(fileP); } fseek(fileP,-1,SEEK_CUR); cout<<"(11,"<11、 str=""; } elseif(isLetter(c))//字母开头的 { while(isDigit(c)12、13、isLetter(c)) { str+=c; c=fgetc(fileP); } fseek(fileP,-1,SEEK_CUR); if(isKey(str,n)) cout<<"("<14、15、t<<"(14,-)"<
2、ream>#includeusingnamespacestd;stringkey[6]={"begin","if","then","while","do","end"};//关键字boolisKey(stringstr,int&syn)//判断是否为关键字,若是传回相应关键码的种别名{ inti; for(i=0;i<6;i++) { if(str==key) { syn=i+1; returntrue; } } returnfalse;}boolisLe
3、tter(charc)//是否为字母 { if((c>='A'&&c<='Z')
4、
5、(c>='a'&&c<='z')) returntrue; else returnfalse; }boolisDigit(charc)//是否为数字{ if(c>='0'&&c<='9') returntrue; else returnfalse;}voidanalyse(FILE*fileP){ intn; charc; stringstr=""; while((c=fgetc(fileP))!=E
6、OF) { if(c==''
7、
8、c==''
9、
10、c=='t') continue; elseif(isDigit(c))//数字 { while(isDigit(c)) { str+=c; c=fgetc(fileP); } fseek(fileP,-1,SEEK_CUR); cout<<"(11,"<11、 str=""; } elseif(isLetter(c))//字母开头的 { while(isDigit(c)12、13、isLetter(c)) { str+=c; c=fgetc(fileP); } fseek(fileP,-1,SEEK_CUR); if(isKey(str,n)) cout<<"("<14、15、t<<"(14,-)"<
11、 str=""; } elseif(isLetter(c))//字母开头的 { while(isDigit(c)
12、
13、isLetter(c)) { str+=c; c=fgetc(fileP); } fseek(fileP,-1,SEEK_CUR); if(isKey(str,n)) cout<<"("<14、15、t<<"(14,-)"<
14、15、t<<"(14,-)"<
15、t<<"(14,-)"<
此文档下载收益归作者所有