📄 cifa.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 + -