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

📄 no.c

📁 该程序是在C下的对TP的简单的词法分析,利用该程序可以分析简单的程序,别的也没有了,就是这些了
💻 C
字号:
#include <stdio.h>
#include <string.h>
#include <process.h>
#define MAX 50

void main()
{
 FILE *in,*out;
 char arr[MAX];
 char currentchar;
 int i=0,j=1;

 if((in=fopen("infile.txt","r"))==NULL)
 {
  printf("can not open file\n");
  exit(0);
 }

 if((out=fopen("outfile.txt","w"))==NULL)
 {
  printf("cannout open outfile\n");
  exit(1);
 }

 currentchar=fgetc(in);
 while(currentchar==' '||currentchar=='\n')
 {
  currentchar=fgetc(in);
 }

 while(currentchar!='#')
 {
  if((currentchar>='a'&&currentchar<='z')||(currentchar>='A'&&currentchar<='Z')||(currentchar>='0'&&currentchar<='9')
      ||currentchar=='('||currentchar==')'||currentchar=='>'||currentchar=='<'||currentchar=='.'||currentchar==','
      ||currentchar==';'||currentchar==':'||currentchar=='+'||currentchar=='-'||currentchar=='*'||currentchar=='/'
      ||currentchar=='='||currentchar==' ')
  {
   i=0;
   if(currentchar>='0'&&currentchar<='9')
   {
    arr[i++]=currentchar;
    currentchar=fgetc(in);
    while(currentchar>='0'&&currentchar<='9')
    {
     arr[i++]=currentchar;
     currentchar=fgetc(in);
    }
    if(currentchar!='.')
    {
     arr[i++]='\0';
     fprintf(out,"%s%d,%c%s%c%s\n","(",2,'"',arr,'"',")");
    }
    else
    {
     arr[i++]=currentchar;
     currentchar=fgetc(in);
     while(currentchar>='0'&&currentchar<='9')
     {
      arr[i++]=currentchar;
      currentchar=fgetc(in);
     }
     arr[i++]='\0';
     fprintf(out,"%s%d,%c%s%c%s\n","(",2,'"',arr,'"',")");
    }
    while(currentchar==' '||currentchar=='\n')
    {
     currentchar=fgetc(in);
    }
   }

   if((currentchar>='a'&&currentchar<='z')||(currentchar>='A'&&currentchar<='Z'))
   {
    i=0;
    while((currentchar>='a'&&currentchar<='z')||(currentchar>='0'&&currentchar<='9')||(currentchar>='A'&&currentchar<='Z'))
    {
     arr[i++]=currentchar;
     currentchar=fgetc(in);
    }
    arr[i++]='\0';
    if(strcmp(arr,"begin")==0)
     fprintf(out,"%s%d,%c%s%c%s\n","(",3,'"',arr,'"',")");
    else if(strcmp(arr,"end")==0)
     fprintf(out,"%s%d,%c%s%c%s\n","(",3,'"',arr,'"',")");
    else if(strcmp(arr,"if")==0)
     fprintf(out,"%s%d,%c%s%c%s\n","(",3,'"',arr,'"',")");
    else if(strcmp(arr,"then")==0)
     fprintf(out,"%s%d,%c%s%c%s\n","(",3,'"',arr,'"',")");
    else if(strcmp(arr,"else")==0)
     fprintf(out,"%s%d,%c%s%c%s\n","(",3,'"',arr,'"',")");
    else if(strcmp(arr,"while")==0)
     fprintf(out,"%s%d,%c%s%c%s\n","(",3,'"',arr,'"',")");
    else if(strcmp(arr,"do")==0)
     fprintf(out,"%s%d,%c%s%c%s\n","(",3,'"',arr,'"',")");
    else if(strcmp(arr,"var")==0)
     fprintf(out,"%s%d,%c%s%c%s\n","(",3,'"',arr,'"',")");
    else if(strcmp(arr,"int")==0)
     fprintf(out,"%s%d,%c%s%c%s\n","(",3,'"',arr,'"',")");
    else if(strcmp(arr,"program")==0)
     fprintf(out,"%s%d,%c%s%c%s\n","(",3,'"',arr,'"',")");
    else
     fprintf(out,"%s%d,%c%s%c%s\n","(",1,'"',arr,'"',")");
   }

   if(currentchar=='+')
   {
    fprintf(out,"%s%d,%c%c%c%s\n","(",4,'"',currentchar,'"',")");
    currentchar=fgetc(in);
   }
   if(currentchar=='-')
   {
    fprintf(out,"%s%d,%c%c%c%s\n","(",4,'"',currentchar,'"',")");
    currentchar=fgetc(in);
   }
   if(currentchar=='*')
   {
    fprintf(out,"%s%d,%c%c%c%s\n","(",4,'"',currentchar,'"',")");
    currentchar=fgetc(in);
   }
   if(currentchar=='/')
   {
    i=0;
    arr[i++]=currentchar;
    currentchar=fgetc(in);
    if(currentchar=='*')
    {
     arr[i++]=currentchar;
     arr[i++]='\0';
     fprintf(out,"%s%d,%c%s%c%s\n","(",5,'"',arr,'"',")");
     currentchar=fgetc(in);
	 
go:while (currentchar!='/'&&currentchar!='*')
	   currentchar=fgetc(in);
	 if(currentchar=='/')
	{
		i=0;
		arr[i++]=currentchar;
		currentchar=fgetc(in);
		if(currentchar=='*')
        {
			arr[i++]=currentchar;
			arr[i++]='\0';
			j=j+1;
			currentchar=fgetc(in);
			goto go;
		}
		else goto go;
	}
   else if(currentchar=='*')
     {
      i=0;
      arr[i++]=currentchar;
      currentchar=fgetc(in);
      if(currentchar=='/')
	  {
	j=j-1;
	arr[i++]=currentchar;
	arr[i++]='\0';
	if(j==0) fprintf(out,"%s%d,%c%s%c%s\n","(",5,'"',arr,'"',")");
	else goto go;
	currentchar=fgetc(in);
      }
	  else	goto go; 
   }
   }
    else
    {
     arr[i++]='\0';
     fprintf(out,"%s%d,%c%s%c%s\n","(",4,'"',arr,'"',")");
    }
   }
   if(currentchar=='=')
   {
    fprintf(out,"%s%d,%c%c%c%s\n","(",4,'"',currentchar,'"',")");
    currentchar=fgetc(in);
   }
   if(currentchar=='.')
   {
    fprintf(out,"%s%d,%c%c%c%s\n","(",5,'"',currentchar,'"',")");
    currentchar=fgetc(in);
   }
   if(currentchar==',')
   {
    fprintf(out,"%s%d,%c%c%c%s\n","(",5,'"',currentchar,'"',")");
    currentchar=fgetc(in);
   }
   if(currentchar==';')
   {
    fprintf(out,"%s%d,%c%c%c%s\n","(",5,'"',currentchar,'"',")");
    currentchar=fgetc(in);
   }
   if(currentchar=='(')
   {
    fprintf(out,"%s%d,%c%c%c%s\n","(",5,'"',currentchar,'"',")");
    currentchar=fgetc(in);
   }
   if(currentchar==')')
   {
    fprintf(out,"%s%d,%c%c%c%s\n","(",5,'"',currentchar,'"',")");
    currentchar=fgetc(in);
   }
   if(currentchar==':')
   {
    i=0;
    arr[i++]=currentchar;
    currentchar=fgetc(in);
    if(currentchar=='=')
    {
     arr[i++]=currentchar;
     arr[i++]='\0';
     fprintf(out,"%s%d,%c%s%c%s\n","(",4,'"',arr,'"',")");
     currentchar=fgetc(in);
    }
    else
    {
     arr[i++]='\0';
     fprintf(out,"%s%d,%c%s%c%s\n","(",5,'"',arr,'"',")");
    }
   }
   if(currentchar=='>')
   {
    fprintf(out,"%s%d,%c%c%c%s\n","(",4,'"',currentchar,'"',")");
    currentchar=fgetc(in);
   }
   if(currentchar=='<')
   {
    fprintf(out,"%s%d,%c%c%c%s\n","(",4,'"',currentchar,'"',")");
    currentchar=fgetc(in);
   }
   while(currentchar==' '||currentchar=='\n')
   {
    currentchar=fgetc(in);
   }
  }
  else
  {
   fprintf(out,"%s,%c%c%c\n","error",'"',currentchar,'"');
   currentchar=fgetc(in);
  }
 }

 fclose(in);
 fclose(out);
}

⌨️ 快捷键说明

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