2015-04-01 111 views
0

我想与C源代码,但我有erorr在我的计划词法分析器用C eroor

#include<stdio.h> 
 
#include<ctype.h> 
 
#include<string.h> 
 
void keyw(char *p); 
 
int i=0,id=0,kw=0,num=0,op=0; 
 
char keys[32][10]={"auto","break","case","char","const","continue","default", 
 
"do","double","else","enum","extern","float","for","goto", 
 
"if","int","long","register","return","short","signed", 
 
"sizeof","static","struct","switch","typedef","union", 
 
"unsigned","void","volatile","while"}; 
 
main() 
 
{ 
 
\t char ch,str[25],seps[15]=" \t\n,;(){}[]#\"<>",oper[]="!%^&*-+=~|.<>/?"; 
 
\t int j; 
 
\t char fname[50]; 
 
\t FILE *f1; 
 
\t //clrscr(); 
 
printf("enter file path (drive:\\fold\\filename)\n"); 
 
scanf("%s",fname); 
 
f1 = fopen(fname,"r"); 
 
//f1 = fopen("Input","r"); 
 
\t if(f1==NULL) 
 
\t { 
 
\t printf("file not found"); 
 
\t exit(0); 
 
\t } 
 
\t while((ch=fgetc(f1))!=EOF) 
 
\t { 
 
for(j=0;j<=14;j++) 
 
{ 
 
if(ch==oper[j]) 
 
{ 
 
printf("%c is an operator\n",ch); 
 
op++; 
 
str[i]='\0'; 
 
keyw(str); 
 
} 
 
} 
 
for(j=0;j<=14;j++) 
 
{ 
 
if(i==-1) 
 
break; 
 
if(ch==seps[j]) 
 
{ 
 
if(ch=='#') 
 
{ 
 
while(ch!='>') 
 
{ 
 
printf("%c",ch); 
 
ch=fgetc(f1); 
 
} 
 
printf("%c is a header file\n",ch); 
 
i=-1; 
 
break; 
 
} 
 
if(ch=='"') 
 
{ 
 
do 
 
{ 
 
ch=fgetc(f1); 
 
printf("%c",ch); 
 
}while(ch!='"'); 
 
printf("\b is an argument\n"); 
 
i=-1; 
 
break; 
 
} 
 
str[i]='\0'; 
 
keyw(str); 
 
} 
 
} 
 
if(i!=-1) 
 
{ 
 
str[i]=ch; 
 
i++; 
 
} 
 
else 
 
i=0; 
 
\t } 
 
printf("Keywords: %d\nIdentifiers: %d\nOperators: %d\nNumbers: %d\n",kw,id,op,num); 
 
//getch(); 
 
} 
 
void keyw(char *p) 
 
{ 
 
int k,flag=0; 
 
for(k=0;k<=31;k++) 
 
{ 
 
if(strcmp(keys[k],p)==0) 
 
{ 
 
printf("%s is a keyword\n",p); 
 
kw++; 
 
flag=1; 
 
break; 
 
} 
 
} 
 
if(flag==0) 
 
{ 
 
if(isdigit(p[0])) 
 
{ 
 
printf("%s is a number\n",p); 
 
num++; 
 
} 
 
else 
 
{ 
 
//if(p[0]!=13&&p[0]!=10) 
 
if(p[0]!='\0') 
 
{ 
 
printf("%s is an identifier\n",p); 
 
id++; 
 
} 
 
} 
 
} 
 
i=-1; 
 
}

eroor

C:\用户\ Jurs的\文档\ ABC \ main.cpp在函数'int main()'中:

13 27 C:\ Users \ Jurs \ Documents \ abc \ main.cpp [错误] chars数组的初始化字符串太长[-fpermissive]

25 9 C:\用户\ Jurs的\文件\ ABC \ main.cpp中[错误] '退出' 在此范围

28℃未声明:\用户\ Jurs的\文件\ ABC \生成文件。赢得目标 'main.o' 配方失败

回答

0

尝试改变

seps[15]=" \t\n,;(){}[]#\"<>" 

seps[16]=" \t\n,;(){}[]#\"<>" 

也尝试改变

main() 

int main() 

也许改变

exit(0); 

return 0; 
+0

感谢您的帮助 – 2015-04-01 10:16:04

+0

我怎样才能到检测或扫描分号? – 2015-04-01 15:43:56

+0

@Jujur - 分号已经在列表中。如果不起作用,请提供一个新问题,提供简单输入,预期结果和实际结果的示例。 – 4386427 2015-04-01 16:19:30