📄 cifa.c
字号:
#include<stdio.h>
#include<stdlib.h>
int getword(int i,char *buf,char*word);
int wordtype(char* word);
int main(void)
{
FILE *fp;
char buf[1000]; //缓冲区
char path[100];
int i=0,j=0;
int type=2;
char word[16];
printf("Enter Source Path and Name:\n");
scanf("%s",buf);
while(buf[i]!='\0'){
if(buf[i]=='\\'){path[j+i]='\\';j++;}
path[i+j]=buf[i];
i++;}
path[i+j]='\0';
fp=fopen(buf,"r");
i=0;
buf[i]=fgetc(fp);
for(i=1;i<1000&&buf[i-1]!=EOF;i++){
buf[i]=fgetc(fp);}
buf[i]='\0';
printf("%s\n",buf);
for(i=0;buf[i]!=EOF;){ //缓冲区中是否有字符
i=getword(i,buf,word); //取单词
type=wordtype(word); //判断类型
printf("(%d,\"%s\")\n",type,word); //输出
}
return 0;
}
int getword(int i,char *buf,char*word) //取单词
{
int j=0;
if(buf[i+j]>='a'&&buf[i+j]<='z')
while(buf[i+j]>='a'&&buf[i+j]<='z'||buf[i+j]>='0'&&buf[i+j]<='9'){
word[j]=buf[i+j];
j++;
}
else if(buf[i+j]>='0'&&buf[i+j]<='9')
while(buf[i+j]>='0'&&buf[i+j]<='9'){
word[j]=buf[i+j];
j++;
if(buf[i+j]>='a'&&buf[i+j]<='z')printf("Error char %c after digit %c",buf[i+j],buf[i+j-1]);
}
else if(buf[i]=='+'||buf[i]=='-'||buf[i]=='*'||buf[i]=='/'||buf[i]=='='||buf[i]=='('||buf[i]==')'||buf[i]=='{'||buf[i]=='}'||buf[i]==','||buf[i]==';'||buf[i]=='['||buf[i]==']')
{word[j]=buf[i+j];j++;}
else if(buf[i+j]>='<'&&buf[i+j]<='>')
while(buf[i+j]>='<'&&buf[i+j]<='>'){
word[j]=buf[i+j];
j++;
}
else if(buf[i]=='!'){
if(buf[i]!='=')printf("error %c after ! is illegle",buf[i]);
word[0]=buf[i];
word[1]=buf[i+1];
j=j+2;
}
else printf("Error illegle charactor %c",buf[i]),j++;
word[j]='\0';
while(buf[i+j]==' '||buf[i+j]=='\n')j++;
return i+j;
}
int wordtype(char* word) //判断类型
{
int i=0;
if(word[0]>='a'&&word[0]<='z'){ //判断是否保留字,否则为标识符
if(word[0]=='i'&&word[1]=='f'&&word[2]=='\0') return 1;
if(word[0]=='i'&&word[1]=='n'&&word[2]=='t'&&word[3]=='\0') return 1;
if(word[0]=='f'&&word[1]=='o'&&word[2]=='r'&&word[3]=='\0') return 1;
if(word[0]=='w'&&word[1]=='h'&&word[2]=='i'&&word[3]=='l'&&word[4]=='e'&&word[5]=='\0') return 1;
if(word[0]=='d'&&word[1]=='o'&&word[2]=='\0') return 1;
if(word[0]=='r'&&word[1]=='e'&&word[2]=='t'&&word[3]=='u'&&word[4]=='r'&&word[5]=='n'&&word[6]=='\0') return 1;
if(word[0]=='b'&&word[1]=='r'&&word[2]=='e'&&word[3]=='a'&&word[4]=='k'&&word[5]=='\0') return 1;
if(word[0]=='c'&&word[1]=='o'&&word[2]=='n'&&word[3]=='t'&&word[4]=='i'&&word[5]=='n'&&word[6]=='u'&&word[7]=='e'&&word[8]=='\0') return 1;
else return 2;
}
else if(word[0]>='0'&&word[0]<='9') return 3;//数字
Else if(word[0]=='+'||word[0]=='-'||word[0]=='*'||word[0]=='/'||word[0]=='='||word[0]=='<'||word[0]=='>'||word[0]=='!') return 4;//运算符
else if(word[0]==','||word[0]==';'||word[0]=='('||word[0]==')'||word[0]=='{'||word[0]=='}'||word[0]=='['||word[0]==']') return 5;//分隔符
else return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -