如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
编译技术上机实验题目实验一一、题目编制C语言子集的词法分析程序二、目的通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。三、要求1.根据具体情况,由同学们自己选取C语言的一个适当大小的子集(可取一类典型单词,也可以尽可能使各种类型的单词都兼顾到),如课本表2.1;在上机前一定要制出相应的表。2.程序功能输入:字符串。输出:二元式(种别编码,单词自身)构成的序列。举例:输入:a=$;#输出:(6,a)(12,=)FOUNDERROR(13,;)#include<iostream>#include<string>usingnamespacestd;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;}boolisLetter(charc)//是否为字母{if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))returntrue;elsereturnfalse;}boolisDigit(charc)//是否为数字{if(c>='0'&&c<='9')returntrue;elsereturnfalse;}voidanalyse(FILE*fileP){intn;charc;stringstr="";while((c=fgetc(fileP))!=EOF){if(c==''||c=='\n'||c=='\t')continue;elseif(isDigit(c))//数字{while(isDigit(c)){str+=c;c=fgetc(fileP);}fseek(fileP,-1,SEEK_CUR);cout<<"(11,"<<str<<")"<<endl;str="";}elseif(isLetter(c))//字母开头的{while(isDigit(c)||isLetter(c)){str+=c;c=fgetc(fileP);}fseek(fileP,-1,SEEK_CUR);if(isKey(str,n))cout<<"("<<n<<","<<str<<")"<<endl;//关键码elsecout<<"(10,"<<"\'"<<str<<"\'"<<")"<<endl;//标志符str="";}else//操作符等{switch(c){case'+':cout<<"(13,+)"<<endl;break;case'-':cout<<"(14,-)"<<endl;break;case'*':cout<<"(15,*)"<<endl;break;case'/':cout<<"(16,/)"<<endl;break;case':':{if(c=fgetc(fileP)=='=')cout<<"(18,:=)"<<endl;else{cout<<"(17,编译技术上机实验题目实验一一、题目编制C语言子集的词法分析程序二、目的通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。三、要求1.根据具体情况,由同学们自己选取C语言的一个适当大小的子集(可取一类典型单词,也可以尽可能使各种类型的单词都兼顾到),如课本表2.1;在上机前一定要制出相应的表。2.程序功能输入:字符串。输出:二元式(种别编码,单词自身)构成的序列。举例:输入:a=$;#输出:(6,a)(12,=)FOUNDERROR(13,;)#include<iostream>#include<string>usingnamespacestd;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;}boolisLetter(charc)//是否为字母{if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))returntrue;elsereturnfalse;}b