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

📄 accidanalyse.h

📁 C写的词法分析器
💻 H
📖 第 1 页 / 共 2 页
字号:
                 Temp[i++]='>';
				 IBufIndex++;
                  break;
			 }
             else break;
		case '+':
		   Temp[i++]='+';
             if(CBuffer[IBufIndex+1]=='+')
			 {
				 Temp[i++]='+';
				 IBufIndex++;
                 break;
			 }
             else if(CBuffer[IBufIndex+1]=='=')
             {
                 Temp[i++]='=';
				 IBufIndex++;
                  break;
			 }
             else break; 
	   case '<':
			 Temp[i++]='<';
             if(CBuffer[IBufIndex+1]=='<'&&CBuffer[IBufIndex+2]!='=')
			 {
				 Temp[i++]='<';
				 IBufIndex++;
                 break;
			 }
			 else if(CBuffer[IBufIndex+1]=='=')
			{
				 Temp[i++]='=';
				 IBufIndex++;
                 break;
			 }
			 else if(CBuffer[IBufIndex+1]=='<'&&CBuffer[IBufIndex+2]=='=')
			 {
				 Temp[i++]='<';
                 Temp[i++]='=';
				 IBufIndex+=2;
                 break;
			 }
             else break;
	   case '>':
			 Temp[i++]='>';
             if(CBuffer[IBufIndex+1]=='>'&&CBuffer[IBufIndex+2]!='=')
			 {
				 Temp[i++]='>';
				 IBufIndex++;
                 break;
			 }
			 else if(CBuffer[IBufIndex+1]=='=')
			{
				 Temp[i++]='=';
				 IBufIndex++;
                 break;
			 }
			 else if(CBuffer[IBufIndex+1]=='>'&&CBuffer[IBufIndex+2]=='=')
			 {
				 Temp[i++]='>';
                 Temp[i++]='=';
				 IBufIndex+=2;
                 break;
			 }
             else break;
	   case '=':
		   Temp[i++]='=';
             if(CBuffer[IBufIndex+1]=='=')
			 {
				 Temp[i++]='=';
				 IBufIndex++;
                 break;
			 }
             else break;
	    case '&':
		   Temp[i++]='&';
             if(CBuffer[IBufIndex+1]=='&')
			 {
				 Temp[i++]='&';
				 IBufIndex++;
                 break;
			 }
             else if(CBuffer[IBufIndex+1]=='=')
             {
                 Temp[i++]='=';
				 IBufIndex++;
                  break;
			 }
             else break; 
	   case '|':
		   Temp[i++]='|';
             if(CBuffer[IBufIndex+1]=='|')
			 {
				 Temp[i++]='|';
				 IBufIndex++;
                 break;
			 }
             else break;
	   case '!':
		   Temp[i++]='!';
             if(CBuffer[IBufIndex+1]=='=')
			 {
				 Temp[i++]='=';
				 IBufIndex++;
                 break;
			 }
             else break;
	   case '^':
		   Temp[i++]='^';
             if(CBuffer[IBufIndex+1]=='=')
			 {
				 Temp[i++]='=';
				 IBufIndex++;
                 break;
			 }
             else break;
	   case '*':
		   Temp[i++]='*';
             if(CBuffer[IBufIndex+1]=='=')
			 {
				 Temp[i++]='=';
				 IBufIndex++;
                 break;
			 }
             else break; 
	   case '/':
		   Temp[i++]='/';
             if(CBuffer[IBufIndex+1]=='=')
			 {
				 Temp[i++]='=';
				 IBufIndex++;
                 break;
			 }
             else break;
	   case '%':
		   Temp[i++]='%';
             if(CBuffer[IBufIndex+1]=='=')
			 {
				 Temp[i++]='=';
				 IBufIndex++;
                 break;
			 }
             else break;
	   case ',':
			Temp[i++]=',';
			break;
	   case '.':
			Temp[i++]='.';
			break;
	   case '?':
			Temp[i++]='?';
			break;
	   case ':':
			Temp[i++]=':';
			break;
		case '~':
			 Temp[i++]='~';
             break;

	}
    Temp[i]='\0';
    for(i=0;i<=42;i++)
     {
		if(strcmp(Operator[i].ID,Temp)==0)
	   {
		   printf("所分析的运算符是:%s  属性值是:%s\n",Operator[i].ID,Operator[i].CToken_Type);
		   WriteDisk(Operator,i);
	   }
	}
    IBufIndex++;
}

                 //***********函数名:DivCharRecoginse()****************//
				 //***********功  能:识别分界符并写盘******************//
				 //************被调用:main() **************************//
void DivCharRecoginse()
{   
    if(CBuffer[IBufIndex]=='{')
		printf("所分析的是分界符:%c\n",CBuffer[IBufIndex]);
	if (CBuffer[IBufIndex]=='}')
        printf("所分析的是分界符:%c\n",CBuffer[IBufIndex]);
	if (CBuffer[IBufIndex]==';')
		printf("所分析的是分界符:%c\n",CBuffer[IBufIndex]);
	if((fp2=fopen("Test1.txt","a"))==NULL)                                                           //打开续写的文件
        printf("cannot open file\n");
	else 
		{
           fputc(CBuffer[IBufIndex],fp2);
               fputc('\n',fp2);
			   fclose(fp2);
		}
	IBufIndex++;
}
                 //***********函数名:ConStrRecoginse()****************//
				 //***********功  能:识别字符串常量*******************//
				 //************被调用:main()           ****************//
                 //*************调用: WriteDisk();     ****************//
void ConStrRecoginse()
{
	int i=0;
	if(CBuffer[IBufIndex]=='"')
	{   
		strcpy(ConstStr[ConStrIndex].CToken_Type,"204");                                  //字符串变量的编号是204
        IBufIndex++;
		while(CBuffer[IBufIndex]!='"')
		{
			ConstStr[ConStrIndex].ID[i]=CBuffer[IBufIndex++];
			i++;
		}
        ConstStr[ConStrIndex].ID[i]='\0';
		printf("所分析的字符串常量是:%s  类型值是:%s\n",ConstStr[ConStrIndex].ID,ConstStr[ConStrIndex++].CToken_Type);
	}
    IBufIndex++;
}

	             //***********函数名:Con_Trans_CharRecoginse()****************//
				 //***********功  能:识别字符常量和转义类字符*****************//
				 //************被调用:main()           ***********************//
                 //*************调用: WriteDisk();     ***********************//
void Con_Trans_CharRecoginse()
{  
	int i=0;
	int flag=-1;
	strcpy(ConstChar[ConCharIndex].CToken_Type,"205");                                  //字符串变量的编号是204
    IBufIndex++;                                                                   //跳过单引号
	char Temp[4];
	while(CBuffer[IBufIndex]!='\'')
		{
		  if(CBuffer[IBufIndex+1]=='\''&&CBuffer[IBufIndex+2]=='\'')
          {
			  Temp[i]=CBuffer[IBufIndex++];
			  i++;
		  }
		  Temp[i]=CBuffer[IBufIndex++];
			i++;
		 }
	Temp[i]='\0';
    for(i=0;i<7;i++)
	{
	    //printf("所分析的转义类字符是:%s\n",TransChar[i].ID);
	    if(strcmp(Temp,TransChar[i].ID)==0)
		      flag=i; 
	}
	if(flag>=0)
    {
		WriteDisk(TransChar,flag);
        printf("所分析的转义类字符是:%s  类型值是:%s\n",TransChar[flag].ID,TransChar[flag].CToken_Type);
	}
	else if(flag<0)
	{
        strcpy(ConstChar[ConCharIndex].ID,Temp);
        WriteDisk(ConstChar,ConCharIndex);
        printf("所分析的字符常量是:%s  类型值是:%s\n",ConstChar[ConCharIndex].ID,ConstChar[ConCharIndex++].CToken_Type);
	}
    IBufIndex++;                                                                        //跳过单引号
}

⌨️ 快捷键说明

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