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

📄 scanner.cpp

📁 编译原理词法分析器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					{
						buf[j] = PreDeal[i];
						j++;
						i++;
					}
					
					buf[j] = '\t';
					buf[j+1] = '\t';
					itoa(75,number,10);
					buf[j+2] = number[0];
					if(strlen(number)>1)
					{
						buf[j+3] = number[1];
					}
					buf[j+2+strlen(number)] = '\r';
					buf[j+3+strlen(number)] = '\n';
					buf[j+4+strlen(number)] = '\0';
					
					PushIntoResult(buf);
				}
				else
				{
					buf[j] = '\0';
					code = isKeyWord(buf);
					buf[j] = '\t';
					buf[j+1] = '\t';
					itoa(code,number,10);
					buf[j+2] = number[0];
					if(strlen(number)>1)
					{
						buf[j+3] = number[1];
					}
					buf[j+2+strlen(number)] = '\r';
					buf[j+3+strlen(number)] = '\n';
					buf[j+4+strlen(number)] = '\0';
					
					PushIntoResult(buf);
				}
				
				i--;
				continue;
			}
			
			
			if(isdigit(PreDeal[i]))
			{
				j = 0;
				for(int k = 0;k < 256;k++)
				{
					buf[k] = '\0';
				}
				buf[j] = PreDeal[i];
				j++;
				
				i++;
				
				while(isdigit(PreDeal[i]))
				{
					buf[j] = PreDeal[i];
					j++;
					i++;				
				}
				if(isalpha(PreDeal[i]))
				{
					buf[j] = PreDeal[i];
					j++;
					
					i++;
					while(isalnum(PreDeal[i]))
					{
						buf[j] = PreDeal[i];
						j++;
						i++;
					}
					
					buf[j] = '\t';
					buf[j+1] = '\t';
					itoa(75,number,10);
					buf[j+2] = number[0];
					if(strlen(number)>1)
					{
						buf[j+3] = number[1];
					}
					buf[j+2+strlen(number)] = '\r';
					buf[j+3+strlen(number)] = '\n';
					buf[j+4+strlen(number)] = '\0';
					
					PushIntoResult(buf);
				}
				else
				{
					buf[j] = '\0';
					buf[j] = '\t';
					buf[j+1] = '\t';
					itoa(76,number,10);
					buf[j+2] = number[0];
					if(strlen(number)>1)
					{
						buf[j+3] = number[1];
					}
					buf[j+2+strlen(number)] = '\r';
					buf[j+3+strlen(number)] = '\n';
					buf[j+4+strlen(number)] = '\0';
					
					PushIntoResult(buf);
				}
				
				i--;
				continue;
			}
			
			
			
			if(ispunct(PreDeal[i]))
			{
				j = 0;
				for(int k = 0;k < 256;k++)
				{
					buf[k] = '\0';
				}
				buf[j] = PreDeal[i];
				j++;
				
				i++;
				if(ispunct(PreDeal[i]))
				{
					if(isDouble(PreDeal[i-1],PreDeal[i]))
					{
						buf[j] = PreDeal[i];
						j++;						
					}
					else
					{
						buf[j] = ' ';
						j++;
						i--;					
					}
					
				}
				else
				{
					buf[j] = ' ';
					j++;
					i--;
				}
				
				buf[j] = '\0';
				code = isSignal(buf);
				buf[j] = '\t';
				buf[j+1] = '\t';
				itoa(code,number,10);
				buf[j+2] = number[0];
				if(strlen(number)>1)
				{
					buf[j+3] = number[1];
				}
				buf[j+2+strlen(number)] = '\r';
				buf[j+3+strlen(number)] = '\n';
				buf[j+4+strlen(number)] = '\0';
				
				PushIntoResult(buf);
			}
			
		}
		
	}
	
	SetWindowText(BOXNAME,Result);
}

int isSignal(char buf[2])
{if(buf[0]=='(')
{return 33;}
if(buf[0]==')')
{return 34;}
if(buf[0]=='[')
{return 35;}
if(buf[0]==']')
{return 36;}
if(buf[0]=='{')
{return 37;}
if(buf[0]=='}')
{return 38;}
if(buf[0]=='.')
{return 40;}
if(buf[0]=='~')
{return 42;}
if(buf[0]==',')
{return 72;}
if(buf[0]==';')
{return 73;}

if(buf[0]=='+')
{if(buf[1]==' ')
{return 50;}
if(buf[1]=='+')
{return 43;}
if(buf[1]=='=')
{return 64;}
}

if(buf[0]=='-')
{if(buf[1]==' ')
{return 45;}
if(buf[1]=='-')
{return 44;}
if(buf[1]=='=')
{return 65;}
if(buf[1]=='>')
{return 39;}
}

if(buf[0]=='=')
{if(buf[1]==' ')
{return 63;}
if(buf[1]=='=')
{return 57;}
}

if(buf[0]=='|')
{if(buf[1]==' ')
{return 60;}
if(buf[1]=='|')
{return 62;}
if(buf[1]=='=')
{return 71;}
}

if(buf[0]=='*')
{if(buf[1]==' ')
{return 46;}
if(buf[1]=='=')
{return 66;}
}

if(buf[0]=='<')
{if(buf[1]==' ')
{return 53;}
if(buf[1]=='<')
{return 51;}
if(buf[1]=='=')
{return 55;}
}

if(buf[0]=='>')
{if(buf[1]==' ')
{return 54;}
if(buf[1]=='>')
{return 52;}
if(buf[1]=='=')
{return 56;}
}

if(buf[0]=='!')
{if(buf[1]==' ')
{return 41;}
if(buf[1]=='=')
{return 58;}
}

if(buf[0]=='&')
{if(buf[1]==' ')
{return 47;}
if(buf[1]=='&')
{return 61;}
if(buf[1]=='=')
{return 69;}
}

if(buf[0]=='/')
{if(buf[1]==' ')
{return 48;}
if(buf[1]=='=')
{return 67;}
}

if(buf[0]=='%')
{if(buf[1]==' ')
{return 49;}
if(buf[1]=='=')
{return 68;}
}

if(buf[0]=='^')
{if(buf[1]==' ')
{return 59;}
if(buf[1]=='=')
{return 70;}
}

}

bool isDouble(char a,char b)
{
 if(a=='-')
   {if(b=='>')
      {return true;}
    if(b=='-')
      {return true;}
    if(b=='=')
      {return true;}
    return false;
   }

 if(a=='+')
   {if(b=='+')
      {return true;}
    if(b=='=')
      {return true;}
    return false;
   }

 if(a=='<')
   {if(b=='<')
      {return true;}
    if(b=='=')
      {return true;}
    return false;
   }

 if(a=='>')
   {if(b=='>')
      {return true;}
    if(b=='=')
      {return true;}
    return false;
   }

 if(a=='&')
   {if(b=='&')
      {return true;}
    if(b=='=')
      {return true;}
    return false;
   }

 if(a=='|')
   {if(b=='|')
      {return true;}
    if(b=='=')
      {return true;}
    return false;
   }

 if(a=='!')
   {if(b=='=')
      {return true;}
    return false;
   }

 if(a=='*')
   {if(b=='=')
      {return true;}
    return false;
   }

 if(a=='/')
   {if(b=='=')
      {return true;}
    return false;
   }

 if(a=='%')
   {if(b=='=')
      {return true;}
    return false;
   }

 if(a=='^')
   {if(b=='=')
      {return true;}
    return false;
   }

 if(a=='=')
   {if(b=='=')
      {return true;}
    return false;
   }
		
	return false;
}

int isKeyWord(char buf[256])
{
	int length = strlen(buf);
	
	if(length<2 || length>8)
	{
		return 75;
	}
	
	if(strcmp(buf,"atuo")==0)
	{return 1;}
	if(strcmp(buf,"break")==0)
	{return 2;}
	if(strcmp(buf,"case")==0)
	{return 3;}
	if(strcmp(buf,"char")==0)
	{return 4;}
	if(strcmp(buf,"const")==0)
	{return 5;}
	if(strcmp(buf,"continue")==0)
	{return 6;}
	if(strcmp(buf,"default")==0)
	{return 7;}
	if(strcmp(buf,"do")==0)
	{return 8;}
	if(strcmp(buf,"double")==0)
	{return 9;}
	if(strcmp(buf,"else")==0)
	{return 10;}
	if(strcmp(buf,"enum")==0)
	{return 11;}
	if(strcmp(buf,"extern")==0)
	{return 12;}
	if(strcmp(buf,"float")==0)
	{return 13;}
	if(strcmp(buf,"for")==0)
	{return 14;}
	if(strcmp(buf,"goto")==0)
	{return 15;}
	if(strcmp(buf,"if")==0)
	{return 16;}
	if(strcmp(buf,"int")==0)
	{return 17;}
	if(strcmp(buf,"long")==0)
	{return 18;}
	if(strcmp(buf,"register")==0)
	{return 19;}
	if(strcmp(buf,"return")==0)
	{return 20;}
	if(strcmp(buf,"short")==0)
	{return 21;}
	if(strcmp(buf,"signed")==0)
	{return 22;}
	if(strcmp(buf,"sizeof")==0)
	{return 23;}
	if(strcmp(buf,"static")==0)
	{return 24;}
	if(strcmp(buf,"struct")==0)
	{return 25;}
	if(strcmp(buf,"switch")==0)
	{return 26;}
	if(strcmp(buf,"typedef")==0)
	{return 27;}
	if(strcmp(buf,"union")==0)
	{return 28;}
	if(strcmp(buf,"unsigned")==0)
	{return 29;}
	if(strcmp(buf,"void")==0)
	{return 30;}
	if(strcmp(buf,"volatile")==0)
	{return 31;}
	if(strcmp(buf,"while")==0)
	{return 32;} 	
	return 75;
	
	
}

void PushIntoResult(char buf[256])
{
	int i = strlen(Result);
	int j = 0;
	
	while(buf[j]!='\0')
	{	
		Result[i] = buf[j];
		i++;
		j++;
	}
	Result[i] = '\0';
}

⌨️ 快捷键说明

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