📄 yanbo.cpp
字号:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream.h>
#include<conio.h>
#define Max_buffer_size 1024
#define Max_hen 10
#define Max_shu 10
char Buffer_tp1[Max_buffer_size];
char Buffer_tp2[Max_buffer_size];
char token[20];
char character[1];
char keyword[10][10];
char keywords[ Max_hen][Max_shu]=
{"while","for","if","then","do",
"switch" ,"main","else","include","int"
};
char buffer[20];
struct Identi_words
{
char words[20];
int id;
struct Identi_words *next;
};
Identi_words *head=NULL;
/* head=new struct Identi_words; */
/* struct Identi_words *tail=NULL; */
int iskeyword(char *str)
{ // cout<<str<<endl;
int i;
for(i=0;i<Max_shu;i++)
{ /* cout<<keywords[i]; */
if(!strcmp(keywords[i],str))
return i;
}
return 1;
}
int rightchar(char ch)
{ if ( ((ch>='0')&&(ch<='9'))
||((ch>='a')&&(ch<='z'))
||((ch>='A')&&(ch<='Z'))
||(ch=='+')||(ch=='-')||(ch=='*')||(ch=='/')||(ch=='(')
||(ch==')')||(ch=='<')||(ch=='>')
)
return 1;
else return 0;
}
int is0xchar(char ch)
{ if( ((ch>='0')&&(ch<='9'))
||((ch>='a')&&(ch<='f'))
||((ch>='A')&&(ch<='F'))
)
return 1;
else return 0;
}
int is0char(char ch)
{ if( ((ch>='0')&&(ch<='7')))
return 1;
else return 0;
}
int isletter(char ch)
{
if( (ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
return 1;
}
else
return 0;
}
int isdigit(char ch)
{
if( ch>='0'&&ch<='9')
{
return 1;
}
else
return 0;
}
void bulid_list(char *buffer)
{ int flag;
/*struct */
Identi_words *temp ,*Temphead ,*This;
temp=new Identi_words;
strcpy(temp->words,buffer);
if(head->next==NULL)
{ head->next=temp;
temp->id=1;
}
else
{ This=head;
Temphead=head;
while(This!=NULL)
{ if(!strcmp(This->next->words,buffer))
flag=1;
This=This->next;
}
if(flag!=1)
{ temp->id=Temphead->next->id+1;
temp->next=Temphead->next;
head->next=temp;
}
}
}
int search_list(char *buf)
{ struct Identi_words *temp;
temp=new Identi_words;
temp=head;
while(temp!=NULL)
{
if(!strcmp(temp->words,buf))
{
return temp->id;
}
temp=temp->next;
}
return 0;
}
void Buffer_clear()
{ int i;
for(i=0;i<20;i++)
buffer[i]='\0';
}
void main ()
{ char buf[2];
/* char ch;*/
int count=0;
head=new Identi_words;
head->next=NULL;
/* head=NULL; */
/* head->id=0; */
int idf;
FILE *programfile;
clrscr();
programfile=fopen("d:\\cf.txt","rb");
if(!programfile)
{
printf("Can not open the file %s");
exit(1);
}
do {
do{
character[0]=fgetc(programfile);
count=count+1;
}
//while(character[0]!='\0'&&character[0]!='\n'&&character[0]!=' '&&character[0]!='\r'&&character[0]!='0');
while(rightchar(character[0])==0&&character[0]!=';');
Buffer_clear();
int i=0;
if(isletter(character[0]))
{ buffer[i]=character[0];
i++;
character[0]=fgetc(programfile);
count=count+1;
do{
if(isletter(character[0])||isdigit(character[0]))
{
buffer[i]=character[0];
i=i+1;
character[0]=fgetc(programfile);
count=count+1;
}
/* character[0]=fgetc(programfile);
count=count+1; */
// buffer[i]='\0';
} while(rightchar(character[0])==1);
//while(character[0]!='\0'||character[0]!=' '||character[0]!='*'||character[0]!='\n'||character[0]!='\r');
/* fseek(programfile,-1,1); */
}
if((isdigit(character[0])==1)&&character[0]!='0')
{
do{
buffer[i]=character[0];
i++;
character[0]=fgetc(programfile);
count=count+1;
}while(isdigit(character[0]));
//buffer[i+1]='\0';
/* fseek(programfile,(count-1)*sizeof(char),0); */
}
if(character[0]=='0')
{ buffer[i]=character[0];
character[0]=fgetc(programfile);
if(character[0]=='x'||character[0]=='X')
{ // buffer[i]=character[0];
do{
i++;
buffer[i]=character[0];
character[0]=fgetc(programfile) ;
}while(is0xchar(character[0])==1);
printf("<0x number :%s>\n",buffer);
i=0;
// Buffer_clear();
}
else if(is0char(character[0]))
{ i=i+1;
buffer[i]=character[0];
character[0]=fgetc(programfile);
do{
i=i+1;
buffer[i]=character[0];
character[0]=fgetc(programfile) ;
}while(is0char(character[0])==1);
// buffer[i]='\0';
printf("<0 number :%s>\n",buffer);
i=0;
}
}
if(iskeyword(buffer)!=1)
{
printf("<KEY: %s>\n",buffer);
Buffer_clear();
}
if((iskeyword(buffer)==1)&&(buffer[0]!='\0'))
{
bulid_list(buffer);
idf=search_list(buffer);
if(idf!=0)
{ printf("<%s, List_number:%d>\n",buffer,idf);
Buffer_clear(); }
}
// cout<<character[0]<<"MMMMM"<<endl;
if(character[0]=='+')
{
printf("<plus-operator,+>\n");
}
if(character[0]=='-')
{
printf("<sub-operator,->\n");
}
if(character[0]=='*')
{
printf("<plus-operator,*>\n");
}
if(character[0]=='/')
{
printf("<dev-operator,/>\n");
}
if(character[0]=='(')
{
printf("<lpar,(>\n");
}
if(character[0]==')')
{
printf("<rpar,)>\n");
}
if(character[0]=='=')
{
printf("<equel-operator,=>\n");
}
if(character[0]=='>')
{ character[0]=fgetc(programfile);
if(character[0]=='=')
{
printf("<relation-operator,>=>\n");
}
else
{
fseek(programfile,-1,1);
printf("<relation-operator,>>\n");
}
}
if(character[0]=='<')
{ character[0]=fgetc(programfile);
if(character[0]=='=')
{
printf("<relation-operator,<=>\n");
}
else
{
fseek(programfile,-1,1);
printf("<relation-operator,<>\n");
}
}
/*if(character[0]=='=')
{
printf("<plus-operator,+>\n");
}*/
}
while(character[0]!=';');
exit(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -