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

📄 词法分析.cpp

📁 按照编译原理中学到的词法分析
💻 CPP
字号:
/*该词法分析是用c语言实现的,首先需在该程序的目录下存放需要词法分析的源程序和关键字表,
然后运行该程序时,它会自动调用需词法分析的程序,然后显示分析后的结果*/


#include<stdio.h>
#include<string.h>
#include<conio.h>

void main()
{
	char c,t[15],h[15],s[80];
	int n=1,k,i=0,j=0;
	FILE *fp,*fp1,*fp2;
	fp=fopen("source.txt","r");
	for(;c!='}';i++)         //读入源程序
	{      
		fscanf(fp,"%c",&c);
		s[i]=c;
	}
	s[i]='\0';
    printf("%s\n\n",s); //输出源程序

	for(i=0;s[i]!='\0';i++)
	{
        k=1;
		if(s[i]>=97 && s[i]<=122)     //判断是关键字还是标字符
        {
			for(j=0;(s[i]>=97 && s[i]<=122) || s[i]=='.';i++,j++)
               t[j]=s[i];
			   t[j]='\0';
			fp1=fopen("Keyword.txt","r");
			while(fscanf(fp1,"%s",h)!= EOF)
				if(strcmp(t,h)==0)
				{
					printf("%d.  %s\t(关键字)\n",n,t);
					break;
				}
			fp2=fopen("header_file.txt","r");
			while(fscanf(fp2,"%s",h)!= EOF)
				if(strcmp(t,h)==0)
				{
					printf("%d.  %s\t(关键字)\n",n,t);
					k=0;
					break;
				}
            if(fscanf(fp1,"%s",h)==EOF && k!=0)
				printf("%d.  %s\t\t(标字符)\n",n,t);
			for(j=0;j<15;j++)
				t[j]='\0';
			n++;i--;
		}

		else if(s[i]>=65 && s[i]<=90)    //判断简单情况下的标字符
		{
			for(j=0;s[i]>=65 && s[i]<=122;i++,j++)
               t[j]=s[i];
			printf("%d.  %s\t\t(标字符)\n",n,t);
			for(j=0;j<15;j++)
				t[j]='\0';
			n++;i--;
		}

        else if(s[i]>=48 && s[i]<=57)  //判断常数
		{
			for(j=0;s[i]>=48 && s[i]<=57;i++,j++)
               t[j]=s[i];
            printf("%d.  %s\t\t(常数)\n",n,t);
			n++;i--;
		}

		else if(s[i]=='-' || s[i]=='+' || s[i]=='*' || s[i]=='/' || s[i]=='=')   //判断运算符
		{
			printf("%d.  %c\t\t(运算符)\n",n,s[i]);
			n++;
		}

		else if((s[i]>=33 && s[i]<=42) || (s[i]>=58 && s[i]<=59) || (s[i]>=123 && s[i]<=126) || s[i]==44 || s[i]==60 || s[i]==62)  //判断边界符
		{
			printf("%d.  %c\t\t(边界符)\n",n,s[i]);
			n++;
		}
	}
    getch();
}

⌨️ 快捷键说明

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