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

📄 22.cpp

📁 编译原理(词法分析)
💻 CPP
字号:
#include <stdio.h>
#include <string.h>
void outprint(int a,char ch[20]);
			
main()
{
	FILE *in;
	char ch,infile[10],ah[20],bh[20];
	int k,m;
	for(int i=0;i<20;i++)
	{
		ah[i]='\0';
	}
	for(i=0;i<20;i++)
	{
		bh[i]='\0';
	}
	printf("请输入源文件名: \n");
	scanf("%s",infile);
	if((in=fopen(infile,"r"))==NULL)
	{
		printf("不能打开源文件!\n");
		return 0;
	}
	printf("\n对%s源文件进行词法分析所得结果如下:\n\n",infile);
	ch=fgetc(in);
	while(ch!=EOF)
	{
		switch(ch)
		{
		case '\n':
		case ' ':ch=fgetc(in);break;
		case '(':outprint(28,"(");ch=fgetc(in);break;
		case ')':outprint(29,")");ch=fgetc(in);break;
		case ';':outprint(18,";");ch=fgetc(in);break;
		case '+':outprint(13,"+");ch=fgetc(in);break;
		case '-':outprint(14,"-");ch=fgetc(in);break;
		case '*':outprint(15,"*");ch=fgetc(in);break;
		case '/':outprint(16,"/");ch=fgetc(in);break;
		case '=':outprint(25,"=");ch=fgetc(in);break;
		case '#':outprint(0,"#");ch=fgetc(in);break;
		case '<':ch=fgetc(in);if(ch=='>') {outprint(21,"<>");ch=fgetc(in);}
							else if(ch=='=') {outprint(22,"<=");ch=fgetc(in);}
								   else outprint(20,"<");
								   break;
		case '>':ch=fgetc(in);if(ch=='=') {outprint(24,">=");ch=fgetc(in);}
			                  else outprint(23,">");
							  break;
		case ':':ch=fgetc(in);if(ch=='=') {outprint(17,":=");ch=fgetc(in);}
					          else printf(": is Error!\n");
						      break;
		default:if(ch>='0'&&ch<='9')
				{
					k=0;
					do
					{
						ah[k++]=ch;
						ch=fgetc(in);
					}while(ch>='0'&&ch<='9');
					outprint(11,ah);
					for(int i=0;i<20;i++)
					{
						ah[i]='\0';
					}
				}
				else 
				{
					if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
					{
						m=0;
						bh[m++]=ch;
						ch=fgetc(in);
						while(ch>='0'&&ch<='9'||ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
						{
							bh[m++]=ch;ch=fgetc(in);
						}
						strlwr(bh);
						if(strcmp(bh,"begin")==0) outprint(1,"begin");
						else if(strcmp(bh,"end")==0) outprint(6,"end");
						else if(strcmp(bh,"if")==0) outprint(2,"if");
						else if(strcmp(bh,"then")==0) outprint(3,"then");
						else if(strcmp(bh,"do")==0) outprint(5,"do");
						else if(strcmp(bh,"while")==0) outprint(4,"while");
						else outprint(10,bh);
						for(i=0;i<20;i++)
						{
						bh[i]='\0';
						}
					}
					else {printf("%c is Error!\n",ch);ch=fgetc(in);}
				}
		}
	}
	fclose(in);
	return 0;
}

void outprint(int a,char *ch)
{
	printf("(%d,%s)\n",a,ch);
}

⌨️ 快捷键说明

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