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

📄 scaner.h

📁 递归下降分析法构造的语法分析机 能够判断科学计数法 可判别的运算符为+-*/()
💻 H
字号:
#include<stdio.h>
#include<stdlib.h>
char ch,ch1,ch2;; 
int syn,p,m,n,sum;//syn为单词种别码,p是缓冲区prog的指针,m是token的指针,sum为数字 
char *rwtab[6]={"begin","if","then","while","do","end"}; 
char prog[800],token[8]; 
double ff;

double  converse(char *token)
	{
	ff=0; 
	char *rndptr;
	ff=strtod(token,&rndptr);

	return ff;
	}

void scaner()

	{

	for(n=0;n<8;n++) 
		token[n]=NULL;
	m=0;

	ch=prog[p];

	p++;

	while(ch==' '||ch=='\t')

		{
		ch=prog[p];
		p++;
		}

	if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
		{
		while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
			{
			token[m++]=ch;
			ch=prog[p++];
			}

		token[m++]='\0'; p--; syn=10;
		for(n=0;n<6;n++)
			if(strcmp(token,rwtab[n])==0)
				{
				syn=n+1;
				break;
				}
		}
	else if((ch>='0'&&ch<='9'))
		{
		m=0;  
		while((ch>='0'&&ch<='9'))
			{

			token[m++]=ch;
			ch=prog[p++];

			if(ch!=' '&&ch!=';'&&ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!='e'&&ch!='E'&&ch!=')'&&ch!='.'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
				{
				ch=prog[p++];
				while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
					{
					ch=prog[p++];
					}
				syn=-1;
				p--;
				return;
				}

			if((ch=='e'||ch=='E'))
				{ token[m++]=ch;
			ch=prog[p++];
			if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
				{
				ch=prog[p++];
				while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
					{
					ch=prog[p++];
					}
				syn=-1;
				p--;
				return;
				}

			if((ch=='+'||ch=='-'))
				{ token[m++]=ch;
			ch=prog[p++];}
			if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
				{
				ch=prog[p++];
				while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
					{
					ch=prog[p++];
					}
				syn=-1;
				p--;
				return;
				}		
				}
			if(ch=='.')
				{	token[m++]=ch;

			ch=prog[p++];

			while((ch>='0'&&ch<='9'))

				{

				token[m++]=ch;
				ch=prog[p++];
				if(ch!=' '&&ch!=';'&&ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!='e'&&ch!='E'&&ch!=')'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
					{
					ch=prog[p++];
					while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
						{
						ch=prog[p++];
						}
					syn=-1;
					p--;
					return;
					}
				if((ch=='e'||ch=='E'))
					{		token[m++]=ch;
				ch=prog[p++];
				if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
					{
					ch=prog[p++];
					while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
						{
						ch=prog[p++];
						}
					syn=-1;
					p--;
					return;
					}

				if((ch=='+'||ch=='-'))
					{		token[m++]=ch;
				ch=prog[p++];
				if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
					{
					ch=prog[p++];
					while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
						{
						ch=prog[p++];
						}
					syn=-1;
					p--;
					return;
					}
					}
					}
				}
			token[m++]='\0';

				}
			converse(token);
			syn=11;          
			}			
		p--;
		}

	else switch(ch)

		{

  case'<':m=0;token[m++]=ch;

	  ch=prog[p++];

	  if(ch=='>')

		  {

		  syn=21;

		  token[m++]=ch;

		  }

	  else if(ch=='=')

		  {

		  syn=22;

		  token[m++]=ch;

		  }

	  else

		  {
		  syn=20; p--;
		  }

	  break;

  case'>':m=0;token[m++]=ch;

	  ch=prog[p++];

	  if(ch=='=')

		  {

		  syn=24;

		  token[m++]=ch;

		  }

	  else

		  {
		  syn=23;

		  p--;
		  }

	  break;

  case':':m=0;token[m++]=ch;

	  ch=prog[p++];

	  if(ch=='=')

		  {

		  syn=18;

		  token[m++]=ch;

		  }

	  else

		  {
		  syn=17;                              

		  p--;

		  }

	  break;


  case'+':
	  ch1=prog[p-2];

	  if((ch1>='0'&&ch1<='9')||(ch1>='a'&&ch1<='z')||(ch1>='A'&&ch1<='Z')||ch1==')')

		  { syn=13;token[0]='+';break;}

	  else

		  {    m=1;
	  token[0]='+';
	  ch=prog[p++];
	  if((ch>='0'&&ch<='9')) {

		  while((ch>='0'&&ch<='9'))
			  {

			  token[m++]=ch;

			  ch=prog[p++];
			  if(ch!=' '&&ch!=';'&&ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!='e'&&ch!='E'&&ch!=')'&&ch!='.'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
				  {
				  ch=prog[p++];
				  while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
					  {
					  ch=prog[p++];
					  }
				  syn=-1;
				  p--;
				  return;
				  }
			  if((ch=='e'||ch=='E'))
				  { token[m++]=ch;
			  ch=prog[p++];
			  if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
				  {
				  ch=prog[p++];
				  while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
					  {
					  ch=prog[p++];
					  }
				  syn=-1;
				  p--;
				  return;
				  }

			  if((ch=='+'||ch=='-'))
				  { token[m++]=ch;
			  ch=prog[p++];}
			  if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
				  {
				  ch=prog[p++];
				  while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
					  {
					  ch=prog[p++];
					  }
				  syn=-1;
				  p--;
				  return;
				  }
				  }
			  if(ch=='.')
				  { token[m++]=ch;
			  ch=prog[p++];

			  while((ch>='0'&&ch<='9'))
				  {
				  token[m++]=ch;
				  ch=prog[p++];
				  if((ch=='e'||ch=='E'))
					  { token[m++]=ch;
				  ch=prog[p++];
				  if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
					  {
					  ch=prog[p++];
					  while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
						  {
						  ch=prog[p++];
						  }
					  syn=-1;
					  p--;
					  return;
					  }


				  if((ch=='+'||ch=='-'))
					  { token[m++]=ch;
				  ch=prog[p++];}
				  if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
					  {
					  ch=prog[p++];
					  while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
						  {
						  ch=prog[p++];
						  }
					  syn=-1;
					  p--;
					  return;
					  }
					  } 
				  }
			  token[m++]='\0';
				  }
			  converse(token);
			  syn=11;}
			  
		  }
	  p--;
		  }
	  break;
  case'-':
	  ch2=prog[p-2];
	  if((ch2>='0'&&ch2<='9')||(ch2>='a'&&ch2<='z')||(ch2>='A'&&ch2<='Z')||ch2==')')

		  { syn=14;token[0]='-';break;}

	  else

		  {    m=1;
	  token[0]='-';
	  ch=prog[p++];
	  if((ch>='0'&&ch<='9')) {

		  while((ch>='0'&&ch<='9'))
			  {

			  token[m++]=ch;

			  ch=prog[p++];
			  if(ch!=' '&&ch!=';'&&ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!='e'&&ch!='E'&&ch!=')'&&ch!='.'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
				  {
				  ch=prog[p++];
				  while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
					  {
					  ch=prog[p++];
					  }
				  syn=-1;
				  p--;
				  return;
				  }
			  if((ch=='e'||ch=='E'))
				  { token[m++]=ch;
			  ch=prog[p++];
			  if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
				  {
				  ch=prog[p++];
				  while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
					  {
					  ch=prog[p++];
					  }
				  syn=-1;
				  p--;
				  return;
				  }

			  if((ch=='+'||ch=='-'))
				  { token[m++]=ch;
			  ch=prog[p++];}
			  if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
				  {
				  ch=prog[p++];
				  while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
					  {
					  ch=prog[p++];
					  }
				  syn=-1;
				  p--;
				  return;
				  }
				  }
			  if(ch=='.')
				  { token[m++]=ch;
			  ch=prog[p++];


			  while((ch>='0'&&ch<='9'))

				  {

				  token[m++]=ch;
				  ch=prog[p++];
				  if((ch=='e'||ch=='E'))
					  { token[m++]=ch;
				  ch=prog[p++];
				  if(ch!='+'&&ch!='-'&&ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
					  {
					  ch=prog[p++];
					  while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
						  {
						  ch=prog[p++];
						  }
					  syn=-1;
					  p--;
					  return;
					  }


				  if((ch=='+'||ch=='-'))
					  { token[m++]=ch;
				  ch=prog[p++];}
				  if(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7'&&ch!='8'&&ch!='9')
					  {
					  ch=prog[p++];
					  while(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/'&&ch!=')'&&ch!=';')
						  {
						  ch=prog[p++];
						  }
					  syn=-1;
					  p--;
					  return;
					  }
					  } 
				  }
			  token[m++]='\0';
				  }
			  converse(token);
			  syn=11;}
			  
		  }
	  p--;
		  }
	  break;

  case'*':syn=15;token[0]=ch;break;

  case'/':syn=16;token[0]=ch;break;

  case'=':syn=25;token[0]=ch;break;

  case';':syn=26;token[0]=ch;break;

  case'(':syn=27;token[0]=ch;break;

  case')':syn=28;token[0]=ch;break;

  case'#':syn=0;token[0]=ch;break;

  case'\n':syn=-2;break;

  default: syn=-1;break;

		}


	}

⌨️ 快捷键说明

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