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

📄 wordcompiler.c

📁 该程序是词法分析器
💻 C
字号:
#include<stdio.h>
#include<string.h>

#include"search.h"
extern int reserve(char*);
extern void output(int,char*);
char token[20];
char ch;
int i,c;

void scanner(FILE *fp)
{
	ch=fgetc(fp);//返回一个包含有一个字符的字符串,该字符从 handle 指向的文件中得到。碰到 EOF 则返回 FALSE。
	if(isalpha(ch))//int isalnum(int ch)  若ch是字母('A'-'Z','a'-'z')或数字('0'-'9')返回非0值,否则返回0
                     
	{
		token[0]=ch;
		i=1;
		ch=fgetc(fp);
		while(isalpha(ch)||isalnum(ch))//[功能]检查ch是否是字母(alpha)或数字(numeric) [返回值]是字母或数字返回1;否则返回0
		{
			token[i]=ch;
			i++;
			ch=fgetc(fp);
		}
		fseek(fp,-1,1);//fseek -- 在文件指针中定位
		token[i]='\0';
		c=reserve(token);
		if(c!=-1)
		      output(c,token);
		else
		      output(10,token);
	}
	else if(isdigit(ch))
	     {
		token[0]=ch;
		ch=fgetc(fp);
		i=1;
		while(isdigit(ch))
		{
			token[i]=ch;
			i++;
			ch=fgetc(fp);
		}
		token[i]='\0';
		fseek(fp,-1,1);
		output(11,token);
	     }
	else
		switch(ch)
		{
			case'=':ch=fgetc(fp);
				if(ch=='=')
					output(39,"==");
				else
				{
				fseek(fp,-1,1);
				output(21,"=");
				}
				break;
			case'+':output(22,"+");break;
			case'-':output(23,"-");break;
			case'*':output(24,"*");break;
			case'/':output(25,"/");break;
			case'(':output(26,"(");break;
			case')':output(27,")");break;
			case'[':output(28,"[");break;
			case']':output(29,"]");break;
			case'{':output(30,"{");break;
			case'}':output(31,"}");break;
			case',':output(32,",");break;
			case':':output(33,":");break;
			case';':output(34,";");break;
			case'>':ch=fgetc(fp);
				if(ch=='=')
					output(37,">=");
				else
				{
				fseek(fp,-1,1);
				output(35,">");
				}
				break;
			case'<':ch=fgetc(fp);
				if(ch=='=')
					output(38,"<=");
				else
				{
				fseek(fp,-1,1);
				output(36,"<");
				}
				break;
			case'!':ch=fgetc(fp);
				if(ch=='=')
					output(40,"!=");
				else
				{
				fseek(fp,-1,1);
				output(-1,"ERROR!");
				}
				break;
		}

}
void main()
{       FILE *fp;
	char wenjian[30];
	printf("输入文件:");
	scanf("%s",&wenjian);
	fp=fopen(wenjian,"r");
	while(!feof(fp))
	{
		scanner(fp);
	}
     
}

⌨️ 快捷键说明

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