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

📄 jf.cpp

📁 八位2进制相加 就是2进制数的加法 是8位的
💻 CPP
字号:
#include "stdio.h"
#include "string.h"

#define KEY_No 1
#define ID_No 2
#define Number_No 3
#define Sign_No 4
#define Other_No 5

#define M 1000
#define KEYNumber 4
#define MaxTLenth 100

char A[M]; //字符缓冲区
int pA=0; //字符缓冲区指针
char* KEY[KEYNumber]={"if","for","continue","break"};
//char* Sign[SignNumber]={"+","-","*","/","=","<","<=",">=","==","!="};
char C; //用于存放取到的一个字符
char T[MaxTLenth]; //用于存放取到的一个单词
int pT=0;


bool Scan();
void GetRestSign();
void PrintSigleSign();
void GetRestNumber();
void GetRestID();
void CutBlank();
char GetFirstChar();
bool IsBlank();
bool IsKey();
bool IsSign();
char GetChar();
bool IsStr(char * s);
void Print(int Type);

void main()
{
	int i=0;
	while(1)
	{
		scanf("%c",A+i);
		if(A[i]=='#')
		{
			break;
		}
		i++;
	}
	Scan();
}

bool Scan()
{
	C=GetFirstChar(); //获取下一个单词的第一个字母
	while(C>=0) //通过判断 C 的类型,读入分析下一个单词的类型
	{
		if(C>='a' && C<'z' || C>='A' && C<='Z')	//关键词或标识符
		{
			GetRestID();
			if(IsKey())
				Print(KEY_No);
			else
				Print(ID_No);
			continue;
		}
		else if(C>='0' && C<='9') //整数
		{
			GetRestNumber();
			Print(Number_No);
			continue;
		}
		//下面是判断是否是运算符
		else if(C=='+' || C=='-' || C=='*' || C=='/')
		{
			PrintSigleSign();
			continue;
		}
		else if(C=='=' || C=='!' || C=='<' || C=='>')
		{
			GetRestSign();
			Print(Sign_No);
			continue;
		}
		else
		{
			T[0]=C;
			pT=1;
			Print(Other_No);
			C=' ';
			CutBlank();
			continue;
		}
	}
	return true;
}

void GetRestSign() //依据第一个数字C读入后面的"="组成两个字符的运算符放到全局变量T中
{
	T[0]=C;
	pT=1;
	while (1)
	{
		if((C=GetChar())<0) return;
		if(C=='=')
			T[pT++]=C;
		else
		{
			CutBlank();
			return ;
		}
	}
}

void PrintSigleSign()
{
	T[0]=C;
	pT=1;
	Print(Sign_No);
	C=' ';
	CutBlank();
}

void GetRestNumber() //依据第一个数字C读入后面所有的数字组成整数放到全局变量T中
{
	T[0]=C;
	pT=1;
	while (1)
	{
		if((C=GetChar())<0) return;
		if(C>='0' && C<='9')
			T[pT++]=C;
		else
		{
			CutBlank();
			return ;
		}
	}
}

void GetRestID() //依据第一个字母C读入后面所有的字母数字组成单词放到全局变量T中
{
	T[0]=C;
	pT=1;
	while (1)
	{
		if((C=GetChar())<0) return;
		if(C>='a' && C<='z' || C>='A' && C<='Z' || C>='0' && C<='9')
			T[pT++]=C;
		else
		{
			CutBlank();
			return ;
		}
	}
}

void CutBlank() //如果C是空格忽略掉所有的空格,直到非空格
{
	while(IsBlank())
	{
		C=GetChar();
	}
}

char GetFirstChar() //获取下一个单词的第一个字母
{
	do{C=GetChar();}while(IsBlank());
	return C;
}

bool IsBlank() //判断读到的字符是否为空格
{
	if(C<0)return false;
	if(C<=32)return true;
	return false;
}

bool IsKey() //判断T中的单词是否为关键字
{
	int i;
	for(i=0;i<KEYNumber;i++)
	{
		if(IsStr(KEY[i]))return true;
	}
	return false;
}

char GetChar() //从缓冲区获取一个字符
{
	if(A[pA]!='#')
		return A[pA++];
	else
		return -1;
}

bool IsStr(char * s) //将T和s比较是否相等
{
	int i;
	for(i=0;i<pT;i++)
	{
		if(s[i]==0 || s[i]!=T[i]) return false;
	}
	if(s[i]!=0)
		return false;
	else
		return true;
}

void Print(int Type)
{
	T[pT]='\0';
	printf("(%d,\"%s\")\n",Type,T);
}

⌨️ 快捷键说明

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