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

📄 cifa.cpp

📁 编程序
💻 CPP
字号:
#include <iostream.h>
#include<fstream.h>  //定位文件读写
#include"string.h"  //包含c语言的一个拷贝函数
char word[100];       //用来临时存放读到的字符系列
int makecode=0;
struct node           //存放数据
{
	char qian[10];     //存放保留字的属性如:关键字。标示符。符号或者数字
	char hou[20];      //存放实际的数据:if.else....   14。等 
	int hang;          //数据所在的行数
	node*next;          //建立链表 表示下一个节点
};
class doit{               //用来处理的类
public:
	doit(){first=NULL;};   //构造函数用来初始化成员变量
	~doit();             //析构 用来释放废弃空间
	void print();          //输出
	void compare(int hang,char b[]);     //输入以及与外界借口
private:
	int zimu(char x);
    int shuzi(char x);
	void insert(int hang,char x[],char y[]);
	int compareW(char x[]);
	void clear(char x[]);
	int fuhao(char x);
	node*first;
};

doit::~doit()
{
    node*p;
	p=first;
	while(first!=NULL)
	{
		first=p->next;
		delete p;
		p=first;
	}
}
 
void doit::print()                         //打印输出
{
	node*p;
	p=first;
	while(p!=NULL)
	{
		cout<<"第"<<p->hang<<"行:"<<p->qian<<"\t"<<p->hou<<endl;
		p=p->next;
	}
}

int doit::fuhao(char x)                       //判断字符
{
	switch(x)
	{
	case'(':
	case')':
	case'+':
	case'-':
	case'*':
	case'/':
    case'<':
    case'=':
    case';':
    case':':
	case'{':
		return 1;
	default:
		return 0;
	}
}

void doit::clear(char x[])                 //晴空树祖
{
	for(int i=0;i<100;i++)
        x[i]=0;
}

int doit::zimu(char x)                    //判断字母
{
	if(((int)x<=90&&(int)x>=65)||((int)x<=122&&(int)x>=97))
		return 1;
	else 
		return 0;
}
/*enum guanjian{if,else,then ,int ,char };
循环:
 for(int i=0;i<5;i++)
 {
    if(strcmp(word,guanjian[i]))
     word 就是关键字  return 1;
 }

不是 	 return 0;

*/
int doit::compareW(char x[])                   //关键字判断
{
     if(x[0]=='i'&&x[1]=='f'&&x[2]=='\0')
          return 1;
	 else if(x[0]=='e'&&x[1]=='l'&&x[2]=='s'&&x[3]=='e'&&x[4]=='\0')
		 return 1;
	 else if(x[0]=='t'&&x[1]=='h'&&x[2]=='e'&&x[3]=='n'&&x[4]=='\0')
		 return 1;
	 else if(x[0]=='e'&&x[1]=='n'&&x[2]=='d'&&x[3]=='\0')
		 return 1;
	 else if(x[0]=='r'&&x[1]=='e'&&x[2]=='p'&&x[3]=='e'&&x[4]=='a'&&x[5]=='t'&&x[6]=='\0')
		 return 1;
	 else if(x[0]=='u'&&x[1]=='n'&&x[2]=='t'&&x[3]=='i'&&x[4]=='l'&&x[5]=='\0')
		 return 1;
	 else if(x[0]=='r'&&x[1]=='e'&&x[2]=='a'&&x[3]=='d'&&x[4]=='\0')
		 return 1;
	 else if(x[0]=='w'&&x[1]=='r'&&x[2]=='i'&&x[3]=='t'&&x[4]=='e'&&x[5]=='\0')
		 return 1;
	 else
		 return 0;
}

int doit::shuzi(char x)                      //数字判断
{
    if((int)x<=57&&(int)x>=48)
		return 1;
	else 
		return 0;
}

void doit::insert(int hang,char x[],char y[])          ///插入节电
{
    node *p=new node,*q;
	strcpy(p->qian,y);
	strcpy(p->hou,x);
	p->hang=hang;
	q=first;
	if(first==NULL)
	{
		first=p;
		first->next=NULL;
		return;
	}
	else
	{
        while(q->next!=NULL)
			q=q->next;
		q->next=p;
		q=p;
		q->next=NULL;
	}
}

void doit::compare(int hang,char b[])                   //输入以及与外界借口
{ 

	int i=0;
    while(i<200)
	{
		if(makecode==1)
		    goto loop;
		clear(word);
		if(zimu(b[i]))                               //是关键字或者标示符
		{
			word[0]=b[i];
			int x=1;
			i++;
			while(zimu(b[i])||shuzi(b[i]))
			{
				word[x]=b[i];
				x++;i++;
			}
			word[x]='\0';
			if(compareW(word))
			    insert(hang,word,"关键字"); 
			else
				insert(hang,word,"标示符");   
			continue;
		}
		else if(shuzi(b[i]))
		{
            word[0]=b[i];
			int x=1;
			i++;
			while(shuzi(b[i]))
			{
				word[x]=b[i];
				x++;i++;
			}
			insert(hang,word,"数字");
			continue;
		}
		else if(fuhao(b[i]))
		{
			if(b[i]=='{')
			{
				makecode=1;
				i++;
loop:		
				while(b[i]!='}'&&(int)b[i]!=-52)
				{
					i++; 
					if((int)b[i]==-52)
						return;
				}
				if(b[i]=='}')
				{
					makecode=0;
					i++;
					continue;
				}
			}
			else if(b[i]==':')
			{
				if(b[i+1]=='=')
				{
					word[0]=b[i];
					word[1]=b[i+1];
					insert(hang,word,"符号");
					i=i+2;
					continue;
				}
			}
			word[0]=b[i];
		    insert(hang,word,"符号");
			i++;
			continue;
		}
		else if(b[i]=='\0'||b[i]==' '||b[i]=='\n'||(int)b[i]==-52)
		{
			if((int)b[i]==-52)
				return;
			i++;
			continue;
		}
		else
		{
            insert(hang,"error","error");
			i++;
		}
	}
}
void clearb(char x[])              
{
	for(int j=0;j<200;j++)
        x[j]=0; 
}

void main()
{
	char b[200];
	ifstream fin("1.txt",ios::nocreate);
    int hang=1;
	doit one;
	while(!fin.eof())
	{
	   fin.getline(b,200);	   
	   one.compare(hang,b);
	   clearb(b);
	   hang++;
	}	
	one.print();
}

⌨️ 快捷键说明

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