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

📄 1.cpp

📁 编译原理课程的词法分析器 并且能够判别科学计数法
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>




#include<string.h>

char prog[800],token[8];

char ch,ch1,ch2;

int syn,p,m,n,row;

char sum[20];

char *rwtab[6]={"begin","if","then","while","do","end"};

void scaner();

double  f;

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

	return f;
	}

int main()

	{ FILE *fpin,*fpout;
p=0;
fpin=fopen("1.txt","r");
fpout=fopen("2.txt","w");
printf("\n***词法分析器***\n");
printf("(种别,单词)");

fread(prog,1,600,fpin);
	fclose(fpin);
	p=0;
	do
		{
		scaner();
		switch(syn)
			{

			case 11: fprintf(fpout,"\n(%d, %g)",syn,f);
				printf("\n(%d, %g)",syn,f);break;
			case -1: fprintf(fpout,"\nFOUND ERROR ");
				printf("\nFOUND ERROR ");break;
			case -2: break;
			default: fprintf(fpout,"\n(%d, %s)",syn,token);
				printf("\n(%d, %s)",syn,token);break;
			}

		}

		while(syn!=0);
		
		fclose(fpout);
		getchar();
		return 0;
	}

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 + -