⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4-28(2).txt

📁 本学期做过的编译原理实验的一个词法分析器
💻 TXT
📖 第 1 页 / 共 2 页
字号:
									 continue;
							   }
							   if( swap[p]>=48&&swap[p]<=57 )           //数字
							   {
								    //j = 0;
								   // while(swap[p]>=48&&swap[p]<=57)    
								//	 {
									//	 a[k][j++] = swap[p++];
									//}
									//a[k][j] = '\0';
									for(p=0;swap[p]!=';'&&swap[p]!=')'&&swap[p]!=']'&&swap[p]!='\0';p++)      
									for(j = 0;j < 39;j++)
										 {   
											  if( fu[j][0]!=swap[p] )      a[k][p] = swap[p];
											  else   goto r; 
										 }
r:	                             	a[k][p]='\0';
									j=0;
									while(swap[p]!='\0')    swap[j++] = swap[p++];
									swap[j] = '\0';
									for(p=0;a[k][p]!='\0';p++)
									{
									      if(a[k][p]=='.'||a[k][p]=='e'||a[k][p]=='E')       //实型 
										  {
											   strcpy(b[k],"0x108");  
											   break;
										  }
                                          else
										  {
								 			   strcpy(b[k],"0x107");      //整型
											   continue;
										  }
									}
									k++;
									rot++;
									p = 0;
									if( swap[0]=='\0' )    goto yes;
									continue;
							   }
							   if( swap[p]==';'||swap[p]==',' )
							   {
								    a[k][0] = swap[p];      a[k][1] = '\0'; 
								    if(swap[p]==';')        strcpy(b[k],"0x122");  
									else if(swap[p]==',')   strcpy(b[k],"0x120"); 
									j=0;
								    p++;
									while(swap[p]!='\0')    swap[j++] = swap[p++];
									swap[j] = '\0';
									p = 0;
									k++;
									rot++;
									if( swap[0]=='\0' )    goto yes;
									continue;
										 
							   }
							   if((swap[p] >=97&&swap[p]<=122)||(swap[p]>=65&&swap[p]<=90)||swap[p]=='$'||swap[p]=='_')
							   {
                                      while((swap[p] >=97&&swap[p]<=122)||(swap[p]>=65&&swap[p]<=90)||swap[p]=='$'||swap[p]=='_')
									  {
							                 a[k][p] = swap[p];                   //标志符
					                         p++;
									  }
						              a[k][p] = '\0';
									  if( strcmp(a[k],"true")==0||strcmp(a[k],"false")==0 )
							              strcpy(b[k],"0x105");                 //布尔型
						              else  strcpy( b[k],"0x104");
									  k++;
									  rot++;
						              j=0;
						              while(swap[p]!='\0')    swap[j++] = swap[p++];
						              swap[j] = '\0';
						              p = 0;
									  if( swap[0]=='\0' )    goto yes;
									  continue;
							   }
							   if( swap[p]=='{'||swap[p]=='}' ) 
							   {
					                  a[k][0] = swap[p];  a[k][1] = '\0'; 
				                      strcpy(b[k],"0x121"); 	
					                  j=0;
					                  p++;
						              while(swap[p]!='\0')    swap[j++] = swap[p++];
						              swap[j] = '\0';
						              p = 0;
					                  k++;
						              rot++;
						              p++;
							   }
							   for(m = 0;m < 50;m++)
							   {
					            	if( strcmp(swap,imp[m])==0 )             //找到关键字
									{
								        strcpy( b[k],"0x103" );
								        strcpy( a[k],swap );
								        flag = 0;
								        k++;
										rot++;
										i++;
										goto yes;
									}
							   }
						}
				  //}    
				  if( (swap[p]<=48 || swap[p]>=57)&&(swap[p] <=97||swap[p]>=122)&&(swap[p]<=65||swap[p]>=90)&&swap[p]!=' '&&swap[p]!='\0') //不是数字,字母和空格
				  {   
						  for( n = 0; n < 39;n++ )           //找单独的运算符  
						  {
							    if( strcmp(swap,fu[n])==0 )   { flag =3;  break;  }
					        	else   n++;
						  }
				          if(   flag==3 )
						  {
							  strcpy(a[k],swap);
				              if (strcmp(a[k],"=")==0 )          { strcpy(b[k],"0x110"); 	k++; rot++;} 
							  else if ( strcmp(a[k],"+=")==0 )   { strcpy(b[k],"0x110");  	k++; rot++;}
				              else if (strcmp(a[k],"-=")==0)     { strcpy(b[k],"0x110");	k++; rot++;}
				              else if (strcmp(a[k],"*=")==0 )    { strcpy(b[k],"0x110");	k++; rot++;}
				              else if (strcmp(a[k],"/=")==0 )    { strcpy(b[k],"0x110");    k++; rot++;}
							  else if (strcmp(a[k],"%=")==0 )    { strcpy(b[k],"0x110");	k++; rot++;}
				              else if (strcmp(a[k],"&=")==0 )    { strcpy(b[k],"0x110");	k++; rot++;}
							  else if (strcmp(a[k],"^=")==0 )    { strcpy(b[k],"0x110");    k++; rot++;}
							  else if (strcmp(a[k],"|=")==0 )    { strcpy(b[k],"0x110");    k++; rot++;}
				              else if (strcmp(a[k],">>=")==0 )   { strcpy(b[k],"0x110");	k++; rot++;}
				              else if (strcmp(a[k],"<<=")==0 )   { strcpy(b[k],"0x110");	k++; rot++;}
				              else if (strcmp(a[k],">>>=")==0)   {strcpy(b[k],"0x110");	    k++; rot++;}
				              else if (strcmp(a[k],"?:")==0 )    {strcpy(b[k],"0x111");	    k++; rot++;}
				              else if (strcmp(a[k],"||")==0 )    {strcpy(b[k],"0x112");	k++; rot++;}
				              else if (strcmp(a[k],"|")==0 )     {strcpy(b[k],"0x114");	k++; rot++;}
				              else if (strcmp(a[k],"^")==0 )     {strcpy(b[k],"0x115");	k++; rot++;}
				              else if (strcmp(a[k],"&")==0 )     {strcpy(b[k],"0x116");	k++; rot++;}
				              else if (strcmp(a[k],"==")==0||strcmp(a[k],"!=")==0 )  { strcpy(b[k],"0x117");	k++;  rot++;}
				              else if (strcmp(a[k],"<")==0||strcmp(a[k],">")==0||strcmp(a[k],"<=")==0||strcmp(a[k],">=")==0 )   {strcpy(b[k],"0x118");	k++;  rot++;}
				              else if (strcmp(a[k],"<<")==0||strcmp(a[k],">>")==0||strcmp(a[k],">>>")==0 )  { strcpy(b[k],"0x119");	k++;  rot++;}
				              else if (strcmp(a[k],"+")==0||strcmp(a[k],"-")==0 )   {strcpy(b[k],"0x11a");	k++;  rot++;}
				              else if (strcmp(a[k],"*")==0||strcmp(a[k],"/")==0||strcmp(a[k],"%")==0 )   {strcpy(b[k],"0x11b");	k++;  rot++;}
				              else if (strcmp(a[k],"++")==0||strcmp(a[k],"--")==0||strcmp(a[k],"!")==0||strcmp(a[k],"~")==0 )   {strcpy(b[k],"0x11c");	k++; rot++;}
						  }
						  if( swap[p]==';'||swap[p]==',' )
						  {
								    a[k][0] = swap[p];      a[k][1] = '\0'; 
								    if(swap[p]==';')        strcpy(b[k],"0x122");  
									else if(swap[p]==',')   strcpy(b[k],"0x120"); 
									j=0;
								    p++;
									while(swap[p]!='\0')    swap[j++] = swap[p++];
									swap[j] = '\0';
									p = 0;
									k++;
									rot++;
									if( swap[0]=='\0' )    goto yes;
									continue;
										 
						  }
				  }
			  } 

		}

        for(i=0;i<k;i++)
		{     
			 printf("-----(");
			 m=strlen(b[i]);
			 for(j=0;j<m;j++)
				 printf("%c",b[i][j]);
			 printf(")   [");
			 n=strlen(a[i]);
			 for(j=0;j<n;j++)
				 printf("%c",a[i][j]);
			 printf("]\n");
		}
        	fclose(fp);
			if( (fp=fopen("by.txt","w"))==NULL )
			{
				  printf("Cannot open file.\n");
				  exit(0);
			}
			p = 0;
			sum = 1;
			for(i = 0;i < k; i++)
			{  
				if( d[p]==0 )    {  p++;  sum = 1;  i--; continue; }              //如果有空行,则跳过继续输出
				fprintf(fp,"%d.%d",p,sum);
			    sum++;     
				if( (sum == d[p]+1)&&d[p]!=0 )     {  p++;   sum = 1;  }
			    fputs("-----(",fp);
			    m=strlen(b[i]);
			    for(j=0;j<m;j++)
				     fputc(b[i][j],fp);
			    fputs(") ",fp);
				if( strcmp(b[i],"0x103")==0 )  fputs("关键字 -----[",fp);
				else if( strcmp(b[i],"0x104")==0 )  fputs("标识符 -----[",fp);
				else if( strcmp(b[i],"0x105")==0 )  fputs("布尔型 -----[",fp);
				else if( strcmp(b[i],"0x106")==0 )  fputs("字符型 -----[",fp);
				else if( strcmp(b[i],"0x107")==0 )  fputs("整型   -----[",fp);
				else if( strcmp(b[i],"0x108")==0 )  fputs("浮点型 -----[",fp);
				else if( strcmp(b[i],"0x109")==0 )  fputs("字符串 -----[",fp);
				else if( strcmp(b[i],"0x110")==0||strcmp(b[i],"0x111")==0 )  fputs("特殊符 -----[",fp);
				else if( strcmp(b[i],"0x112")==0||strcmp(b[i],"0x113")==0 )  fputs("特殊符 -----[",fp);
				else if( strcmp(b[i],"0x114")==0||strcmp(b[i],"0x115")==0 )  fputs("特殊符 -----[",fp);
				else if( strcmp(b[i],"0x116")==0||strcmp(b[i],"0x117")==0 )  fputs("特殊符 -----[",fp);
				else if( strcmp(b[i],"0x118")==0||strcmp(b[i],"0x119")==0 )  fputs("特殊符 -----[",fp);
				else if( strcmp(b[i],"0x11a")==0||strcmp(b[i],"0x11b")==0||strcmp(b[i],"0x11c")==0 )  fputs("特殊符 -----[",fp);
                else if( strcmp(b[i],"0x11d")==0 )  fputs("[]().  -----[",fp);
				else if( strcmp(b[i],"0x120")==0 )  fputs(",      -----[",fp);
				else if( strcmp(b[i],"0x121")==0 )  fputs("{}     -----[",fp);
				else if( strcmp(b[i],"0x122")==0 )  fputs(";      -----[",fp);
			    n = strlen(a[i]);
			    for(j = 0;j<n;j++)
				    fputc(a[i][j],fp);
			    fputs("]\n",fp);
			}
			fclose( fp );
			printf("      词法分析已写入by.txt,请查看!\n     ");
			return 0;
}        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -