永发信息网

修改词法分析器代码

答案:1  悬赏:20  手机版
解决时间 2021-03-30 17:02
  • 提问者网友:爱了却不能说
  • 2021-03-30 08:55
修改词法分析器代码
最佳答案
  • 五星知识达人网友:孤老序
  • 2021-03-30 09:02
把你改了好几处细小的地方。。你自己看看是否已经满足你的需求
#include"stdio.h"
#include"string.h"
#include"ctype.h"
#include"stdlib.h"

char prog[100],token[10],ch;
int syn,p,m,n,sum;
char *rwtab[9]={"int","void","main","if","then","while","do","continue","break"};
void scaner();
main()
{
p=0;
printf(" please input a string (end with '#'): \n");
scanf("%c",&ch);
while(ch!='#')
{
prog[p++]=ch;
scanf("%c",&ch);
}
p=0;
do
{
scaner();
switch(syn)
{
case 3:printf("( %d %13d )\n",syn,sum);
break;
case -1:printf("you have input a wrong string\n");
getchar();
exit(0);
default: printf("( %d %s )\n",syn,token);
break;
}
}while(prog[p]!=0);
}

void scaner()
{
sum=0;
for(m=0;m<10;m++)
token[m]=0;
ch=prog[p];
m=0;
while((ch==' ')||(ch=='\n'))
{
ch=prog[++p];
syn=-1;
}
if(isalpha(ch))
{
while(isalpha(ch))
{
token[m++]=ch;
ch=prog[++p];
}
syn=2;
for(n=0;n<9;n++)
if(strcmp(token,rwtab[n])==0)
{
syn=1;
break;
}
}
else if(isdigit(ch))
{
while(isdigit(ch))
{
sum=sum*10+ch-'0';
ch=prog[++p];
}
syn=3;
}
else switch(ch)
{
case '+': syn=4;
token[m++]=ch;
p++;
token[m++]='\0';
break;
case '\"': syn=5;
token[m++]=ch;
p++;
token[m++]='\0';
break;
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯