读书人

编译原理词法分析的代码有点有关问

发布时间: 2012-11-03 10:57:44 作者: rapoo

编译原理,,词法分析的代码,有点问题,麻烦帮忙查下吧....
#include<stdio.h>
#include <string.h>
int main()
{int p=0,m,x=0;
char blzpd(char *b);
char ch;
int i=0,j;
char a[50],c[50];
char jf[7]={',','.','(',')','[',']','/'};
char ysf[6]={'+','-','*','/','=','!'};
//char *blz[3]={"begain","include","getchar"};
printf("请输入并且以#结束:");
ch=' ';
while(ch==' ') //跳过空格
{//printf("出现空格\n");
//printf(" ");
ch=getchar();

while(ch!=' ') //下面的while跳出后,输出连续的字符串
{
while(ch!=' ') //得到连续的字符串,遇到空格跳出
{
a[i]=ch;
ch=getchar();
i++;
if(ch=='#')
break;
}
a[i]=0;
//for(j=0;j<i;j++)
//printf("%c",a[j]);
a[i]=0 ;
//blzpd(a);
//-------------------下面这一块是判断------------------//
if(blzpd(a)==0)
for(j=0;j<i;j++)
if(a[j]>='a'&&a[j]<='z'||a[j]>='A'&&a[j]<='Z')
switch(x)
{
case 0:{c[p]=a[j];x=1;}
case 1:{p++;c[p]=a[j];x=1;}
case 2:{if(c[0]<='9'&&c[0]>='0')
printf("数 字%s 编码03\n",c);
memset(c,'\0',sizeof(a));x=1;
}
case 3:
case 4:{memset(c,'\0',sizeof(a));p=0;c[p]=a[j];
}
}
else if(a[j]>='0'&&a[j]<='9')
switch(x)
{case 1:
case 2: {p++;c[p]=a[j];x=2;}
case 3:
case 4: {memset(c,'\0',sizeof(c));p=0;c[p]=a[j];x=2;}
}
else switch(a[j])
{{ case '+':
case '-':
case '*':
case '/':
case '=':
case '!': {x=4;switch(x)
{case 1:{printf("标示符%s 编码02\n",c);
memeset(c,'\0',sizeof(c));printf("运算符%c 编码04\n",a[j]);}
case 2:{if(c[0]<='9'&&c[0]>='0')printf("数 字%s 编码03\n",c);
else printf("标示符%s 编码02\n",c);
memeset(c,'\0',sizeof(c));printf("运算符%c 编码04\n",a[j]);}
}
case 3:
case 4:printf("运算符%c 编码04\n",a[j]);
}
}
}
switch(a[j])
{
case ',':
case '.':
case '(':
case ')':
case '[':
case ']':
case '/':{x=3;switch(x)
{case 1:{printf("标示符%s 编码02\n",c);
memeset(c,'\0',sizeof(c));printf("界 符%c 编码04\n",a[j]);}
case 2:{if(c[0]<='9'&&c[0]>='0')printf("数 字%s 编码03\n",c);
else printf("标示符%s 编码02\n",c);
memeset(c,'\0',sizeof(c));printf("界 符%c 编码04\n",a[j]);}
}
case 3:
case 4:printf("界 符%c 编码04\n",a[j]);
}
}
} }
//--------------------------------------------------//
printf("\n");
i=0;
if(ch=='#')
break;
}
}
//retrun(0);
printf("运行没问题\n");
//retrun(0);
}
char blzpd(char *b)
{ int m;
char *blz[9]={"begain","include","getchar","printf","int","if","else","char","void"};


for(m=0;m<9;m++)
if(strcmp(b,blz[m])==0)
{printf("保留字%s 编码01\n",b);
return 1;
break;
}
else
continue;
//printf("不同");
return 0;
}


[解决办法]
LEX+YACC

读书人网 >C语言

热点推荐