首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

编译原理,词法分析的代码,有点有关问题,麻烦帮忙查上吧.

2012-11-03 
编译原理,,词法分析的代码,有点问题,麻烦帮忙查下吧....#includestdio.h#include string.hint main(){

编译原理,,词法分析的代码,有点问题,麻烦帮忙查下吧....
#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

热点排行