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

📄 cpp1.cpp

📁 最简单的词法分析,应付考试的.比较好使,自己编的不算很高级
💻 CPP
字号:
#include "stdio.h"
#include "string.h"
char labs[25]={
'+','-','*','/','_',
'<','>','.',',','=',
'\n','&','(',')','%',
'!','{','}','[',']',
':',';','"','\\',' '};			// +-*/_<>,.=%&()?!{}[]:;\" .....

char labi[20][10]={
"int","float","for","if","void","return","printf",
"main","continue","char","getchar"
};					//定义保留字

char userr[50][20];
//*********************************************************************
int isd(char ch)		//检测char是不是数字
{
	if((ch-'0'>=0) && (ch-'9'<=0))
		return 1;
	else 
		return 0;
}
int isint(char *str)
{
	int i=0;
	if(str[i]=='0')
	{
		return 0;
	}
	else
	{
		for(i=0;str[i]!='\0';i++)
			if(!isd(str[i]))
				return 0;
		return 1;
	}
}
int isss(char ch)		//检测是不是特殊字符labs[]
{
	int i;
	for(i=0;i<25;i++)
		if(labs[i]==ch)
			return 1;
	return 0;
}
int isblz(char *str)	//检查是不是保留字
{
	int i;
	for(i=0;i<20;i++)
		if(!strcmp(labi[i],str))
			return 1;
	return 0;
}
int isl(char ch)		//检测是不是字母
{
	if(((ch-'a'>=0) && (ch-'z'<=0))||((ch-'A'>=0) && (ch-'Z'<=0)))
		return 1;
	else 
		return 0;
}
int isid(char *str)
{
	int i=0;
	if(isl(str[0]))
	{
		i++;
		while(isl(str[i])||isd(str[i]))
		{
			i++;
		}
		if(isl(str[i])||isd(str[i]))
			return 0;
		return 1;
	}
	return 0;
}
//*********************************************************************
void clear(char *temp)
{
	int i;
	for(i=0;i<20;i++)
		temp[i]='\0';
}
//**********************************************************************
void lxxx(char *str)		//词法分析函数
{
	int i=0,k=0,j=0;int n;
	int m=0;
	for(i=0;i<50;i++)
		if (userr[i][0]!='\0') j++;
	char temp[20];
	clear(temp);
	for(i=0;i<20;i++)
	{
		if(!isss(str[i]))
			temp[k++]=str[i];
		if(isss(str[i]))
		{
			if(!temp[0]=='\0')
			{
				for(n=0;n<10;n++)
					userr[j][n]=temp[n];
				clear(temp);
				k=0;
				j++;
			}
			if (isss(str[i])&&(str[i]!=' '))
			{
				userr[j][0]=str[i];
				j++;
			}
		}
		
	}
}
//*************************************************************
void test()
{
	int val=0;
	char c;
	c=getchar();
	while (c!='\n')
	{
		while(isd(c))
		{
			val=val *10 + c - '0';
			c=getchar();
		}
		while(isl(c))
		{
			c=getchar();
		}
		getchar();
	}
	printf("\n\n%d",val);		//这里确实是数字,而且是一个无符号的整数。
	char iio;int i;

	printf("\n\nInput a letter:\n");
	iio=getchar();
	if (isl(iio))
		printf("\n\nThat is a letter.!");
	else
		printf("\n\nNot a letter.!");

	printf("\n\nInput a char:\n");
	getchar();
	iio=getchar();
	for (i=0;i<25;i++)
	{
		if (isss(iio))
		{
			printf("\nThis is a specific symbol!!!");break;
		}
	}
}

void print(char strss[50][20])
{
	int i,j;
	for(j=0;j<50;j++)
	{
		i=0;
		while(strss[j][i]!='\0')
		{
			if(strss[j][i]!='\0') 
				printf("%c",strss[j][i]);
			else
				continue;
		i++;
		}
		if(strss[j][0]!='\0')
		{
			if(isblz(strss[j]))
			{
				printf("\t\t\t保留字");
			}
			else if(isss(strss[j][0]))
			{
				printf("\t\t\t符号");
			}
			else if(isint(strss[j]))	//这里要有改动
			{
				printf("\t\t\t数字");
			}
			else if(isid(strss[j]))
			{
				printf("\t\t\tid");
			}
			else printf("\t\t\t????");
			printf("\n");
		}
	}
}
void initialize(char userr[][20])
{
	int i,j;
	for(j=0;j<50;j++)
		for(i=0;i<20;i++)
			userr[j][i]='\0';
}
int main()
{
	int i,j;
	for(j=0;j<50;j++)
		for(i=0;i<20;i++)
			userr[j][i]='\0';

	char text[20];			//临时的小空间
	clear(text);
	//char buffer[50][20];
	i=0;

	FILE *fp;
	char ch;
	if((fp=fopen("inst.txt","r"))==NULL)
		printf("Can't open file!!\n");
	ch=fgetc(fp);
	while(ch!=EOF)
	{	
		if(ch!='\n')
			text[i]=ch;
		i++;
		if(ch=='\n')
		{
			lxxx(text);
			clear(text);
			i=0;
		}
		ch=fgetc(fp);
	}
	print(userr);
	return 0;
}

⌨️ 快捷键说明

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