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

📄 词法分析器2.cpp

📁 词法分析器
💻 CPP
字号:
#include "stdio.h"
#include "string.h"

bool IsLetter(char a)
{ if(a>=65&&a<=90)    return true;
  if(a>=97&&a<=122)   return true;
  return false;
}

bool IsDigit(char a)
{ if(a>=48&&a<=57)    return true;
  else  return false;
}

int Reserve(char* str)
{ 
  int i,j,len;
  char re[5][5]={{"DIM"},{"IF"},{"DO"},{"STOP"},{"END"}};
  for(i=0;i<5;i++)
  {	  len=strlen(re[i]);
	  for(j=0;j<len;j++)
		  if(re[i][j]!=str[j]) break;
	  if(j==len) break;
  }
  if(i==5) return 6;
  else  return i+1;
}

void main()
{ int i=-1,j,code=0,slen=-1;
  char str[30],ch,strToken[10]="   ";
  printf("请输入要做词法分析的字符串:\n");
  do
  {  i++;  
     scanf("%c",&str[i]);
	 slen++;
  }while(str[i]!=10);
  i=0;
  printf("其种别编码为:\n");
  ch=str[0];
  while(i<slen)
  { while(str[i]==' ')  i++;
    ch=str[i];
	j=0;
	if(IsLetter(ch))
	{   do
		{ strToken[j]=ch;
	      j++;    i++;
		  ch=str[i];
		}while(IsLetter(ch)||IsDigit(ch));
	    code=Reserve(strToken);	    
	}
	else if(IsDigit(ch))
			{   do
				{ strToken[j]=ch;
				  j++;  i++;
				  ch=str[i];
				}while(IsDigit(ch));
				code=7;
			}
	     else   if(ch=='*')
				{ i++;      ch=str[i];
		          if(ch=='*')
				  { code=11;
				    i++;    ch=str[i];
				  }
				  else code=10;
				}
		        else 
				{ switch (ch)
					{ case '=':  code=8;  break;
				      case '+':  code=9;  break;
				      case ',':  code=12; break;
				      case '(':  code=13; break;
				      case ')':  code=14; break;
					  default:   code=0;
					}
				  i++;   ch=str[i];
				}
    if(code==0)  
	{  printf("Error!\n");
       break;
	} 
    else printf("%d   ",code);
  }
  printf("\n");
}
  
				  

⌨️ 快捷键说明

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